merge cmake_pascal branch in default
authorkoda
Thu, 13 Jun 2013 22:27:23 +0200
changeset 9224 bce8cf41d666
parent 9223 71fc5893071c (diff)
parent 8869 11438c0bd46b (current diff)
child 9225 d8d929f92633
merge cmake_pascal branch in default
CMakeLists.txt
cmake_modules/FindFreePascal.cmake
cmake_modules/paths.cmake
cmake_modules/utils.cmake
hedgewars/CMakeLists.txt
hedgewars/GSHandlers.inc
hedgewars/SDLMain.h
hedgewars/SDLMain.m
hedgewars/SDLh.pas
hedgewars/avwrapper.c
hedgewars/avwrapper/CMakeLists.txt
hedgewars/avwrapper/avwrapper.c
hedgewars/uGears.pas
hedgewars/uPhysFSLayer.pas
hedgewars/uTeams.pas
misc/libphysfs/CMakeLists.txt
tools/build_windows.bat
--- a/.hgignore	Tue Apr 30 01:47:30 2013 +0200
+++ b/.hgignore	Thu Jun 13 22:27:23 2013 +0200
@@ -3,6 +3,7 @@
 glob:moc_*.cxx
 glob:qrc_*.cxx
 glob:*.o
+glob:*.a
 glob:*.qm
 glob:Makefile
 glob:bin
@@ -54,8 +55,8 @@
 glob:project_files/Android-build/SDL-android-project/.*
 glob:project_files/Android-build/out
 glob:project_files/Android-build/Makefile.android
-glob:hedgewars-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug
-glob:hedgewars-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Release
+glob:hedgewars-build-desktop-Qt*
+glob:hedgewars-build-desktop-Qt*
 glob:*.depends
 glob:tools/build_windows_koda.bat
 glob:share/hedgewars/Data/misc/hwengine.desktop
@@ -63,3 +64,5 @@
 glob:_CPack_Packages/
 glob:version_info.txt
 glob:*.tar.*
+glob:*.or
+glob:*.res
\ No newline at end of file
--- a/.hgtags	Tue Apr 30 01:47:30 2013 +0200
+++ b/.hgtags	Thu Jun 13 22:27:23 2013 +0200
@@ -59,3 +59,4 @@
 0000000000000000000000000000000000000000 0.9.18-release
 0000000000000000000000000000000000000000 0.9.18-release
 2fc02902c7cbf3c29bfe08a50e5f37983582b251 0.9.18-release
+1617149e01a4fa25637e2ab655d0287ef9c21b7c 0.9.19-release
--- a/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -1,15 +1,8 @@
 project(hedgewars)
 
 #initialise cmake environment
-cmake_minimum_required(VERSION 2.6.0)
-if(CMAKE_VERSION VERSION_LESS "2.8")
-    set(WARNING "WARNING: ")
-    set(allow_parse_args FALSE)
-else()
-    set(WARNING WARNING)
-    set(allow_parse_args TRUE)
-endif()
-foreach(hwpolicy CMP0003 CMP0012 CMP0017)
+cmake_minimum_required(VERSION 2.6.4)
+foreach(hwpolicy CMP0003 CMP0012 CMP0017 CMP0018)
     if(POLICY ${hwpolicy})
         cmake_policy(SET ${hwpolicy} NEW)
     endif()
@@ -23,14 +16,22 @@
 option(NOPNG "Disable screenshoot compression (off)" OFF)
 option(NOVIDEOREC "Disable video recording (off)" OFF)
 
+#libraries are built shared unless explicitly added as a static
+option(BUILD_SHARED_LIBS "Build libraries as shared modules (on)" ON)
 #set this to ON when 2.1.0 becomes more widespread (and only for linux)
-option(SYSTEM_PHYSFS "Use system physfs (off)" OFF)
+option(PHYSFS_SYSTEM "Use system physfs (off)" OFF)
+
+if(WIN32 OR APPLE)
+    option(LUA_SYSTEM "Use system lua (off)" OFF)
+else()
+    option(LUA_SYSTEM "Use system lua (on)" ON)
+endif()
 
 option(BUILD_ENGINE_LIBRARY "Enable hwengine library (off)" OFF)
 option(ANDROID "Enable Android build (off)" OFF)
 
 if(UNIX AND NOT APPLE)
-    option(MINIMAL_CFLAGS "Respect system CFLAGS as much as possible (off)" OFF)
+    option(MINIMAL_FLAGS "Respect system flags as much as possible (off)" OFF)
 else()
     option(NOAUTOUPDATE "Disable OS X Sparkle update checking" OFF)
 endif()
@@ -42,167 +43,21 @@
 endif()
 
 
-#detect Mercurial revision and init rev/hash information
-find_program(HGCOMMAND hg)
-if(HGCOMMAND AND (EXISTS ${CMAKE_SOURCE_DIR}/.hg))
-    execute_process(COMMAND ${HGCOMMAND} identify -in
-                    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-                    OUTPUT_VARIABLE internal_version
-                    ERROR_QUIET
-                )
-    #check local repo status
-    string(REGEX REPLACE "[^+]" "" HGCHANGED ${internal_version})
-    string(REGEX REPLACE "[0-9a-zA-Z]+(.*) ([0-9]+)(.*)" "\\2" HEDGEWARS_REVISION ${internal_version})
-    string(REGEX REPLACE "([0-9a-zA-Z]+)(.*) [0-9]+(.*)" "\\1" HEDGEWARS_HASH ${internal_version})
-
-    if(HGCHANGED)
-        message(${WARNING} "You have uncommitted changes in your repository!")
-    endif()
-    #let's assume that if you have hg you might be interested in debugging
-    set(default_build_type "DEBUG")
-    #write down hash and rev for easy picking should hg be missing
-    file(WRITE "${CMAKE_SOURCE_DIR}/share/version_info.txt" "Hedgewars versioning information, do not modify\nrev ${HEDGEWARS_REVISION}\nhash ${HEDGEWARS_HASH}\n")
-else()
-    set(default_build_type "RELEASE")
-    # when compiling outside rev control, fetch revision and hash information from version_info.txt
-    find_file(version_info version_info.txt PATH ${CMAKE_SOURCE_DIR}/share)
-    if(version_info)
-        file(STRINGS ${version_info} internal_version REGEX "rev")
-        string(REGEX REPLACE "rev ([0-9]*)" "\\1" HEDGEWARS_REVISION ${internal_version})
-        file(STRINGS ${version_info} internal_version REGEX "hash")
-        string(REGEX REPLACE "hash ([a-zA-Z0-9]*)" "\\1" HEDGEWARS_HASH ${internal_version})
-    else()
-        message(${WARNING} "${CMAKE_SOURCE_DIR}/share/version_info.txt not found, revision information "
-                           "will be incorrect!!! Contact your source provider to fix this!")
-        set(HEDGEWARS_REVISION "0000")
-        set(HEDGEWARS_HASH "unknown")
-    endif()
-endif()
-
-
 #versioning
 set(CPACK_PACKAGE_VERSION_MAJOR 0)
 set(CPACK_PACKAGE_VERSION_MINOR 9)
-set(CPACK_PACKAGE_VERSION_PATCH 19)
-set(HEDGEWARS_PROTO_VER 44)
+set(CPACK_PACKAGE_VERSION_PATCH 20)
+set(HEDGEWARS_PROTO_VER 46)
 set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+include(${CMAKE_MODULE_PATH}/revinfo.cmake)
 
 message(STATUS "Building ${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION} (${HEDGEWARS_HASH})")
 
-
-#where to build libs and bins
-set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-#these variables are for non-makefile generators
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${EXECUTABLE_OUTPUT_PATH})
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${EXECUTABLE_OUTPUT_PATH})
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${LIBRARY_OUTPUT_PATH})
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${LIBRARY_OUTPUT_PATH})
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${LIBRARY_OUTPUT_PATH})
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${LIBRARY_OUTPUT_PATH})
-
-#resource paths
-if(UNIX AND NOT APPLE)
-    set(target_binary_install_dir "bin")
-    set(target_library_install_dir "lib")
-
-    string(SUBSTRING "${DATA_INSTALL_DIR}" 0 1 sharepath_start)
-    if (NOT (${sharepath_start} MATCHES "/"))
-        set(HEDGEWARS_DATADIR "${CMAKE_INSTALL_PREFIX}/${DATA_INSTALL_DIR}/")
-    else()
-        set(HEDGEWARS_DATADIR "${DATA_INSTALL_DIR}/")
-    endif()
-    set(HEDGEWARS_FULL_DATADIR "${HEDGEWARS_DATADIR}")
-else()
-    set(target_binary_install_dir "./")
-
-    if(APPLE)
-        set(target_library_install_dir "../Frameworks/")
-        set(CMAKE_INSTALL_PREFIX "Hedgewars.app/Contents/MacOS/")
-        set(HEDGEWARS_DATADIR "../Resources/")
-        set(HEDGEWARS_FULL_DATADIR "/Applications/${CMAKE_INSTALL_PREFIX}/${HEDGEWARS_DATADIR}")
-    elseif(WIN32)
-        set(target_library_install_dir "./")
-        set(HEDGEWARS_DATADIR "./")
-        set(HEDGEWARS_FULL_DATADIR "${CMAKE_INSTALL_PREFIX}/")
-        link_directories("${EXECUTABLE_OUTPUT_PATH}" "${CMAKE_SOURCE_DIR}/misc/winutils/bin")
-    endif()
-endif()
-
-
-if(APPLE)
-    set(CMAKE_FIND_FRAMEWORK "FIRST")
-
-    #what system are we building for
-    set(minimum_macosx_version $ENV{MACOSX_DEPLOYMENT_TARGET})
-
-    #detect on which system we are: if sw_vers cannot be found for any reason (re)use minimum_macosx_version
-    find_program(sw_vers sw_vers)
-    if(sw_vers)
-        execute_process(COMMAND ${sw_vers} "-productVersion"
-                        OUTPUT_VARIABLE current_macosx_version
-                        OUTPUT_STRIP_TRAILING_WHITESPACE)
-        string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" current_macosx_version ${current_macosx_version})
-    else()
-        if(NOT minimum_macosx_version)
-            message(FATAL_ERROR "sw_vers not found! Need explicit MACOSX_DEPLOYMENT_TARGET variable set")
-        else()
-            message(${WARNING} "sw_vers not found! Fallback to MACOSX_DEPLOYMENT_TARGET variable")
-            set(current_macosx_version ${minimum_macosx_version})
-        endif()
-    endif()
-
-    #if nothing is set, we deploy only for the current system
-    if(NOT minimum_macosx_version)
-        set(minimum_macosx_version ${current_macosx_version})
-    endif()
-
-    #lower systems don't have enough processing power anyway
-    if (minimum_macosx_version VERSION_LESS "10.4")
-        message(FATAL_ERROR "Hedgewars is not supported on Mac OS X pre-10.4")
-    endif()
-
-    #workaround for http://playcontrol.net/ewing/jibberjabber/big_behind-the-scenes_chang.html#SDL_mixer (Update 2)
-    if(current_macosx_version VERSION_EQUAL "10.4")
-        find_package(SDL_mixer REQUIRED)
-        set(DYLIB_SMPEG "-dylib_file @loader_path/Frameworks/smpeg.framework/Versions/A/smpeg:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/smpeg.framework/Versions/A/smpeg")
-        set(DYLIB_MIKMOD "-dylib_file @loader_path/Frameworks/mikmod.framework/Versions/A/mikmod:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/mikmod.framework/Versions/A/mikmod")
-        add_flag_append(CMAKE_C_FLAGS "${DYLIB_SMPEG} ${DYLIB_MIKMOD}")
-        add_flag_append(CMAKE_Pascal_FLAGS "-k${DYLIB_SMPEG}" "-k${DYLIB_MIKMOD}")
-    endif()
-
-    #CMAKE_OSX_ARCHITECTURES and CMAKE_OSX_SYSROOT need to be set for universal binary and correct linking
-    if(NOT CMAKE_OSX_ARCHITECTURES)
-        if(current_macosx_version VERSION_LESS "10.6")
-            if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "powerpc*")
-                set(CMAKE_OSX_ARCHITECTURES "ppc7400")
-            else()
-                set(CMAKE_OSX_ARCHITECTURES "i386")
-            endif()
-        else()
-            set(CMAKE_OSX_ARCHITECTURES "x86_64")
-        endif()
-    endif()
-
-    #CMAKE_OSX_SYSROOT is set at the system version we are supposed to build on
-    #we need to provide the correct one when host and target differ
-    if(NOT ${minimum_macosx_version} VERSION_EQUAL ${current_macosx_version})
-        if(minimum_macosx_version VERSION_EQUAL "10.4")
-            set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.4u.sdk/")
-            set(CMAKE_C_COMPILER "gcc-4.0")
-            set(CMAKE_CXX_COMPILER "g++-4.0")
-        else()
-            string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" sdk_version ${minimum_macosx_version})
-            set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX${sdk_version}.sdk/")
-        endif()
-    endif()
-
-    #set deployment target
-    add_flag_append(CMAKE_Pascal_FLAGS "-k-macosx_version_min -k${minimum_macosx_version} ")
-endif(APPLE)
+#general utilities
+include(${CMAKE_MODULE_PATH}/utils.cmake)
+#platform specific init code
+include(${CMAKE_MODULE_PATH}/platform.cmake)
+include(${CMAKE_MODULE_PATH}/paths.cmake)
 
 
 #when build type is not specified, assume Debug/Release according to build version information
@@ -217,34 +72,25 @@
 endif (CMAKE_BUILD_TYPE)
 
 
-#set default flags values for all projects (unless MINIMAL_CFLAGS is true)
-if(NOT ${MINIMAL_CFLAGS})
-    add_flag_append(CMAKE_C_FLAGS "-pipe")
-    add_flag_append(CMAKE_C_FLAGS_RELEASE "-w -Os -fomit-frame-pointer")
-    add_flag_append(CMAKE_C_FLAGS_DEBUG "-Wall -O0 -DDEBUG")
-    add_flag_append(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS})
-    add_flag_append(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
-    add_flag_append(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
+#perform safe check that enable/disable compilation features
+include(${CMAKE_MODULE_PATH}/compilerchecks.cmake)
+
+#set default flags values for all projects (unless MINIMAL_FLAGS is true)
+if(NOT ${MINIMAL_FLAGS})
+    set(CMAKE_C_FLAGS "-pipe ${CMAKE_C_FLAGS}")
+    set(CMAKE_C_FLAGS_RELEASE "-w -Os -fomit-frame-pointer ${CMAKE_C_FLAGS_RELEASE}")
+    set(CMAKE_C_FLAGS_DEBUG "-Wall -O0 -g ${CMAKE_C_FLAGS_DEBUG}")
+    set(CMAKE_CXX_FLAGS "-pipe ${CMAKE_CXX_FLAGS}")
+    set(CMAKE_CXX_FLAGS_RELEASE "-w -Os -fomit-frame-pointer ${CMAKE_CXX_FLAGS_RELEASE}")
+    set(CMAKE_CXX_FLAGS_DEBUG "-Wall -O0 -g ${CMAKE_CXX_FLAGS_DEBUG}")
 else()
     #CMake adds a lot of additional configuration flags, so let's clear them up
     set(CMAKE_C_FLAGS_RELEASE "")
-    set(CMAKE_C_FLAGS_DEBUG "-Wall -DDEBUG")
+    set(CMAKE_C_FLAGS_DEBUG "-Wall")
     set(CMAKE_CXX_FLAGS_RELEASE "")
-    set(CMAKE_CXX_FLAGS_DEBUG "-Wall -DDEBUG")
+    set(CMAKE_CXX_FLAGS_DEBUG "-Wall")
 endif()
 
-#TODO: find out why we need this...
-include(CheckCCompilerFlag)
-set(CMAKE_REQUIRED_FLAGS "-Wl,-z -Wl,noexecstack")
-check_c_compiler_flag("" HAVE_NOEXECSTACK) #empty because we are testing a linker flag
-if(HAVE_NOEXECSTACK)
-    add_flag_append(CMAKE_Pascal_FLAGS "-k-z -knoexecstack")
-    if(NOT ${MINIMAL_CFLAGS})
-        add_flag_append(CMAKE_C_FLAGS ${CMAKE_REQUIRED_FLAGS})
-    endif()
-endif()
-unset(CMAKE_REQUIRED_FLAGS)
-
 #parse additional parameters
 if(FPFLAGS)
     add_flag_prepend(CMAKE_Pascal_FLAGS ${FPFLAGS})
@@ -279,18 +125,30 @@
                               )
 endif()
 
+
 #lua discovery
-find_package(Lua)
-if(LUA_FOUND)
-    message(STATUS "Found LUA: ${LUA_DEFAULT}")
+if (${LUA_SYSTEM})
+    if (NOT LUA_LIBRARY OR NOT LUA_INCLUDE_DIR)
+        find_package(Lua)
+    endif()
+
+    if (LUA_LIBRARY AND LUA_INCLUDE_DIR)
+        set(LUA_FOUND TRUE)
+    else()
+        message(FATAL_ERROR "Missing Lua! Rerun cmake with -DLUA_SYSTEM=off to build the internal version")
+    endif()
 else()
-    message(STATUS "LUA will be provided by the bundled sources")
+    if (NOT LUA_LIBRARY OR NOT LUA_INCLUDE_DIR)
+        message(STATUS "LUA will be provided by the bundled sources")
+    endif()
+    set(lua_output_name "hwlua")
     add_subdirectory(misc/liblua)
+    list(APPEND pascal_flags "-XLAlua=${lua_output_name}" "-dLUA_INTERNAL")
 endif()
 
 
 #physfs discovery
-if (${SYSTEM_PHYSFS})
+if (${PHYSFS_SYSTEM})
     if (NOT PHYSFS_LIBRARY OR NOT PHYSFS_INCLUDE_DIR)
         find_package(PhysFS)
     endif()
@@ -315,8 +173,10 @@
         message(FATAL_ERROR "Missing PhysFS! Rerun cmake with -DPHYSFS_SYSTEM=off to build the internal version")
     endif()
 else()
-    message(STATUS "PhysFS will be provided by the bundled sources")
-    set(physfs_output_name "hw_physfs")
+    if (NOT PHYSFS_LIBRARY OR NOT PHYSFS_INCLUDE_DIR)
+        message(STATUS "PhysFS will be provided by the bundled sources")
+    endif()
+    set(physfs_output_name "hwphysfs")
     add_subdirectory(misc/libphysfs)
 endif()
 
@@ -348,5 +208,5 @@
 endif()
 
 
-include(${CMAKE_MODULE_PATH}/CPackConfig.cmake)
+include(${CMAKE_MODULE_PATH}/cpackvars.cmake)
 
--- a/CREDITS	Tue Apr 30 01:47:30 2013 +0200
+++ b/CREDITS	Thu Jun 13 22:27:23 2013 +0200
@@ -6,6 +6,13 @@
 - see Fonts_LICENSE.txt
 
 ==========
+= FORTS
+==========
+- Carlos Vives -> Tank (2010)
+- Dragonfly -> EvilChicken (2010)
+- Randy Broda -> SteelTower (2013)
+
+==========
 = HATS
 ==========
 - Robinator -> Terminator (2010)
@@ -66,4 +73,4 @@
      http://www.freesound.org/people/Jovica/sounds/38317/
 
 
-ALL OTHER CONTENT IS PROPERTY OF Andrey Korotaev <unC0Rr@gmail.com> UNLESS OTHERWISE SPECIFIED
\ No newline at end of file
+ALL OTHER CONTENT IS PROPERTY OF Andrey Korotaev <unC0Rr@gmail.com> UNLESS OTHERWISE SPECIFIED
--- a/ChangeLog.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/ChangeLog.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -1,10 +1,48 @@
 + features
 * bugfixes
 
+0.9.19 -> ???:
+ * increase precision in damage calcs; extra damage affects fire properly now
+
+0.9.18 -> 0.9.19:
+ + New Freezer weapon - freezes terrain, water, hedgehogs, mines, cases, explosives
+ + Saucer can aim weapons and fire underwater
+ + Main graphical user interface overhaul
+ + Splashscreen on Windows *_*
+ + Up and down keys navigate in chat history
+ + Several commands from chat available
+ + Support hwplay:// scheme syntax
+ + Supply full revision and hash information in version tag
+ + Better set of options for driving engine
+ + Downloadable content can now be stored in packages for easy uninstall
+ + Lua scripts can load a sidecar overlay package of game resources
+ + Math improvements for better performance/reliability
+ + Smarter AI - now uses drill rocket accurately and is aware of barrels and dud mines.  More aggressive in infinite attack, lua can tell to target specific hogs, such as in Mutant
+ + New fort, Steel Tower
+ + New theme, Fruit
+ + New hats - some national ones, Portal, harlequin, more animals...
+ + New maps based on StarBound. SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacles
+ + Translation updates - Turkish, French, German, Japanese, Portuguese, Italian, Russian - Campaign french should work correctly now
+ + Theme object masks
+ + Easier weapon selection in shoppa. F1 will select from F5 if there are no weps in F1-F4
+ + Cleaver radius shrunk to improve usability on horizontal throws
+ + Map hog limit is now just a suggestion, not enforced
+ + Static map theme is now just the default, can be changed
+ + Themeable static maps (provide a mask.png without a map.png)
+ + Split seed with '|' to keep the land shape but change the hog placement
+ * You can now move out of the way when throwing a sticky mine or cleaver straight up
+ * Rope sliding should behave more like pre-0.9.18 again
+ * Forbid kicking on 1v1 matches
+ * Desync fixes
+ * Fixed fort mode
+ * Making very large maps now works properly with targeted weapons
+ * ParseCommand should be safe to use in Lua now, at any time
+ * Fixes to many weapons. Mudball, blowtorch, explosives, cluster bomb spread, portal.
+
 0.9.17 -> 0.9.18:
 
  + 'A Classic Fairytale' Campaign
- + Video recorder (requires ffmpeg)
+ + Video recorder (requires ffmpeg/libav)
  + Cleaver weapon
  + AI is now aware of drowning and fall damage
  + AI learned how to use Sniper Rifle and Cake
@@ -24,6 +62,7 @@
  + Reduce amount of memory needed for engine to store land data
  + Countless other small fixes and improvements
  + Detect desyncs early
+ + Mudball will not cause any direct damage anymore
  * Fix cake getting stuck in barrels, crates and hedgehogs
  * Fix all knowns bugs which caused network game hang when players close engine or quit
  * Fix drill strike bug when drill's timer gets ridiculously high value instead of explosion
--- a/QTfrontend/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -189,10 +189,6 @@
     ${hwfr_rez_src}
     )
 
-if((UNIX AND NOT APPLE) AND ${BUILD_ENGINE_LIBRARY})
-    set_target_properties(hedgewars PROPERTIES LINK_FLAGS "-Wl,-rpath,${CMAKE_INSTALL_PREFIX}/${target_library_install_dir}")
-endif()
-
 list(APPEND HW_LINK_LIBS
     ${PHYSFS_LIBRARY}
     ${PHYSLAYER_LIBRARY}
--- a/QTfrontend/HWApplication.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/HWApplication.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -18,15 +18,16 @@
 
 #include "HWApplication.h"
 #include <QFileOpenEvent>
+#include <QEvent>
 
 #include "hwform.h"
 #include "MessageDialog.h"
 
-#if !defined(Q_WS_WIN)
+#if !defined(Q_OS_WIN)
 #include "signal.h"
 #endif
 
-#if !defined(Q_WS_WIN)
+#if !defined(Q_OS_WIN)
 void terminateFrontend(int signal)
 {
     Q_UNUSED(signal);
@@ -34,10 +35,10 @@
 }
 #endif
 
-HWApplication::HWApplication(int &argc,  char **argv):
+HWApplication::HWApplication(int &argc, char **argv) :
     QApplication(argc, argv)
 {
-#if !defined(Q_WS_WIN)
+#if !defined(Q_OS_WIN)
     signal(SIGINT, &terminateFrontend);
 #endif
 #if 0
@@ -83,6 +84,8 @@
             return true;
         } else if (scheme == "hwplay") {
             int port = openEvent->url().port(NETGAME_DEFAULT_PORT);
+            if (address == "")
+                address = NETGAME_DEFAULT_SERVER;
             form->NetConnectQuick(address, (quint16) port);
             return true;
         } else {
--- a/QTfrontend/HWApplication.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/HWApplication.h	Thu Jun 13 22:27:23 2013 +0200
@@ -20,10 +20,9 @@
 #define HWAPP_H
 
 #include <QApplication>
-#include <QString>
-#include <QEvent>
 
 class HWForm;
+class QEvent;
 
 /**
  * @brief Main class of the Qt application.
--- a/QTfrontend/KB.h	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef KB_H
-#define KB_H
-
-#include <QString>
-
-const ulong KBmsgsCount = 1;
-
-const QString KBMessages[KBmsgsCount] =
-{
-    QT_TRANSLATE_NOOP("KB", "SDL_ttf returned error while rendering text, "
-    "most propably it is related to the bug "
-    "in freetype2. It's recommended to update your "
-    "freetype lib.")
-};
-
-#endif // KB_H
--- a/QTfrontend/achievements.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/achievements.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/achievements.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/achievements.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/binds.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/binds.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/binds.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/binds.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/campaign.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/campaign.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,43 +16,12 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  */
 
-#include <QDir>
-#include <QFile>
-#include <QTextStream>
-#include <QPushButton>
-#include <QListWidget>
-#include <QStackedLayout>
-#include <QLineEdit>
-#include <QLabel>
-#include <QRadioButton>
-#include <QSpinBox>
-#include <QCloseEvent>
-#include <QCheckBox>
-#include <QTextBrowser>
-#include <QAction>
-#include <QTimer>
-#include <QScrollBar>
-#include <QDataWidgetMapper>
-#include <QTableView>
-#include <QCryptographicHash>
-#include <QSignalMapper>
-#include <QShortcut>
-#include <QDesktopServices>
-#include <QInputDialog>
-#include <QPropertyAnimation>
+#include "campaign.h"
+
+#include "hwconsts.h"
+
 #include <QSettings>
 
-#include "campaign.h"
-#include "gameuiconfig.h"
-#include "hwconsts.h"
-#include "gamecfgwidget.h"
-#include "bgwidget.h"
-#include "mouseoverfilter.h"
-#include "tcpBase.h"
-
-#include "DataManager.h"
-
-extern QString campaign, campaignTeam;
 
 QStringList getCampMissionList(QString & campaign)
 {
@@ -81,3 +50,14 @@
     campfile.setIniCodec("UTF-8");
     return campfile.value(QString("Mission %1/Script").arg(mNum)).toString();
 }
+
+QString getCampaignImage(QString campaign, unsigned int mNum)
+{
+    return getCampaignScript(campaign,mNum).replace(QString(".lua"),QString(".png"));
+}
+
+QString getCampaignMissionName(QString campaign, unsigned int mNum)
+{
+    return getCampaignScript(campaign,mNum).replace(QString(".lua"),QString(""));
+}
+
--- a/QTfrontend/campaign.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/campaign.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,24 +19,13 @@
 #ifndef CAMPAIGN_H
 #define CAMPAIGN_H
 
-#include <QMainWindow>
-#include <QStack>
-#include <QTime>
-#include <QPointer>
-#include <QPropertyAnimation>
-#include <QUrl>
-#include <QNetworkReply>
-#include <QNetworkRequest>
-#include <QNetworkAccessManager>
-
-#include "netserver.h"
-#include "game.h"
-#include "ui_hwform.h"
-#include "SDLInteraction.h"
-#include "bgwidget.h"
+#include <QString>
+#include <QStringList>
 
 QStringList getCampMissionList(QString & campaign);
 unsigned int getCampProgress(QString & teamName, QString & campName);
 QString getCampaignScript(QString campaign, unsigned int mNum);
+QString getCampaignImage(QString campaign, unsigned int mNum);
+QString getCampaignMissionName(QString campaign, unsigned int mNum);
 
 #endif
--- a/QTfrontend/drawmapscene.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/drawmapscene.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/drawmapscene.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/drawmapscene.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/game.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/game.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -38,6 +38,13 @@
 #include <QTextStream>
 #include "ThemeModel.h"
 
+// last game info
+QList<QVariant> lastGameStartArgs = QList<QVariant>();
+GameType lastGameType = gtNone;
+GameCFGWidget * lastGameCfg = NULL;
+QString lastGameAmmo = NULL;
+TeamSelWidget * lastGameTeamSel = NULL;
+
 QString training, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution?
 
 HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
@@ -48,6 +55,10 @@
     this->config = config;
     this->gamecfg = gamecfg;
     netSuspend = false;
+
+    lastGameCfg = gamecfg;
+    lastGameAmmo = ammo;
+    lastGameTeamSel = pTeamSelWidget;
 }
 
 HWGame::~HWGame()
@@ -142,7 +153,7 @@
 
     HWProto::addStringToBuffer(teamscfg, "TL");
     HWProto::addStringToBuffer(teamscfg, QString("etheme %1")
-                               .arg((themeModel->rowCount() > 0) ? themeModel->index(rand() % themeModel->rowCount()).data().toString() : "steel"));
+                               .arg((themeModel->rowCount() > 0) ? themeModel->index(rand() % themeModel->rowCount()).data(ThemeModel::ActualNameRole).toString() : "steel"));
     HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString());
 
     HWProto::addStringToBuffer(teamscfg, "e$template_filter 2");
@@ -228,6 +239,7 @@
                     SendQuickConfig();
                     break;
                 }
+                case gtNone:
                 case gtSave:
                 case gtDemo:
                     break;
@@ -306,8 +318,8 @@
             int size = msg.size();
             QString newResolution = QString().append(msg.mid(2)).left(size - 4);
             QStringList wh = newResolution.split('x');
-            config->Form->ui.pageOptions->windowWidthEdit->setText(wh[0]);
-            config->Form->ui.pageOptions->windowHeightEdit->setText(wh[1]);
+            config->Form->ui.pageOptions->windowWidthEdit->setValue(wh[0].toInt());
+            config->Form->ui.pageOptions->windowHeightEdit->setValue(wh[1].toInt());
             break;
         }
         default:
@@ -343,7 +355,7 @@
         readbuffer.remove(0, msglen + 1);
         ParseMessage(msg);
     }
-    
+
     flushNetBuffer();
 }
 
@@ -352,7 +364,7 @@
     if(m_netSendBuffer.size())
     {
         emit SendNet(m_netSendBuffer);
-        
+
         m_netSendBuffer.clear();
     }
 }
@@ -435,6 +447,9 @@
 
 void HWGame::StartLocal()
 {
+    lastGameStartArgs.clear();
+    lastGameType = gtLocal;
+
     gameType = gtLocal;
     demo.clear();
     Start(false);
@@ -443,6 +458,9 @@
 
 void HWGame::StartQuick()
 {
+    lastGameStartArgs.clear();
+    lastGameType = gtQLocal;
+
     gameType = gtQLocal;
     demo.clear();
     Start(false);
@@ -451,6 +469,10 @@
 
 void HWGame::StartTraining(const QString & file)
 {
+    lastGameStartArgs.clear();
+    lastGameStartArgs.append(file);
+    lastGameType = gtTraining;
+
     gameType = gtTraining;
     training = "Missions/Training/" + file + ".lua";
     demo.clear();
@@ -460,6 +482,12 @@
 
 void HWGame::StartCampaign(const QString & camp, const QString & campScript, const QString & campTeam)
 {
+    lastGameStartArgs.clear();
+    lastGameStartArgs.append(camp);
+    lastGameStartArgs.append(campScript);
+    lastGameStartArgs.append(campTeam);
+    lastGameType = gtCampaign;
+
     gameType = gtCampaign;
     campaign = camp;
     campaignScript = "Missions/Campaign/" + camp + "/" + campScript;
--- a/QTfrontend/game.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/game.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -29,6 +29,18 @@
 class GameCFGWidget;
 class TeamSelWidget;
 
+enum GameType
+{
+    gtNone     = 0,
+    gtLocal    = 1,
+    gtQLocal   = 2,
+    gtDemo     = 3,
+    gtNet      = 4,
+    gtTraining = 5,
+    gtCampaign = 6,
+    gtSave     = 7,
+};
+
 enum GameState
 {
     gsNotStarted = 0,
@@ -49,6 +61,13 @@
 
 bool checkForDir(const QString & dir);
 
+// last game info
+extern QList<QVariant> lastGameStartArgs;
+extern GameType lastGameType;
+extern GameCFGWidget * lastGameCfg;
+extern QString lastGameAmmo;
+extern TeamSelWidget * lastGameTeamSel;
+
 class HWGame : public TCPBase
 {
         Q_OBJECT
@@ -86,16 +105,6 @@
         void FromNetChat(const QString & msg);
 
     private:
-        enum GameType
-        {
-            gtLocal    = 1,
-            gtQLocal   = 2,
-            gtDemo     = 3,
-            gtNet      = 4,
-            gtTraining = 5,
-            gtCampaign = 6,
-            gtSave     = 7,
-        };
         char msgbuf[MAXMSGCHARS];
         QString ammostr;
         GameUIConfig * config;
--- a/QTfrontend/gameuiconfig.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/gameuiconfig.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@
 #include <QNetworkProxy>
 #include <QNetworkProxyFactory>
 #include <utility>
+#include <QVariant>
 
 #include "gameuiconfig.h"
 #include "hwform.h"
@@ -94,8 +95,8 @@
     // If left blank reset the resolution to the default
     wWidth = (wWidth == "" ? widthStr : wWidth);
     wHeight = (wHeight == "" ? heightStr : wHeight);
-    Form->ui.pageOptions->windowWidthEdit->setText(wWidth);
-    Form->ui.pageOptions->windowHeightEdit->setText(wHeight);
+    Form->ui.pageOptions->windowWidthEdit->setValue(wWidth.toInt());
+    Form->ui.pageOptions->windowHeightEdit->setValue(wHeight.toInt());
 
     Form->ui.pageOptions->CBResolution->setCurrentIndex((t < 0) ? 1 : t);
     Form->ui.pageOptions->CBFullscreen->setChecked(value("video/fullscreen", false).toBool());
@@ -111,7 +112,7 @@
     Form->ui.pageOptions->CBFrontendMusic->setChecked(value("frontend/music", true).toBool());
     Form->ui.pageOptions->SLVolume->setValue(value("audio/volume", 100).toUInt());
 
-    QString netNick = value("net/nick", "").toString();
+    QString netNick = value("net/nick", tr("Guest")+QString("%1").arg(rand())).toString();
     Form->ui.pageOptions->editNetNick->setText(netNick);
     bool savePwd = value("net/savepassword",true).toBool();
     Form->ui.pageOptions->CBSavePassword->setChecked(savePwd);
@@ -156,7 +157,7 @@
     { // load colors
         QStandardItemModel * model = DataManager::instance().colorsModel();
         for(int i = model->rowCount() - 1; i >= 0; --i)
-            model->item(i)->setData(value(QString("colors/color%1").arg(i), model->item(i)->data()));
+            model->item(i)->setData(QColor(value(QString("colors/color%1").arg(i), model->item(i)->data()).toString()));
     }
 
     { // load binds
@@ -217,12 +218,12 @@
 void GameUIConfig::resizeToConfigValues()
 {
     // fill 2/3 of the screen desktop
-    const QRect deskSize = QApplication::desktop()->screenGeometry(-1);
+    const QRect deskSize = HWApplication::desktop()->screenGeometry(-1);
     Form->resize(value("frontend/width", qMin(qMax(deskSize.width()*2/3,800),deskSize.width())).toUInt(),
                  value("frontend/height", qMin(qMax(deskSize.height()*2/3,600),deskSize.height())).toUInt());
 
     // move the window to the center of the screen
-    QPoint center = QApplication::desktop()->availableGeometry(-1).center();
+    QPoint center = HWApplication::desktop()->availableGeometry(-1).center();
     center.setX(center.x() - (Form->width()/2));
     center.setY(center.y() - (Form->height()/2));
     Form->move(center);
@@ -319,7 +320,7 @@
     { // save colors
         QStandardItemModel * model = DataManager::instance().colorsModel();
         for(int i = model->rowCount() - 1; i >= 0; --i)
-            setValue(QString("colors/color%1").arg(i), model->item(i)->data());
+            setValue(QString("colors/color%1").arg(i), model->item(i)->data().value<QColor>().name());
     }
 
     sync();
@@ -520,14 +521,28 @@
     setValue("net/passwordhash", QString());
     setValue("net/passwordlength", 0);
     setValue("net/savepassword", false); //changes the savepassword value to false in order to not let the user save an empty password in PAGE_SETUP
-    reloadValues(); //reloads the values of PAGE_SETUP
+    Form->ui.pageOptions->editNetPassword->setEnabled(false);
+    Form->ui.pageOptions->editNetPassword->setText("");
 }
 
 void GameUIConfig::setPasswordHash(const QString & passwordhash)
 {
     setValue("net/passwordhash", passwordhash);
-    setValue("net/passwordlength", passwordhash.size()/4);
-    setNetPasswordLength(passwordhash.size()/4);  //the hash.size() is divided by 4 let PAGE_SETUP use a reasonable number of stars to display the PW
+    if (passwordhash!=NULL && passwordhash.size() > 0)
+    {
+    // WTF - the whole point of "password length" was to have the dots match what they typed.  This is totally pointless, and all hashes are the same length for a given hash so might as well hardcode it.
+    // setValue("net/passwordlength", passwordhash.size()/4);
+        setValue("net/passwordlength", 8);
+
+    // More WTF
+    //setNetPasswordLength(passwordhash.size()/4);  //the hash.size() is divided by 4 let PAGE_SETUP use a reasonable number of stars to display the PW
+        setNetPasswordLength(8);
+    }
+    else
+    {
+        setValue("net/passwordlength", 0);
+        setNetPasswordLength(0);
+    }
 }
 
 QString GameUIConfig::passwordHash()
--- a/QTfrontend/gameuiconfig.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/gameuiconfig.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/hedgewars.qrc	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/hedgewars.qrc	Thu Jun 13 22:27:23 2013 +0200
@@ -28,6 +28,16 @@
         <file>res/botlevels/net3.png</file>
         <file>res/botlevels/net4.png</file>
         <file>res/botlevels/net5.png</file>
+        <file>res/campaign/A Classic Fairytale/first_blood.png</file>
+        <file>res/campaign/A Classic Fairytale/shadow.png</file>
+        <file>res/campaign/A Classic Fairytale/journey.png</file>
+        <file>res/campaign/A Classic Fairytale/united.png</file>
+        <file>res/campaign/A Classic Fairytale/backstab.png</file>
+        <file>res/campaign/A Classic Fairytale/dragon.png</file>
+        <file>res/campaign/A Classic Fairytale/family.png</file>
+        <file>res/campaign/A Classic Fairytale/queen.png</file>
+        <file>res/campaign/A Classic Fairytale/enemy.png</file>
+        <file>res/campaign/A Classic Fairytale/epil.png</file>
         <file>res/bonus.png</file>
         <file>res/Hedgehog.png</file>
         <file>res/net.png</file>
@@ -133,6 +143,7 @@
         <file>res/StatsMostSelfDamage.png</file>
         <file>res/StatsSelfKilled.png</file>
         <file>res/StatsSkipped.png</file>
+        <file>res/StatsCustomAchievement.png</file>
         <file>res/Start.png</file>
         <file>res/mapRandom.png</file>
         <file>res/mapMaze.png</file>
--- a/QTfrontend/hwconsts.cpp.in	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/hwconsts.cpp.in	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/hwconsts.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/hwconsts.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -67,6 +67,7 @@
 #define SEASON_HWBDAY 4
 #define SEASON_EASTER 8
 
+#define NETGAME_DEFAULT_SERVER "netserver.hedgewars.org"
 #define NETGAME_DEFAULT_PORT 46631
 #define HEDGEHOGS_PER_TEAM 8
 
--- a/QTfrontend/hwform.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/hwform.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -45,6 +45,7 @@
 #include <QInputDialog>
 #include <QPropertyAnimation>
 #include <QSettings>
+#include <QSortFilterProxyModel>
 
 #if (QT_VERSION >= 0x040600)
 #include <QGraphicsEffect>
@@ -101,7 +102,7 @@
 #include "DataManager.h"
 #include "AutoUpdater.h"
 
-#ifdef Q_WS_WIN
+#ifdef Q_OS_WIN
 #define WINVER 0x0500
 #include <windows.h>
 #else
@@ -109,7 +110,7 @@
 #include <sys/types.h>
 #endif
 
-#ifdef Q_WS_MAC
+#ifdef Q_OS_MAC
 #include <sys/sysctl.h>
 #endif
 
@@ -150,9 +151,9 @@
 
     ui.pageOptions->CBResolution->addItems(SDLInteraction::instance().getResolutions());
 
-    config = new GameUIConfig(this, "physfs://hedgewars.ini");
+    config = new GameUIConfig(this, DataManager::instance().settingsFileName());
     frontendEffects = config->value("frontend/effects", true).toBool();
-    playerHash = QString(QCryptographicHash::hash(config->value("net/nick","").toString().toUtf8(), QCryptographicHash::Md5).toHex());
+    playerHash = QString(QCryptographicHash::hash(config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString().toUtf8(), QCryptographicHash::Md5).toHex());
 
     ui.pageRoomsList->setSettings(config);
     ui.pageNetGame->setSettings(config);
@@ -193,6 +194,8 @@
     //connect (updateData, SIGNAL(activated()), &DataManager::instance(), SLOT(reload()));
 #endif
 
+    previousCampaignName = "";
+    previousTeamName = "";
     UpdateTeamsLists();
     InitCampaignPage();
     UpdateCampaignPage(0);
@@ -285,6 +288,7 @@
     connect(ui.pageInfo->BtnSnapshots, SIGNAL(clicked()), this, SLOT(OpenSnapshotFolder()));
 
     connect(ui.pageGameStats, SIGNAL(saveDemoRequested()), this, SLOT(saveDemoWithCustomName()));
+    connect(ui.pageGameStats, SIGNAL(restartGameRequested()), this, SLOT(restartGame()));
 
     connect(ui.pageSinglePlayer->BtnSimpleGamePage, SIGNAL(clicked()), this, SLOT(SimpleGame()));
     connect(ui.pageSinglePlayer->BtnTrainPage, SIGNAL(clicked()), pageSwitchMapper, SLOT(map()));
@@ -304,7 +308,7 @@
     connect(ui.pageCampaign->BtnStartCampaign, SIGNAL(clicked()), this, SLOT(StartCampaign()));
     connect(ui.pageCampaign->CBTeam, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int)));
     connect(ui.pageCampaign->CBCampaign, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int)));
-
+    connect(ui.pageCampaign->CBMission, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPageMission(int)));
 
     connect(ui.pageSelectWeapon->BtnDelete, SIGNAL(clicked()),
             ui.pageSelectWeapon->pWeapons, SLOT(deleteWeaponsName())); // executed first
@@ -317,8 +321,6 @@
     connect(ui.pageMain->BtnNetLocal, SIGNAL(clicked()), this, SLOT(GoToNet()));
     connect(ui.pageMain->BtnNetOfficial, SIGNAL(clicked()), this, SLOT(NetConnectOfficialServer()));
 
-    connect(ui.pageConnecting, SIGNAL(cancelConnection()), this, SLOT(GoBack()));
-
     connect(ui.pageVideos, SIGNAL(goBack()), config, SLOT(SaveVideosOptions()));
 
     ammoSchemeModel = new AmmoSchemeModel(this, cfgdir->absolutePath() + "/schemes.ini");
@@ -361,7 +363,7 @@
 {
     if(hwnet && (hwnet->clientState() != HWNewNet::Disconnected))
     {
-        xfire_setvalue(XFIRE_SERVER, !hwnet->getHost().compare(QString("netserver.hedgewars.org:%1").arg(NETGAME_DEFAULT_PORT)) ? "Official server" : hwnet->getHost().toAscii());
+        xfire_setvalue(XFIRE_SERVER, !hwnet->getHost().compare(QString("%1:%2").arg(NETGAME_DEFAULT_SERVER).arg(NETGAME_DEFAULT_PORT)) ? "Official server" : hwnet->getHost().toAscii());
         switch(hwnet->clientState())
         {
             case HWNewNet::Connecting: // Connecting
@@ -470,7 +472,7 @@
 
     if(teamslist.empty())
     {
-        QString currentNickName = config->value("net/nick","").toString().toUtf8();
+        QString currentNickName = config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString().toUtf8();
         QString teamName;
 
         if (currentNickName.isEmpty())
@@ -596,6 +598,10 @@
 #endif
 
     qDebug("Leaving %s, entering %s", qPrintable(stringifyPageId(lastid)), qPrintable(stringifyPageId(id)));
+    if (lastid == ID_PAGE_MAIN)
+    {
+        ui.pageMain->resetNetworkChoice();
+    }
 
     // pageEnter and pageLeave events
     ((AbstractPage*)ui.Pages->widget(lastid))->triggerPageLeave();
@@ -673,6 +679,21 @@
         }
     }
 
+    if (id == ID_PAGE_GAMESTATS)
+    {
+        switch(lastGameType) {
+        case gtLocal:
+        case gtQLocal:
+        case gtTraining:
+        case gtCampaign:
+            ui.pageGameStats->restartBtnVisible(true);
+            break;
+        default:
+            ui.pageGameStats->restartBtnVisible(false);
+            break;
+        }
+    }
+
     if (id == ID_PAGE_MAIN)
     {
         ui.pageOptions->setTeamOptionsEnabled(true);
@@ -1014,7 +1035,7 @@
 
 void HWForm::NetConnectOfficialServer()
 {
-    NetConnectServer("netserver.hedgewars.org", NETGAME_DEFAULT_PORT);
+    NetConnectServer(NETGAME_DEFAULT_SERVER, NETGAME_DEFAULT_PORT);
 }
 
 void HWForm::NetPassword(const QString & nick)
@@ -1246,20 +1267,20 @@
 
 // room status stuff
     connect(hwnet, SIGNAL(roomMaster(bool)),
-            this, SLOT(NetGameChangeStatus(bool)), Qt::QueuedConnection);
+            this, SLOT(NetGameChangeStatus(bool)));
 
 // net page stuff
     connect(hwnet, SIGNAL(roomNameUpdated(const QString &)),
             ui.pageNetGame, SLOT(setRoomName(const QString &)), Qt::QueuedConnection);
-    connect(hwnet, SIGNAL(chatStringFromNet(const QString&)),
-            ui.pageNetGame->chatWidget, SLOT(onChatString(const QString&)), Qt::QueuedConnection);
+    connect(hwnet, SIGNAL(roomChatAction(const QString&, const QString&)),
+            ui.pageNetGame->chatWidget, SLOT(onChatAction(const QString&, const QString&)), Qt::QueuedConnection);
+    connect(hwnet, SIGNAL(roomChatMessage(const QString&, const QString&)),
+            ui.pageNetGame->chatWidget, SLOT(onChatMessage(const QString&, const QString&)), Qt::QueuedConnection);
 
-    connect(hwnet, SIGNAL(chatStringFromMe(const QString&)),
-            ui.pageNetGame->chatWidget, SLOT(onChatString(const QString&)), Qt::QueuedConnection);
     connect(hwnet, SIGNAL(roomMaster(bool)),
             ui.pageNetGame->chatWidget, SLOT(adminAccess(bool)), Qt::QueuedConnection);
     connect(ui.pageNetGame->chatWidget, SIGNAL(chatLine(const QString&)),
-            hwnet, SLOT(chatLineToNet(const QString&)));
+            hwnet, SLOT(chatLineToNetWithEcho(const QString&)));
     connect(ui.pageNetGame->BtnGo, SIGNAL(clicked()), hwnet, SLOT(ToggleReady()));
     connect(hwnet, SIGNAL(setMyReadyStatus(bool)),
             ui.pageNetGame, SLOT(setReadyStatus(bool)), Qt::QueuedConnection);
@@ -1286,25 +1307,38 @@
     connect(ui.pageRoomsList->chatWidget, SIGNAL(consoleCommand(const QString&)),
             hwnet, SLOT(consoleCommand(const QString&)));
 
+// player info
+    connect(hwnet, SIGNAL(playerInfo(const QString&, const QString&, const QString&, const QString&)),
+            ui.pageRoomsList->chatWidget, SLOT(onPlayerInfo(const QString&, const QString&, const QString&, const QString&)), Qt::QueuedConnection);
+    connect(hwnet, SIGNAL(playerInfo(const QString&, const QString&, const QString&, const QString&)),
+            ui.pageNetGame->chatWidget, SLOT(onPlayerInfo(const QString&, const QString&, const QString&, const QString&)), Qt::QueuedConnection);
+
 // chatting
     connect(ui.pageRoomsList->chatWidget, SIGNAL(chatLine(const QString&)),
             hwnet, SLOT(chatLineToLobby(const QString&)));
-    connect(hwnet, SIGNAL(chatStringLobby(const QString&)),
-            ui.pageRoomsList->chatWidget, SLOT(onChatString(const QString&)), Qt::QueuedConnection);
-    connect(hwnet, SIGNAL(chatStringLobby(const QString&, const QString&)),
-            ui.pageRoomsList->chatWidget, SLOT(onChatString(const QString&, const QString&)), Qt::QueuedConnection);
-    connect(hwnet, SIGNAL(chatStringFromMeLobby(const QString&)),
-            ui.pageRoomsList->chatWidget, SLOT(onChatString(const QString&)), Qt::QueuedConnection);
+    connect(hwnet, SIGNAL(lobbyChatAction(const QString&,const QString&)),
+            ui.pageRoomsList->chatWidget, SLOT(onChatAction(const QString&,const QString&)), Qt::QueuedConnection);
+    connect(hwnet, SIGNAL(lobbyChatMessage(const QString&, const QString&)),
+            ui.pageRoomsList->chatWidget, SLOT(onChatMessage(const QString&, const QString&)), Qt::QueuedConnection);
 
 // nick list stuff
-    connect(hwnet, SIGNAL(nickAdded(const QString&, bool)),
-            ui.pageNetGame->chatWidget, SLOT(nickAdded(const QString&, bool)), Qt::QueuedConnection);
-    connect(hwnet, SIGNAL(nickRemoved(const QString&)),
-            ui.pageNetGame->chatWidget, SLOT(nickRemoved(const QString&)), Qt::QueuedConnection);
-    connect(hwnet, SIGNAL(nickAddedLobby(const QString&, bool)),
-            ui.pageRoomsList->chatWidget, SLOT(nickAdded(const QString&, bool)), Qt::QueuedConnection);
-    connect(hwnet, SIGNAL(nickRemovedLobby(const QString&)),
-            ui.pageRoomsList->chatWidget, SLOT(nickRemoved(const QString&)), Qt::QueuedConnection);
+    {
+        QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(hwnet->lobbyPlayersModel());
+        if(playersSortFilterModel)
+        {
+            PlayersListModel * players = qobject_cast<PlayersListModel *>(playersSortFilterModel->sourceModel());
+            connect(players, SIGNAL(nickAdded(const QString&, bool)),
+                    ui.pageNetGame->chatWidget, SLOT(nickAdded(const QString&, bool)));
+            connect(players, SIGNAL(nickRemoved(const QString&)),
+                    ui.pageNetGame->chatWidget, SLOT(nickRemoved(const QString&)));
+            connect(players, SIGNAL(nickAddedLobby(const QString&, bool)),
+                    ui.pageRoomsList->chatWidget, SLOT(nickAdded(const QString&, bool)));
+            connect(players, SIGNAL(nickRemovedLobby(const QString&)),
+                    ui.pageRoomsList->chatWidget, SLOT(nickRemoved(const QString&)));
+            connect(players, SIGNAL(nickRemovedLobby(const QString&, const QString&)),
+                    ui.pageRoomsList->chatWidget, SLOT(nickRemoved(const QString&, const QString&)));
+        }
+    }
 
 // teams selecting stuff
     connect(ui.pageNetGame->pNetTeamsWidget, SIGNAL(hhogsNumChanged(const HWTeam&)),
@@ -1342,14 +1376,15 @@
     connect(ui.pageNetGame->pGameCFG, SIGNAL(paramChanged(const QString &, const QStringList &)), hwnet, SLOT(onParamChanged(const QString &, const QStringList &)));
     connect(hwnet, SIGNAL(configAsked()), ui.pageNetGame->pGameCFG, SLOT(fullNetConfig()));
 
-    //nick and pass stuff
-    QString nickname = config->value("net/nick", "").toString();
+    // using proxy slot to prevent loss of game messages when they're sent to not yet connected slot of game object
+    connect(hwnet, SIGNAL(FromNet(const QByteArray &)), this, SLOT(FromNetProxySlot(const QByteArray &)), Qt::QueuedConnection);
 
-    hwnet->m_private_game = !(hostName == "netserver.hedgewars.org" && port == NETGAME_DEFAULT_PORT);
-    if (hwnet->m_private_game == false)
-        if (AskForNickAndPwd() != 0)
-            return;
+    //nick and pass stuff
+    hwnet->m_private_game = !(hostName == NETGAME_DEFAULT_SERVER && port == NETGAME_DEFAULT_PORT);
+    if (hwnet->m_private_game == false && AskForNickAndPwd() != 0)
+        return;
 
+    QString nickname = config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString();
     ui.pageRoomsList->setUser(nickname);
     ui.pageNetGame->setUser(nickname);
 
@@ -1362,16 +1397,18 @@
     config->clearTempHash();
 
     //initialize
-    QString hash = config->passwordHash();
-    QString temphash = config->tempHash();
-    QString nickname = config->value("net/nick", "").toString();
+    QString hash;
+    QString temphash;
+    QString nickname;
     QString password;
 
-    //if something from login is missing, start dialog loop
-    if (nickname.isEmpty() || hash.isEmpty())
-    {
-        while (nickname.isEmpty() || (hash.isEmpty() && temphash.isEmpty())) //while a nickname, or both hashes are missing
-        {
+    do {
+        nickname = config->value("net/nick",tr("Guest")+QString("%1").arg(rand())).toString();
+        hash = config->passwordHash();
+        temphash = config->tempHash();
+
+        //if something from login is missing, start dialog loop
+        if (nickname.isEmpty() || hash.isEmpty()) {
             //open dialog
             HWPasswordDialog * pwDialog = new HWPasswordDialog(this);
             // make the "new account" button dialog open a browser with the registration page
@@ -1388,62 +1425,54 @@
             if (pwDialog->exec() != QDialog::Accepted) {
                 delete pwDialog;
                 GoBack();
-                return -1;
+                break;
             }
 
             //set nick and pass from the dialog
             nickname = pwDialog->leNickname->text();
             password = pwDialog->lePassword->text();
+            bool save = pwDialog->cbSave->isChecked();
+            //clean up
+            delete pwDialog;
 
             //check the nickname variable
             if (nickname.isEmpty()) {
                 int retry = RetryDialog(tr("Hedgewars - Empty nickname"), tr("No nickname supplied."));
                 GoBack();
-                delete pwDialog;
                 if (retry) {
                     if (hwnet->m_private_game) {
                         QStringList list = hwnet->getHost().split(":");
                         NetConnectServer(list.at(0), list.at(1).toShort());
                     } else
                         NetConnectOfficialServer();
-                    }
-                return -1;
+                }
+                break; //loop restart
+            } else {
+                //update nickname if it's fine
+                config->setValue("net/nick", nickname);
+                config->updNetNick();
             }
 
-            if (!password.isEmpty()) {
+            //check the password variable
+            if (password.isEmpty()) {
+                config->clearPasswordHash();
+                break;
+            }  else {
                 //calculate temphash and set it into config
                 temphash = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5).toHex();
                 config->setTempHash(temphash);
 
                 //if user wants to save password
-                bool save = pwDialog->cbSave->isChecked();
                 config->setValue("net/savepassword", save);
-                if (save) // user wants to save password
-                {
+                if (save) {
+                    // user wants to save password
                     ui.pageOptions->CBSavePassword->setChecked(true);
                     config->setPasswordHash(temphash);
                 }
             }
-            else {
-                delete pwDialog;
-                config->setValue("net/nick", nickname);
-                config->updNetNick();
-                config->clearPasswordHash();
-                break;
-            }
-
-            delete pwDialog;
+        }
+    } while (nickname.isEmpty() || (hash.isEmpty() && temphash.isEmpty())); //while a nickname, or both hashes are missing
 
-            //update nickname
-            config->setValue("net/nick", nickname);
-            config->updNetNick();
-
-            //and all the variables
-            hash = config->passwordHash();
-            temphash = config->tempHash();
-            nickname = config->value("net/nick", "").toString();
-        }
-    }
     return 0;
 }
 
@@ -1516,7 +1545,7 @@
         if (retry) {
             if (hwnet->m_private_game) {
                 QStringList list = hwnet->getHost().split(":");
-                NetConnectServer(list.at(0), list.at(1).toShort());
+                NetConnectServer(list.at(0), list.at(1).toUInt());
             } else
                 NetConnectOfficialServer();
         }
@@ -1702,6 +1731,11 @@
 
 void HWForm::CreateNetGame()
 {
+    // go back in pages to prevent user from being stuck on certain pages
+    if(ui.Pages->currentIndex() == ID_PAGE_GAMESTATS ||
+       ui.Pages->currentIndex() == ID_PAGE_INGAME)
+        GoBack();
+
     QString ammo;
     ammo = ui.pageNetGame->pGameCFG->WeaponsName->itemData(
                ui.pageNetGame->pGameCFG->WeaponsName->currentIndex()
@@ -1712,7 +1746,6 @@
     connect(game, SIGNAL(SendNet(const QByteArray &)), hwnet, SLOT(SendNet(const QByteArray &)));
     connect(game, SIGNAL(SendChat(const QString &)), hwnet, SLOT(chatLineToNet(const QString &)));
     connect(game, SIGNAL(SendTeamMessage(const QString &)), hwnet, SLOT(SendTeamMessage(const QString &)));
-    connect(hwnet, SIGNAL(FromNet(const QByteArray &)), game, SLOT(FromNet(const QByteArray &)), Qt::QueuedConnection);
     connect(hwnet, SIGNAL(chatStringFromNet(const QString &)), game, SLOT(FromNetChat(const QString &)), Qt::QueuedConnection);
 
     game->StartNet();
@@ -1740,9 +1773,6 @@
 
 void HWForm::NetGameChangeStatus(bool isMaster)
 {
-    ui.pageNetGame->pGameCFG->setMaster(isMaster);
-    ui.pageNetGame->pNetTeamsWidget->setInteractivity(isMaster);
-
     if (isMaster)
         NetGameMaster();
     else
@@ -1794,6 +1824,7 @@
     {
         NetAmmoSchemeModel * netAmmo = new NetAmmoSchemeModel(hwnet);
         connect(hwnet, SIGNAL(netSchemeConfig(QStringList &)), netAmmo, SLOT(setNetSchemeConfig(QStringList &)));
+
         ui.pageNetGame->pGameCFG->GameSchemes->setModel(netAmmo);
 
         ui.pageNetGame->setRoomName(hwnet->getRoom());
@@ -1806,6 +1837,13 @@
     ui.pageNetGame->setMasterMode(false);
 }
 
+void HWForm::FromNetProxySlot(const QByteArray & msg)
+{
+    if(game)
+        game->FromNet(msg);
+
+}
+
 void HWForm::selectFirstNetScheme()
 {
     ui.pageNetGame->pGameCFG->GameSchemes->setCurrentIndex(0);
@@ -1866,10 +1904,72 @@
     unsigned int n = missionEntries.count();
     unsigned int m = getCampProgress(tName, campaignName);
 
+    // if the campaign name changes update the campaignMissionDescriptions list
+    // this will be used later in UpdateCampaignPageMission() to update
+    // the mission description in the campaign page
+    bool updateMissionList = false;
+    QSettings * m_info;
+    if(previousCampaignName.compare(campaignName)!=0 ||
+            previousTeamName.compare(tName) != 0)
+    {
+        if (previousTeamName.compare(tName) != 0 &&
+                previousTeamName.compare("") != 0)
+            index = qMin(m + 1, n);
+        previousCampaignName = campaignName;
+        previousTeamName = tName;
+        updateMissionList = true;
+        // the following code was based on pagetraining.cpp
+        DataManager & dataMgr = DataManager::instance();
+        // get locale
+        QSettings settings(dataMgr.settingsFileName(),
+                           QSettings::IniFormat);
+        QString loc = settings.value("misc/locale", "").toString();
+        if (loc.isEmpty())
+            loc = QLocale::system().name();
+        QString campaignDescFile = QString("physfs://Locale/campaigns_" + loc + ".txt");
+        // if file is non-existant try with language only
+        if (!QFile::exists(campaignDescFile))
+            campaignDescFile = QString("physfs://Locale/campaigns_" + loc.remove(QRegExp("_.*$")) + ".txt");
+
+        // fallback if file for current locale is non-existant
+        if (!QFile::exists(campaignDescFile))
+            campaignDescFile = QString("physfs://Locale/campaigns_en.txt");
+
+        m_info = new QSettings(campaignDescFile, QSettings::IniFormat, this);
+        m_info->setIniCodec("UTF-8");
+        campaignMissionDescriptions.clear();
+        ui.pageCampaign->CBMission->clear();
+    }
+
     for (unsigned int i = qMin(m + 1, n); i > 0; i--)
     {
+        if(updateMissionList)
+        {
+            campaignMissionDescriptions += m_info->value(campaignName+"-"+ getCampaignMissionName(campaignName,i) + ".desc",
+                                            tr("No description available")).toString();
+        }
         ui.pageCampaign->CBMission->addItem(QString("Mission %1: ").arg(i) + QString(missionEntries[i-1]), QString(missionEntries[i-1]));
     }
+    if(updateMissionList)
+        delete m_info;
+
+    UpdateCampaignPageMission(index);
+}
+
+void HWForm::UpdateCampaignPageMission(int index)
+{
+    // update thumbnail
+    QString campaignName = ui.pageCampaign->CBCampaign->currentText();
+    unsigned int mNum = ui.pageCampaign->CBMission->count() - ui.pageCampaign->CBMission->currentIndex();
+    QString image = getCampaignImage(campaignName,mNum);
+    ui.pageCampaign->btnPreview->setIcon(QIcon((":/res/campaign/"+campaignName+"/"+image)));
+    // update description
+    // when campaign changes the UpdateCampaignPageMission is triggered with wrong values
+    // this will cause segfault. This check prevents illegal memory reads
+    if(index > -1 && index < campaignMissionDescriptions.count()) {
+        ui.pageCampaign->lbltitle->setText("<h2>"+ui.pageCampaign->CBMission->currentText()+"</h2>");
+        ui.pageCampaign->lbldescription->setText(campaignMissionDescriptions[index]);
+    }
 }
 
 void HWForm::UpdateCampaignPageProgress(int index)
@@ -1887,7 +1987,7 @@
 
     QString prefix = "\"" + datadir->absolutePath() + "\"";
     QString userPrefix = "\"" + cfgdir->absolutePath() + "\"";
-#ifdef Q_WS_WIN
+#ifdef Q_OS_WIN
     prefix = prefix.replace("/","\\");
     userPrefix = userPrefix.replace("/","\\");
 #endif
@@ -1928,7 +2028,7 @@
     registry_hkcr.setValue("Hedgewars.Save/Shell/Open/Command/Default", "\"" + bindir->absolutePath().replace("/", "\\") + "\\hwengine.exe\" " + arguments + " %1");
 
     // custom url scheme(s)
-    registry_hkcr.setValue("hwplay/Default", "\"URL:Hedgewars ServerAccess Protocol\"");
+    registry_hkcr.setValue("hwplay/Default", "\"URL:Hedgewars ServerAccess Scheme\"");
     registry_hkcr.setValue("hwplay/URL Protocol", "");
     registry_hkcr.setValue("hwplay/DefaultIcon/Default", "\"" + bindir->absolutePath().replace("/", "\\") + "\\hedgewars.exe\",0");
     registry_hkcr.setValue("hwplay/Shell/Open/Command/Default", "\"" + bindir->absolutePath().replace("/", "\\") + "\\hedgewars.exe\"  %1");
@@ -1947,8 +2047,10 @@
     if (success) success = checkForDir(QDir::home().absolutePath() + "/.local/share");
     if (success) success = checkForDir(QDir::home().absolutePath() + "/.local/share/applications");
     if (success) success = system(("cp "+datadir->absolutePath()+"/misc/hedgewars-mimeinfo.xml "+QDir::home().absolutePath()+"/.local/share/mime/packages").toLocal8Bit().constData())==0;
+    if (success) success = system(("cp "+datadir->absolutePath()+"/misc/hedgewars.desktop "+QDir::home().absolutePath()+"/.local/share/applications").toLocal8Bit().constData())==0;
     if (success) success = system(("cp "+datadir->absolutePath()+"/misc/hwengine.desktop "+QDir::home().absolutePath()+"/.local/share/applications").toLocal8Bit().constData())==0;
     if (success) success = system(("update-mime-database "+QDir::home().absolutePath()+"/.local/share/mime").toLocal8Bit().constData())==0;
+    if (success) success = system("xdg-mime default hedgewars.desktop x-scheme-handler/hwplay")==0;
     if (success) success = system("xdg-mime default hwengine.desktop application/x-hedgewars-demo")==0;
     if (success) success = system("xdg-mime default hwengine.desktop application/x-hedgewars-save")==0;
     // hack to add user's settings to hwengine. might be better at this point to read in the file, append it, and write it out to its new home.  This assumes no spaces in the data dir path
@@ -2000,6 +2102,31 @@
     }
 }
 
+void HWForm::restartGame()
+{
+    // get rid off old game stats page
+    if(ui.Pages->currentIndex() == ID_PAGE_GAMESTATS)
+        GoBack();
+
+    CreateGame(lastGameCfg, lastGameTeamSel, lastGameAmmo);
+
+    switch(lastGameType) {
+    case gtTraining:
+        game->StartTraining(lastGameStartArgs.at(0).toString());
+        break;
+    case gtQLocal:
+        game->StartQuick();
+        break;
+    case gtCampaign:
+        game->StartCampaign(lastGameStartArgs.at(0).toString(), lastGameStartArgs.at(1).toString(), lastGameStartArgs.at(2).toString());
+        break;
+    case gtLocal:
+        game->StartLocal();
+        break;
+    default:
+        break;
+    }
+}
 
 void HWForm::ShowErrorMessage(const QString & msg)
 {
@@ -2008,8 +2135,22 @@
 
 void HWForm::showFeedbackDialog()
 {
-    FeedbackDialog dialog(this);
-    dialog.exec();
+    QNetworkRequest newRequest(QUrl("http://www.hedgewars.org"));
+
+    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+    QNetworkReply *reply = manager->get(newRequest);
+    connect(reply, SIGNAL(finished()), this, SLOT(showFeedbackDialogNetChecked()));
+}
+
+void HWForm::showFeedbackDialogNetChecked()
+{
+    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
+
+    if (reply && (reply->error() == QNetworkReply::NoError)) {
+        FeedbackDialog dialog(this);
+        dialog.exec();
+    } else
+        MessageDialog::ShowErrorMessage(tr("This page requires an internet connection."), this);
 }
 
 void HWForm::startGame()
--- a/QTfrontend/hwform.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/hwform.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -127,8 +127,10 @@
         void Music(bool checked);
         void UpdateCampaignPage(int index);
         void UpdateCampaignPageProgress(int index);
+        void UpdateCampaignPageMission(int index);
         void InitCampaignPage();
         void showFeedbackDialog();
+        void showFeedbackDialogNetChecked();
 
         void NetGameChangeStatus(bool isMaster);
         void NetGameMaster();
@@ -142,6 +144,9 @@
         void openRegistrationPage();
 
         void startGame();
+        void restartGame();
+
+        void FromNetProxySlot(const QByteArray &);
 
     private:
         void _NetConnect(const QString & hostName, quint16 port, QString nick);
@@ -188,6 +193,9 @@
         HWNamegen * namegen;
         AmmoSchemeModel * ammoSchemeModel;
         QStack<int> PagesStack;
+        QString previousCampaignName;
+        QString previousTeamName;
+        QStringList campaignMissionDescriptions;
         QTime eggTimer;
         BGWidget * wBackground;
         QSignalMapper * pageSwitchMapper;
--- a/QTfrontend/main.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/main.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,6 @@
 
 #include <QTranslator>
 #include <QLocale>
-#include <QMessageBox>
 #include <QPlastiqueStyle>
 #include <QRegExp>
 #include <QMap>
@@ -36,6 +35,7 @@
 
 #include "DataManager.h"
 #include "FileEngine.h"
+#include "MessageDialog.h"
 
 #ifdef _WIN32
 #include <Shlobj.h>
@@ -99,12 +99,7 @@
     if (!tmpdir.exists())
         if (!tmpdir.mkpath(dir))
         {
-            QMessageBox directoryMsg(QApplication::activeWindow());
-            directoryMsg.setIcon(QMessageBox::Warning);
-            directoryMsg.setWindowTitle(QMessageBox::tr("Main - Error"));
-            directoryMsg.setText(QMessageBox::tr("Cannot create directory %1").arg(dir));
-            directoryMsg.setWindowModality(Qt::WindowModal);
-            directoryMsg.exec();
+            MessageDialog::ShowErrorMessage(HWApplication::tr("Cannot create directory %1").arg(dir));
             return false;
         }
     return true;
@@ -140,11 +135,11 @@
     HWApplication app(argc, argv);
 
     QLabel *splash = NULL;
-#if defined Q_WS_WIN
+#if defined Q_OS_WIN
     QPixmap pixmap(":res/splash.png");
     splash = new QLabel(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
     splash->setAttribute(Qt::WA_TranslucentBackground);
-    const QRect deskSize = QApplication::desktop()->screenGeometry(-1);
+    const QRect deskSize = HWApplication::desktop()->screenGeometry(-1);
     QPoint splashCenter = QPoint( (deskSize.width() - pixmap.width())/2,
                                   (deskSize.height() - pixmap.height())/2 );
     splash->move(splashCenter);
@@ -253,16 +248,9 @@
 
     datadir->cd(bindir->absolutePath());
     datadir->cd(*cDataDir);
-    if(!datadir->cd("Data"))
+    if (!datadir->cd("Data"))
     {
-        QMessageBox missingMsg(QApplication::activeWindow());
-        missingMsg.setIcon(QMessageBox::Critical);
-        missingMsg.setWindowTitle(QMessageBox::tr("Main - Error"));
-        missingMsg.setText(QMessageBox::tr("Failed to open data directory:\n%1\n\n"
-                                           "Please check your installation!").
-                                            arg(datadir->absolutePath()+"/Data"));
-        missingMsg.setWindowModality(Qt::WindowModal);
-        missingMsg.exec();
+        MessageDialog::ShowFatalMessage(HWApplication::tr("Failed to open data directory:\n%1\n\nPlease check your installation!").arg(datadir->absolutePath()+"/Data"));
         return 1;
     }
 
@@ -273,18 +261,24 @@
     engine->setWriteDir(cfgdir->absolutePath());
     engine->mountPacks();
 
-    DataManager::ensureFileExists("physfs://hedgewars.ini");
-
     QTranslator Translator;
     {
-        QSettings settings("physfs://hedgewars.ini", QSettings::IniFormat);
+        QSettings settings(DataManager::instance().settingsFileName(), QSettings::IniFormat);
+        settings.setIniCodec("UTF-8");
+
         QString cc = settings.value("misc/locale", QString()).toString();
-        if(cc.isEmpty())
+        if (cc.isEmpty())
+        {
             cc = QLocale::system().name();
 
+            // Fallback to current input locale if "C" locale is returned
+            if(cc == "C")
+                cc = HWApplication::keyboardInputLocale().name();
+        }
+
         // load locale file into translator
-        if(!Translator.load(QString("physfs://Locale/hedgewars_%1").arg(cc)))
-            qWarning("Failed to install translation");
+        if (!Translator.load(QString("physfs://Locale/hedgewars_%1").arg(cc)))
+            qWarning("Failed to install translation (%s)", qPrintable(cc));
         app.installTranslator(&Translator);
     }
 
--- a/QTfrontend/model/GameStyleModel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/GameStyleModel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/GameStyleModel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/GameStyleModel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/HatModel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/HatModel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/HatModel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/HatModel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/MapModel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/MapModel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/MapModel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/MapModel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/ThemeModel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/ThemeModel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/ThemeModel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/ThemeModel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/ammoSchemeModel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/ammoSchemeModel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -194,7 +194,7 @@
             << QVariant(false)         // place hog      14
             << QVariant(true)          // shared ammo    15
             << QVariant(true)          // disable girders 16
-            << QVariant(false)         // disable land objects 17
+            << QVariant(true)         // disable land objects 17
             << QVariant(false)         // AI survival    18
             << QVariant(false)         // inf. attack    19
             << QVariant(true)          // reset weps     20
@@ -407,7 +407,7 @@
             << QVariant(true)          // team divide    2
             << QVariant(false)         // solid land     3
             << QVariant(false)         // border         4
-            << QVariant(true)          // low gravity    5
+            << QVariant(false)         // low gravity    5
             << QVariant(false)         // laser sight    6
             << QVariant(false)         // invulnerable   7
             << QVariant(false)         // reset health   8
--- a/QTfrontend/model/ammoSchemeModel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/ammoSchemeModel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/netserverslist.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/netserverslist.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/netserverslist.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/netserverslist.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/playerslistmodel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/playerslistmodel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -84,7 +84,7 @@
 }
 
 
-void PlayersListModel::addPlayer(const QString & nickname)
+void PlayersListModel::addPlayer(const QString & nickname, bool notify)
 {
     insertRow(rowCount());
 
@@ -92,11 +92,18 @@
     setData(mi, nickname);
 
     checkFriendIgnore(mi);
+
+    emit nickAddedLobby(nickname, notify);
 }
 
 
-void PlayersListModel::removePlayer(const QString & nickname)
+void PlayersListModel::removePlayer(const QString & nickname, const QString &msg)
 {
+    if(msg.isEmpty())
+        emit nickRemovedLobby(nickname);
+    else
+        emit nickRemovedLobby(nickname, msg);
+
     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
 
     if(mil.size())
@@ -104,7 +111,7 @@
 }
 
 
-void PlayersListModel::playerJoinedRoom(const QString & nickname)
+void PlayersListModel::playerJoinedRoom(const QString & nickname, bool notify)
 {
     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
 
@@ -114,11 +121,15 @@
         updateIcon(mil[0]);
         updateSortData(mil[0]);
     }
+
+    emit nickAdded(nickname, notify);
 }
 
 
 void PlayersListModel::playerLeftRoom(const QString & nickname)
 {
+    emit nickRemoved(nickname);
+
     QModelIndexList mil = match(index(0), Qt::DisplayRole, nickname, 1, Qt::MatchExactly);
 
     if(mil.size())
--- a/QTfrontend/model/playerslistmodel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/playerslistmodel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -41,13 +41,20 @@
     bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
 
 public slots:
-    void addPlayer(const QString & nickname);
-    void removePlayer(const QString & nickname);
-    void playerJoinedRoom(const QString & nickname);
+    void addPlayer(const QString & nickname, bool notify);
+    void removePlayer(const QString & nickname, const QString & msg = QString());
+    void playerJoinedRoom(const QString & nickname, bool notify);
     void playerLeftRoom(const QString & nickname);
     void resetRoomFlags();
     void setNickname(const QString & nickname);
 
+signals:
+    void nickAdded(const QString& nick, bool notifyNick);
+    void nickRemoved(const QString& nick);
+    void nickAddedLobby(const QString& nick, bool notifyNick);
+    void nickRemovedLobby(const QString& nick);
+    void nickRemovedLobby(const QString& nick, const QString& message);
+
 private:
     QHash<quint32, QIcon> & m_icons();
     typedef QHash<int, QVariant> DataEntry;
--- a/QTfrontend/model/roomslistmodel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/roomslistmodel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/roomslistmodel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/model/roomslistmodel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/hwmap.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/hwmap.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/hwmap.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/hwmap.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netregister.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netregister.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netregister.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netregister.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netserver.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netserver.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netserver.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netserver.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpserver.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netudpserver.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpserver.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netudpserver.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpwidget.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netudpwidget.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpwidget.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/netudpwidget.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/newnetclient.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/newnetclient.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -336,10 +336,24 @@
             qWarning("Net: Empty CHAT message");
             return;
         }
+
+        QString action = HWProto::chatStringToAction(lst[2]);
+
         if (netClientState == InLobby)
-            emit chatStringLobby(lst[1], HWProto::formatChatMsgForFrontend(lst[2]));
+        {
+            if (action != NULL)
+                emit lobbyChatAction(lst[1], action);
+            else
+                emit lobbyChatMessage(lst[1], lst[2]);
+        }
         else
+        {
             emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2]));
+            if (action != NULL)
+                emit roomChatAction(lst[1], action);
+            else
+                emit roomChatMessage(lst[1], lst[2]);
+        }
         return;
     }
 
@@ -350,12 +364,13 @@
             qWarning("Net: Malformed INFO message");
             return;
         }
-        QStringList tmp = lst;
-        tmp.removeFirst();
-        if (netClientState == InLobby)
-            emit chatStringLobby(tmp.join("\n").prepend('\x01'));
-        else
-            emit chatStringFromNet(tmp.join("\n").prepend('\x01'));
+        emit playerInfo(lst[1], lst[2], lst[3], lst[4]);
+        if (netClientState != InLobby)
+        {
+            QStringList tmp = lst;
+            tmp.removeFirst();
+            emit chatStringFromNet(tmp.join(" ").prepend('\x01'));
+        }
         return;
     }
 
@@ -410,8 +425,7 @@
                         {
                             if (nick == mynick)
                             {
-                                if (isChief && !setFlag) ToggleReady();
-                                else emit setMyReadyStatus(setFlag);
+                                emit setMyReadyStatus(setFlag);
                             }
                             m_playersModel->setFlag(nick, PlayersListModel::Ready, setFlag);
                         }
@@ -490,9 +504,7 @@
                 emit connected();
             }
 
-            m_playersModel->addPlayer(lst[i]);
-            emit nickAddedLobby(lst[i], false);
-            emit chatStringLobby(lst[i], tr("%1 *** %2 has joined").arg('\x03').arg("|nick|"));
+            m_playersModel->addPlayer(lst[i], false);
         }
         return;
     }
@@ -539,13 +551,11 @@
             qWarning("Net: Bad LOBBY:LEFT message");
             return;
         }
-        emit nickRemovedLobby(lst[1]);
+
         if (lst.size() < 3)
-            emit chatStringLobby(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
+            m_playersModel->removePlayer(lst[1]);
         else
-            emit chatStringLobby(lst[1], tr("%1 *** %2 has left (%3)").arg('\x03').arg("|nick|", lst[2]));
-
-        m_playersModel->removePlayer(lst[1]);
+            m_playersModel->removePlayer(lst[1], lst[2]);
 
         return;
     }
@@ -636,8 +646,8 @@
                     emit configAsked();
             }
 
-            m_playersModel->playerJoinedRoom(lst[i]);
-            emit nickAdded(lst[i], isChief && (lst[i] != mynick));
+            m_playersModel->playerJoinedRoom(lst[i], isChief && (lst[i] != mynick));
+
             emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
         }
         return;
@@ -769,9 +779,8 @@
 
             for(int i = 1; i < lst.size(); ++i)
             {
-                emit nickAdded(lst[i], isChief && (lst[i] != mynick));
                 emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
-                m_playersModel->playerJoinedRoom(lst[i]);
+                m_playersModel->playerJoinedRoom(lst[i], isChief && (lst[i] != mynick));
             }
             return;
         }
@@ -783,7 +792,7 @@
                 qWarning("Net: Bad LEFT message");
                 return;
             }
-            emit nickRemoved(lst[1]);
+
             if (lst.size() < 3)
                 emit chatStringFromNet(tr("%1 *** %2 has left").arg('\x03').arg(lst[1]));
             else
@@ -836,12 +845,25 @@
         );
 }
 
+void HWNewNet::chatLineToNetWithEcho(const QString& str)
+{
+    if(str != "")
+    {
+        emit chatStringFromNet(HWProto::formatChatMsg(mynick, str));
+        chatLineToNet(str);
+    }
+}
+
 void HWNewNet::chatLineToNet(const QString& str)
 {
     if(str != "")
     {
         RawSendNet(QString("CHAT") + delimeter + str);
-        emit(chatStringFromMe(HWProto::formatChatMsg(mynick, str)));
+        QString action = HWProto::chatStringToAction(str);
+        if (action != NULL)
+            emit(roomChatAction(mynick, action));
+        else
+            emit(roomChatMessage(mynick, str));
     }
 }
 
@@ -850,7 +872,11 @@
     if(str != "")
     {
         RawSendNet(QString("CHAT") + delimeter + str);
-        emit chatStringLobby(mynick, HWProto::formatChatMsgForFrontend(str));
+        QString action = HWProto::chatStringToAction(str);
+        if (action != NULL)
+            emit(lobbyChatAction(mynick, action));
+        else
+            emit(lobbyChatMessage(mynick, str));
     }
 }
 
--- a/QTfrontend/net/newnetclient.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/newnetclient.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -99,10 +99,6 @@
         void AuthFailed();
         void EnteredGame();
         void LeftRoom(const QString & reason);
-        void nickAdded(const QString& nick, bool notifyNick);
-        void nickRemoved(const QString& nick);
-        void nickAddedLobby(const QString& nick, bool notifyNick);
-        void nickRemovedLobby(const QString& nick);
         void FromNet(const QByteArray & buf);
         void adminAccess(bool);
         void roomMaster(bool);
@@ -117,11 +113,16 @@
         void RemoveNetTeam(const HWTeam&);
         void hhnumChanged(const HWTeam&);
         void teamColorChanged(const HWTeam&);
-        void chatStringLobby(const QString&);
-        void chatStringLobby(const QString&, const QString&);
+        void playerInfo(
+            const QString & nick,
+            const QString & ip,
+            const QString & version,
+            const QString & roomInfo);
+        void lobbyChatMessage(const QString & nick, const QString & message);
+        void lobbyChatAction(const QString & nick, const QString & action);
+        void roomChatMessage(const QString & nick, const QString & message);
+        void roomChatAction(const QString & nick, const QString & action);
         void chatStringFromNet(const QString&);
-        void chatStringFromMe(const QString&);
-        void chatStringFromMeLobby(const QString&);
 
         void roomsList(const QStringList&);
         void serverMessage(const QString &);
@@ -137,6 +138,7 @@
     public slots:
         void ToggleReady();
         void chatLineToNet(const QString& str);
+        void chatLineToNetWithEcho(const QString&);
         void chatLineToLobby(const QString& str);
         void SendTeamMessage(const QString& str);
         void SendNet(const QByteArray & buf);
--- a/QTfrontend/net/proto.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/proto.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -45,11 +45,6 @@
     return buf;
 }
 
-QString HWProto::formatChatMsgForFrontend(const QString & msg)
-{
-    return formatChatMsg("|nick|", msg);
-}
-
 QString HWProto::formatChatMsg(const QString & nick, const QString & msg)
 {
     if(msg.left(4) == "/me ")
@@ -57,3 +52,11 @@
     else
         return QString("\x01%1: %2").arg(nick).arg(msg);
 }
+
+QString HWProto::chatStringToAction(const QString & string)
+{
+    if(string.left(4) == "/me ")
+        return string.mid(4);
+    else
+        return NULL;
+}
--- a/QTfrontend/net/proto.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/proto.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -35,6 +35,12 @@
         static QByteArray & addStringListToBuffer(QByteArray & buf, const QStringList & strList);
         static QString formatChatMsg(const QString & nick, const QString & msg);
         static QString formatChatMsgForFrontend(const QString & msg);
+        /**
+         * @brief Determines if a chat string represents a chat action and returns the action.
+         * @param string chat string
+         * @return the action-message or NULL if message is no action
+         */
+        static QString chatStringToAction(const QString & string);
 };
 
 #endif // _PROTO_H
--- a/QTfrontend/net/recorder.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/recorder.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/recorder.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/recorder.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/tcpBase.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/tcpBase.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,13 +19,12 @@
 
 #include "tcpBase.h"
 
-#include <QMessageBox>
 #include <QList>
-#include <QApplication>
 #include <QImage>
 #include <QThread>
 
 #include "hwconsts.h"
+#include "MessageDialog.h"
 
 #ifdef HWLIBRARY
 extern "C" void Game(char**arguments);
@@ -89,13 +88,7 @@
         IPCServer->setMaxPendingConnections(1);
         if (!IPCServer->listen(QHostAddress::LocalHost))
         {
-            QMessageBox deniedMsg(QApplication::activeWindow());
-            deniedMsg.setIcon(QMessageBox::Critical);
-            deniedMsg.setWindowTitle(QMessageBox::tr("TCP - Error"));
-            deniedMsg.setText(QMessageBox::tr("Unable to start the server: %1.").arg(IPCServer->errorString()));
-            deniedMsg.setWindowModality(Qt::WindowModal);
-            deniedMsg.exec();
-
+            MessageDialog::ShowFatalMessage(tr("Unable to start server at %1.").arg(IPCServer->errorString()));
             exit(0); // FIXME - should be graceful exit here (lower Critical -> Warning above when implemented)
         }
     }
@@ -141,7 +134,7 @@
     connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(StartProcessError(QProcess::ProcessError)));
     QStringList arguments=getArguments();
 
-#ifdef DEBUG
+#ifdef QT_DEBUG
     // redirect everything written on stdout/stderr
     process->setProcessChannelMode(QProcess::ForwardedChannels);
 #endif
@@ -172,14 +165,7 @@
 
 void TCPBase::StartProcessError(QProcess::ProcessError error)
 {
-    QMessageBox deniedMsg(QApplication::activeWindow());
-    deniedMsg.setIcon(QMessageBox::Critical);
-    deniedMsg.setWindowTitle(QMessageBox::tr("TCP - Error"));
-    deniedMsg.setText(QMessageBox::tr("Unable to run engine at ") + bindir->absolutePath() + "/hwengine\n" +
-                      QMessageBox::tr("Error code: %1").arg(error));
-    deniedMsg.setWindowModality(Qt::WindowModal);
-    deniedMsg.exec();
-
+    MessageDialog::ShowFatalMessage(tr("Unable to run engine at %1\nError code: %2").arg(bindir->absolutePath() + "/hwengine").arg(error));
     ClientDisconnect();
 }
 
--- a/QTfrontend/net/tcpBase.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/net/tcpBase.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
Binary file QTfrontend/res/Hedgehog.png has changed
Binary file QTfrontend/res/StatsCustomAchievement.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/backstab.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/dragon.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/enemy.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/epil.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/family.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/first_blood.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/journey.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/queen.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/shadow.png has changed
Binary file QTfrontend/res/campaign/A Classic Fairytale/united.png has changed
--- a/QTfrontend/res/css/chat.css	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/res/css/chat.css	Thu Jun 13 22:27:23 2013 +0200
@@ -61,15 +61,20 @@
 .msg_FriendChat .nick { color: #30ff30; }
 .msg_UserJoin { color: #c0c0c0; }
 .msg_UserJoin .nick { color: #d0d0d0; }
+.msg_UserLeave { color: #b8b8b8; }
+.msg_UserLeave .nick { color: #c8c8c8; }
 .msg_FriendJoin { font-weight: bold; color: #c0f0c0; }
 .msg_FriendJoin .nick { color: #d8f0d8; }
+.msg_FriendLeave { font-weight: bold; color: #ffe090; }
+.msg_FriendLeave .nick { color: #f8e878; }
 .msg_UserAction { color: #ff80ff; }
 .msg_UserAction .nick { color: #ffa0ff;}
 .msg_FriendAction { color: #ff00ff; }
 .msg_FriendAction .nick { color: #ff30ff; }
 
-/* uncomment next line to disable join and leave messages of non-friends */
+/* uncomment next lines to disable join and leave messages of non-friends */
 /* .msg_UserJoin { display:none; } */
+/* .msg_UserLeave { display:none; } */
 
 /* timestamps */
 .timestamp {
--- a/QTfrontend/res/css/qt.css	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/res/css/qt.css	Thu Jun 13 22:27:23 2013 +0200
@@ -179,6 +179,7 @@
 QComboBox {
 border-radius: 10px;
 padding: 3px;
+height: 18px;
 }
 QComboBox:pressed{
 border-color: white;
@@ -326,4 +327,8 @@
 
 TeamSelWidget, #gameStackContainer, #GBoxOptions {
 border-radius: 10px;
-}
\ No newline at end of file
+}
+
+PageMultiplayer TeamSelWidget {
+min-height: 500px;
+}
--- a/QTfrontend/res/html/about.html	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/res/html/about.html	Thu Jun 13 22:27:23 2013 +0200
@@ -34,6 +34,7 @@
         Campaign support, first campaign: Szabolcs Orb&agrave;n &lt;<a href="mailto:szabibibi@gmail.com">szabibibi@gmail.com</a>&gt;<br>
         Keybinds, feedback, maps and hats interfaces: Drew Gottlieb &lt;<a href="mailto:gottlieb.drew@gmail.com">gottlieb.drew@gmail.com</a>&gt;<br>
         Login dialogs, frontend improvements: Ondrej Skopek &lt;<a href="mailto:skopekondrej@gmail.com">skopekondrej@gmail.com</a>&gt;<br>
+        Icegun weapon: Julia Struchenko &lt;<a href="mailto:urbertar@gmail.com">urbertar@gmail.com</a>&gt;<br>
         </p>
 
         <h2>Art:</h2>
@@ -72,11 +73,11 @@
             Chinese: Jie Luo &lt;<a href="mailto:lililjlj@gmail.com">lililjlj@gmail.com</a>&gt;<br>
             English: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;<br>
             Finnish: Nina Kuisma &lt;<a href="mailto:ninnnu@gmail.com">ninnnu@gmail.com</a>&gt;<br>
-            French: Antoine Turmel &lt;<a href="mailto:geekshadow@gmail.com">geekshadow@gmail.com</a>&gt;, Clement Woitrain &lt;<a href="mailto:sphrixclement@gmail.com">sphrixclement@gmail.com</a>&gt;<br>
+            French: Antoine Turmel &lt;<a href="mailto:geekshadow@gmail.com">geekshadow@gmail.com</a>&gt;, Clement Woitrain &lt;<a href="mailto:sphrixclement@gmail.com">sphrixclement@gmail.com</a>&gt;, Matisumi<br>
             German: Peter Hüwe &lt;<a href="mailto:PeterHuewe@gmx.de">PeterHuewe@gmx.de</a>&gt;, Mario Liebisch &lt;<a href="mailto:mario.liebisch@gmail.com">mario.liebisch@gmail.com</a>&gt;, Richard Karolyi &lt;<a href="mailto:sheepluva@ercatec.net">sheepluva@ercatec.net</a>&gt;<br>
             Greek: &lt;<a href="mailto:talos_kriti@yahoo.gr">talos_kriti@yahoo.gr</a>&gt;<br>
-            Italian: Luca Bonora &lt;<a href="mailto:bonora.luca@gmail.com">bonora.luca@gmail.com</a>&gt;, Marco Bresciani<br>
-            Japanese: ADAM Etienne &lt;<a href="mailto:etienne.adam@gmail.com">etienne.adam@gmail.com</a>&gt;<br>
+            Italian: Luca Bonora &lt;<a href="mailto:bonora.luca@gmail.com">bonora.luca@gmail.com</a>&gt;, Marco Bresciani &lt;<a href="mailto:m.bresciani@email.it">m.bresciani@email.it</a>&gt;<br>
+            Japanese: ADAM Etienne &lt;<a href="mailto:etienne.adam@gmail.com">etienne.adam@gmail.com</a>&gt;, Marco Bresciani &lt;<a href="mailto:m.bresciani@email.it">m.bresciani@email.it</a>&gt;, 梅津洋恵<br>
             Korean: Anthony Bellew &lt;<a href="mailto:anthonyreflected@gmail.com">anthonyreflected@gmail.com</a>&gt;<br>
             Lithuanian: Lukas Urbonas &lt;<a href="mailto:lukasu08@gmail.com">lukasu08@gmail.com</a>&gt;<br>
             Polish: Maciej Mroziński &lt;<a href="mailto:mynick2@o2.pl">mynick2@o2.pl</a>&gt;, Wojciech Latkowski &lt;<a href="mailto:magik17l@gmail.com">magik17l@gmail.com</a>&gt;, Piotr Mitana, Maciej Górny<br>
--- a/QTfrontend/res/xml/tips.xml	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/res/xml/tips.xml	Thu Jun 13 22:27:23 2013 +0200
@@ -46,6 +46,7 @@
     <tip>Like Hedgewars? Become a fan on <a href="http://www.facebook.com/Hedgewars">Facebook</a> or follow us on <a href="http://twitter.com/hedgewars">Twitter</a></tip>
     <tip>Feel free to draw your own graves, hats, flags or even maps and themes! But note that you'll have to share them somewhere to use them online.</tip>
     <tip>Keep your video card drivers up to date to avoid issues playing the game.</tip>
+    <tip>Heads or tails? Type '/rnd' in lobby and you'll find out. Also '/rnd rock paper scissors' works!</tip>
     <tip>You're able to associate Hedgewars related files (savegames and demo recordings) with the game to launch them right from your favorite file or internet browser.</tip>
     <windows-only>
 	    <tip>The version of Hedgewars supports <a href="http://www.xfire.com">Xfire</a>. Make sure to add Hedgewars to its game list so your friends can see you playing.</tip>
--- a/QTfrontend/sdlkeys.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/sdlkeys.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/team.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/team.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/team.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/team.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
--- a/QTfrontend/ui/dialog/ask_quit.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/ask_quit.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/ask_quit.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/ask_quit.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/input_ip.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/input_ip.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/input_ip.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/input_ip.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/input_password.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/input_password.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -29,18 +29,14 @@
 {
     setWindowTitle(tr("Login"));
 
-    QString titleLabelText = "To connect to the server, please log in.\n\nIf you don't have an account on www.hedgewars.org,\njust enter your nickname.";
-    QString nickLabelText = "Nickname:";
-    QString passLabelText = "Password:";
-
     QGridLayout * layout = new QGridLayout(this);
 
     QLabel * titleLabel = new QLabel(this);
-    titleLabel->setText(titleLabelText);
+    titleLabel->setText(tr("To connect to the server, please log in.\n\nIf you don't have an account on www.hedgewars.org,\njust enter your nickname."));
     layout->addWidget(titleLabel, 0, 0);
 
     QLabel * nickLabel = new QLabel(this);
-    nickLabel->setText(nickLabelText);
+    nickLabel->setText(tr("Nickname:"));
     layout->addWidget(nickLabel, 1, 0);
 
     leNickname = new QLineEdit(this);
@@ -48,7 +44,7 @@
     layout->addWidget(leNickname, 2, 0);
 
     QLabel * passLabel = new QLabel(this);
-    passLabel->setText(passLabelText);
+    passLabel->setText(tr("Password:"));
     layout->addWidget(passLabel, 3, 0);
 
     lePassword = new QLineEdit(this);
--- a/QTfrontend/ui/dialog/input_password.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/input_password.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/upload_video.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/upload_video.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/upload_video.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/dialog/upload_video.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/mouseoverfilter.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/mouseoverfilter.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -35,7 +35,6 @@
     }
     else if (event->type() == QEvent::FocusIn)
     {
-        QWidget * widget = dynamic_cast<QWidget*>(dist);
         abstractpage = qobject_cast<AbstractPage*>(ui->Pages->currentWidget());
 
         // play a sound when mouse hovers certain ui elements
--- a/QTfrontend/ui/page/AbstractPage.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/AbstractPage.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/AbstractPage.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/AbstractPage.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageadmin.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageadmin.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageadmin.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageadmin.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagecampaign.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagecampaign.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,6 +19,7 @@
 #include <QGridLayout>
 #include <QPushButton>
 #include <QComboBox>
+#include <QLabel>
 
 #include "pagecampaign.h"
 
@@ -31,18 +32,43 @@
     pageLayout->setRowStretch(0, 1);
     pageLayout->setRowStretch(3, 1);
 
+    QGridLayout * infoLayout = new QGridLayout();
+    infoLayout->setColumnStretch(0, 1);
+    infoLayout->setColumnStretch(1, 1);
+    infoLayout->setColumnStretch(2, 1);
+    infoLayout->setColumnStretch(3, 1);
+    infoLayout->setColumnStretch(4, 1);
+    infoLayout->setRowStretch(0, 1);
+    infoLayout->setRowStretch(1, 1);
+
+    // set this as default image first time page is created, this will change in hwform.cpp
+    btnPreview = formattedButton(":/res/campaign/A Classic Fairytale/first_blood.png", true);
+    infoLayout->setAlignment(btnPreview, Qt::AlignHCenter | Qt::AlignVCenter);
+
+    lbldescription = new QLabel();
+    lbldescription->setAlignment(Qt::AlignHCenter| Qt::AlignTop);
+    lbldescription->setWordWrap(true);
+
+    lbltitle = new QLabel();
+    lbltitle->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
+
     CBTeam = new QComboBox(this);
     CBMission = new QComboBox(this);
     CBCampaign = new QComboBox(this);
 
-    pageLayout->addWidget(CBTeam, 1, 1);
-    pageLayout->addWidget(CBCampaign, 2, 1);
-    pageLayout->addWidget(CBMission, 3, 1);
+    infoLayout->addWidget(btnPreview,0,1,2,1);
+    infoLayout->addWidget(lbltitle,0,2,1,2);
+    infoLayout->addWidget(lbldescription,1,2,1,2);
+
+    pageLayout->addLayout(infoLayout, 0, 0, 2, 3);
+    pageLayout->addWidget(CBTeam, 2, 1);
+    pageLayout->addWidget(CBCampaign, 3, 1);
+    pageLayout->addWidget(CBMission, 4, 1);
 
     BtnStartCampaign = new QPushButton(this);
     BtnStartCampaign->setFont(*font14);
     BtnStartCampaign->setText(QPushButton::tr("Go!"));
-    pageLayout->addWidget(BtnStartCampaign, 2, 2);
+    pageLayout->addWidget(BtnStartCampaign, 3, 2);
 
     return pageLayout;
 }
--- a/QTfrontend/ui/page/pagecampaign.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagecampaign.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,7 +28,10 @@
     public:
         PageCampaign(QWidget* parent = 0);
 
+        QPushButton *btnPreview;
         QPushButton *BtnStartCampaign;
+        QLabel *lbldescription;
+        QLabel *lbltitle;
         QComboBox   *CBMission;
         QComboBox   *CBCampaign;
         QComboBox   *CBTeam;
--- a/QTfrontend/ui/page/pageconnecting.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageconnecting.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageconnecting.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageconnecting.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagedata.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagedata.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -60,7 +60,10 @@
 
     web->setOpenLinks(false);
 //    fetchList();
-
+    web->setHtml(QString(
+        "<center><h2>Hedgewars Downloadable Content</h2><br><br>"
+        "<i>%1</i></center>")
+        .arg(tr("Loading, please wait.")));
     m_contentDownloaded = false;
 }
 
@@ -106,8 +109,7 @@
 {
     QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
 
-    if(reply)
-    {
+    if (reply && (reply->error() == QNetworkReply::NoError)) {
         QString html = QString::fromUtf8(reply->readAll());
         int begin = html.indexOf("<!-- BEGIN -->");
         int end = html.indexOf("<!-- END -->");
@@ -117,7 +119,11 @@
             html.remove(0, begin);
         }
         web->setHtml(html);
-    }
+    } else
+        web->setHtml(QString(
+            "<center><h2>Hedgewars Downloadable Content</h2><br><br>"
+            "<p><i><h4>%1</i></h4></p></center>")
+            .arg(tr("This page requires an internet connection.")));
 }
 
 void PageDataDownload::fileDownloaded()
--- a/QTfrontend/ui/page/pagedata.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagedata.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagedrawmap.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagedrawmap.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagedrawmap.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagedrawmap.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageeditteam.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageeditteam.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -320,7 +320,7 @@
                        );
 
     if (!list.isEmpty())
-        SDLInteraction::instance().playSoundFile("physfs://" + voiceDir + "/" +
+        SDLInteraction::instance().playSoundFile("/" + voiceDir + "/" +
                                     list[rand() % list.size()]);
 }
 
--- a/QTfrontend/ui/page/pageeditteam.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageeditteam.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagegamestats.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagegamestats.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,10 +40,15 @@
 
 QLayout * PageGameStats::bodyLayoutDefinition()
 {
+	kindOfPoints = QString("");
+	defaultGraphTitle = true;	
     QGridLayout * pageLayout = new QGridLayout();
     pageLayout->setSpacing(20);
     pageLayout->setColumnStretch(0, 1);
     pageLayout->setColumnStretch(1, 1);
+    pageLayout->setRowStretch(0, 1);    
+    pageLayout->setRowStretch(1, 20);
+    //pageLayout->setRowStretch(1, -1); this should work but there is unnecessary empty space betwin lines if used
     pageLayout->setContentsMargins(7, 7, 7, 0);
 
     QGroupBox * gb = new QGroupBox(this);
@@ -61,15 +66,15 @@
     gbl->addWidget(l);
     gbl->addWidget(labelGameStats);
     gb->setLayout(gbl);
-    pageLayout->addWidget(gb, 1, 1, 1, 2);
+    pageLayout->addWidget(gb, 1, 1);
 
     // graph
     graphic = new FitGraphicsView(gb);
-    l = new QLabel(this);
-    l->setTextFormat(Qt::RichText);
-    l->setText("<br><h1><img src=\":/res/StatsH.png\"> " + PageGameStats::tr("Health graph") + "</h1>");
-    l->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-    gbl->addWidget(l);
+    labelGraphTitle = new QLabel(this);
+    labelGraphTitle->setTextFormat(Qt::RichText);
+    labelGraphTitle->setText("<br><h1><img src=\":/res/StatsH.png\"> " + PageGameStats::tr("Health graph") + "</h1>");
+    labelGraphTitle->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    gbl->addWidget(labelGraphTitle);
     gbl->addWidget(graphic);
     graphic->scale(1.0, -1.0);
     graphic->setBackgroundBrush(QBrush(Qt::black));
@@ -97,13 +102,26 @@
     return pageLayout;
 }
 
+//TODO button placement, image etc
 QLayout * PageGameStats::footerLayoutDefinition()
 {
     QHBoxLayout * bottomLayout = new QHBoxLayout();
+    
+    mainNote = new QLabel(this);
+    mainNote->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
+    mainNote->setWordWrap(true);
+    
+    bottomLayout->addWidget(mainNote, 0);
+    bottomLayout->setStretch(0,1);
 
-    btnSave = addButton(":/res/Save.png", bottomLayout, 0, true);
+    btnRestart = addButton(":/res/Start.png", bottomLayout, 1, true);
+    btnRestart->setWhatsThis(tr("Play again"));
+    btnRestart->setFixedWidth(58);
+    btnRestart->setFixedHeight(81);
+    btnRestart->setStyleSheet("QPushButton{margin-top:24px}");
+    btnSave = addButton(":/res/Save.png", bottomLayout, 2, true);
+    btnSave->setWhatsThis(tr("Save"));
     btnSave->setStyleSheet("QPushButton{margin: 24px 0 0 0;}");
-    bottomLayout->setAlignment(btnSave, Qt::AlignRight | Qt::AlignBottom);
 
     return bottomLayout;
 }
@@ -112,6 +130,7 @@
 {
     connect(this, SIGNAL(pageEnter()), this, SLOT(renderStats()));
     connect(btnSave, SIGNAL(clicked()), this, SIGNAL(saveDemoRequested()));
+    connect(btnRestart, SIGNAL(clicked()), this, SIGNAL(restartGameRequested()));
 }
 
 PageGameStats::PageGameStats(QWidget* parent) : AbstractPage(parent)
@@ -133,30 +152,48 @@
     lastColor = 0;
 }
 
+void PageGameStats::restartBtnVisible(bool visible)
+{
+    btnRestart->setVisible(visible);
+}
+
 void PageGameStats::renderStats()
 {
-    QGraphicsScene * scene = new QGraphicsScene();
-
-    QMap<quint32, QVector<quint32> >::const_iterator i = healthPoints.constBegin();
-    while (i != healthPoints.constEnd())
-    {
-        quint32 c = i.key();
-        //QColor clanColor = QColor(qRgb((c >> 16) & 255, (c >> 8) & 255, c & 255));
-        QVector<quint32> hps = i.value();
+	graphic->show();
+	labelGraphTitle-> show();
+	if(defaultGraphTitle) {
+		labelGraphTitle->setText("<br><h1><img src=\":/res/StatsH.png\"> " + PageGameStats::tr("Health graph") + "</h1>");
+	} else {
+		defaultGraphTitle = true;
+	}
+	// if not health data sent
+	if(healthPoints.size() == 0) {
+		labelGraphTitle->hide();
+		graphic->hide();
+	} else {
+		QGraphicsScene * scene = new QGraphicsScene();
 
-        QPainterPath path;
-        if (hps.size())
-            path.moveTo(0, hps[0]);
+		QMap<quint32, QVector<quint32> >::const_iterator i = healthPoints.constBegin();
+		while (i != healthPoints.constEnd())
+		{
+			quint32 c = i.key();
+			//QColor clanColor = QColor(qRgb((c >> 16) & 255, (c >> 8) & 255, c & 255));
+			QVector<quint32> hps = i.value();
 
-        for(int t = 1; t < hps.size(); ++t)
-            path.lineTo(t, hps[t]);
+			QPainterPath path;
+			if (hps.size())
+				path.moveTo(0, hps[0]);
 
-        scene->addPath(path, QPen(c));
-        ++i;
-    }
+			for(int t = 1; t < hps.size(); ++t)
+				path.lineTo(t, hps[t]);
 
-    graphic->setScene(scene);
-    graphic->fitInView(graphic->sceneRect());
+			scene->addPath(path, QPen(c));
+			++i;
+		}
+
+		graphic->setScene(scene);
+		graphic->fitInView(graphic->sceneRect());
+	}
 }
 
 void PageGameStats::GameStats(char type, const QString & info)
@@ -198,6 +235,13 @@
             healthPoints[clan].append(hp);
             break;
         }
+        case 'g' :
+        {
+			// TODO: change default picture or add change pic capability
+			defaultGraphTitle = false;
+			labelGraphTitle->setText("<br><h1><img src=\":/res/StatsR.png\"> " + info + "</h1>");
+            break;
+        }
         case 'T':   // local team stats
         {
             //AddStatText("<p>local team: " + info + "</p>");
@@ -213,7 +257,11 @@
             }
             break;
         }
-
+		case 'p' :
+        {
+            kindOfPoints = info;
+            break;
+        }
         case 'P' :
         {
             int i = info.indexOf(' ');
@@ -250,7 +298,13 @@
             }
 
             QString message;
-            QString killstring = PageGameStats::tr("(%1 kill)", "", kills).arg(kills);
+            QString killstring;
+            if(kindOfPoints.compare("") == 0) {
+				killstring = PageGameStats::tr("(%1 kill)", "", kills).arg(kills);
+			} else {
+				killstring = PageGameStats::tr("(%1 %2)", "", kills).arg(kills).arg(kindOfPoints);
+				kindOfPoints = QString("");
+			}
 
             message = QString("<p><h2>%1 %2. <font color=\"%4\">%3</font> ").arg(image, QString::number(playerPosition), playername, clanColor.name()) + killstring + "</h2></p>";
 
@@ -281,6 +335,12 @@
             AddStatText(message);
             break;
         }
+        case 'c' :
+        {
+            QString message = "<p><img src=\":/res/StatsCustomAchievement.png\"> "+info+" </p>";
+            AddStatText(message);
+            break;
+        }
 
     }
 }
--- a/QTfrontend/ui/page/pagegamestats.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagegamestats.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -44,18 +44,24 @@
         PageGameStats(QWidget* parent = 0);
 
         QPushButton *btnSave;
+        QPushButton *btnRestart;
+        QLabel *mainNote;
         QLabel *labelGameStats;
         QLabel *labelGameWin;
         QLabel *labelGameRank;
+        QLabel *labelGraphTitle;
+        QString kindOfPoints;
         FitGraphicsView * graphic;
 
     public slots:
         void GameStats(char type, const QString & info);
         void clear();
         void renderStats();
+        void restartBtnVisible(bool visible);
 
     signals:
         void saveDemoRequested();
+        void restartGameRequested();
 
     private:
         void AddStatText(const QString & msg);
@@ -63,6 +69,7 @@
         QMap<quint32, QVector<quint32> > healthPoints;
         unsigned int playerPosition;
         quint32 lastColor;
+        bool defaultGraphTitle;
 
     protected:
         QLayout * bodyLayoutDefinition();
--- a/QTfrontend/ui/page/pageinfo.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageinfo.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageinfo.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageinfo.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageingame.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageingame.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageingame.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageingame.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagemain.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagemain.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -120,8 +120,8 @@
 void PageMain::connectSignals()
 {
     connect(BtnNet, SIGNAL(clicked()), this, SLOT(toggleNetworkChoice()));
-    connect(BtnNetLocal, SIGNAL(clicked()), this, SLOT(toggleNetworkChoice()));
-    connect(BtnNetOfficial, SIGNAL(clicked()), this, SLOT(toggleNetworkChoice()));
+    //connect(BtnNetLocal, SIGNAL(clicked()), this, SLOT(toggleNetworkChoice()));
+    //connect(BtnNetOfficial, SIGNAL(clicked()), this, SLOT(toggleNetworkChoice()));
     // TODO: add signal-forwarding required by (currently missing) encapsulation
 }
 
@@ -133,10 +133,10 @@
         setAttribute(Qt::WA_NoSystemBackground, true);
     mainNote->setOpenExternalLinks(true);
 
-#ifdef DEBUG
+#ifdef QT_DEBUG
     setDefaultDescription(QLabel::tr("This development build is 'work in progress' and may not be compatible with other versions of the game, while some features might be broken or incomplete!"));
 #else
-    setDefaultDescription(QLabel::tr("Tip: ") + randomTip());
+    setDefaultDescription(QLabel::tr("Tip: %1").arg(randomTip()));
 #endif
 
 }
@@ -189,3 +189,10 @@
     if (visible)    BtnNet->setIcon(originalNetworkIcon);
     else            BtnNet->setIcon(disabledNetworkIcon);
 }
+
+void PageMain::resetNetworkChoice()
+{
+    BtnNetLocal->setVisible(false);
+    BtnNetOfficial->setVisible(false);
+    BtnNet->setIcon(originalNetworkIcon);
+}
--- a/QTfrontend/ui/page/pagemain.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagemain.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -29,6 +29,7 @@
 
     public:
         PageMain(QWidget * parent = 0);
+        void resetNetworkChoice();
 
         QPushButton * BtnSinglePlayer;
         QPushButton * BtnNet;
--- a/QTfrontend/ui/page/pagemultiplayer.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagemultiplayer.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -31,15 +31,13 @@
 
 QLayout * PageMultiplayer::bodyLayoutDefinition()
 {
-    QGridLayout * pageLayout = new QGridLayout();
+    QHBoxLayout * pageLayout = new QHBoxLayout();
 
     gameCFG = new GameCFGWidget(this);
-    pageLayout->addWidget(gameCFG, 0, 0, 1, 2);
-
-    pageLayout->setRowStretch(2, 1);
+    pageLayout->addWidget(gameCFG, 3, Qt::AlignTop);
 
     teamsSelect = new TeamSelWidget(this);
-    pageLayout->addWidget(teamsSelect, 0, 2, 3, 2);
+    pageLayout->addWidget(teamsSelect, 2, Qt::AlignTop);
 
     return pageLayout;
 }
--- a/QTfrontend/ui/page/pagemultiplayer.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagemultiplayer.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenet.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagenet.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -73,7 +73,7 @@
     BtnNetSvrStart = formattedButton(QPushButton::tr("Start server"));
     BtnNetSvrStart->setMinimumWidth(180);
     QString serverPath = bindir->absolutePath() + "/hedgewars-server";
-#ifdef Q_WS_WIN
+#ifdef Q_OS_WIN
     serverPath += + ".exe";
 #endif
     QFile server(serverPath);
--- a/QTfrontend/ui/page/pagenet.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagenet.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenetgame.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagenetgame.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenetgame.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagenetgame.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenetserver.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagenetserver.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -79,6 +79,16 @@
     BtnShare->setWhatsThis(QPushButton::tr("Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you."));
     gbLayout->addWidget(BtnShare, 2, 1);
 
+    labelURL = new QLabel(gb);
+    labelURL->setText(
+              "<style type=\"text/css\"> a { color: #ffcc00; } </style>"
+              "<div align=\"center\">"
+              "<a href=\"https://code.google.com/p/hedgewars/wiki/HWPlaySchemeSyntax\">" +
+              tr("Click here for details") +
+              "</a></div>");
+    labelURL->setOpenExternalLinks(true);
+    gbLayout->addWidget(labelURL, 3, 1);
+
     return pageLayout;
 }
 
--- a/QTfrontend/ui/page/pagenetserver.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagenetserver.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -32,8 +32,9 @@
         QPushButton *BtnDefault;
         QPushButton *BtnShare;
         QLabel *labelSD;
+        QLabel *labelPort;
+        QLabel *labelURL;
         QLineEdit *leServerDescr;
-        QLabel *labelPort;
         QSpinBox *sbPort;
 
     protected:
--- a/QTfrontend/ui/page/pageoptions.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageoptions.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -275,11 +275,13 @@
             winLabelX->setFixedWidth(40);
             winLabelX->setAlignment(Qt::AlignCenter);
 
-            windowWidthEdit = new QLineEdit(groupGame);
-            windowWidthEdit->setValidator(new QIntValidator(this));
+            // TODO: less random max. also:
+            // make some min/max-consts, shared with engine?
+            windowWidthEdit = new QSpinBox(groupGame);
+            windowWidthEdit->setRange(640, 102400);
             windowWidthEdit->setFixedSize(55, CBResolution->height());
-            windowHeightEdit = new QLineEdit(groupGame);
-            windowHeightEdit->setValidator(new QIntValidator(this));
+            windowHeightEdit = new QSpinBox(groupGame);
+            windowHeightEdit->setRange(480, 102400);
             windowHeightEdit->setFixedSize(55, CBResolution->height());
 
             winResLayout->addWidget(windowWidthEdit, 0);
@@ -585,13 +587,19 @@
             CBLanguage = new QComboBox(groupMisc);
             groupMisc->layout()->addWidget(CBLanguage, 0, 1);
             QStringList locs = DataManager::instance().entryList("Locale", QDir::Files, QStringList("hedgewars_*.qm"));
-            CBLanguage->addItem(QComboBox::tr("(System default)"), QString(""));
+            CBLanguage->addItem(QComboBox::tr("(System default)"), QString());
             for(int i = 0; i < locs.count(); i++)
             {
-                QLocale loc(locs[i].replace(QRegExp("hedgewars_(.*)\\.qm"), "\\1"));
-                CBLanguage->addItem(QLocale::languageToString(loc.language()) + " (" + QLocale::countryToString(loc.country()) + ")", loc.name());
+                QString lname = locs[i].replace(QRegExp("hedgewars_(.*)\\.qm"), "\\1");
+                QLocale loc(lname);
+                CBLanguage->addItem(QLocale::languageToString(loc.language()) + " (" + QLocale::countryToString(loc.country()) + ")", lname);
             }
 
+            QLabel *restartNoticeLabel = new QLabel(groupMisc);
+            restartNoticeLabel->setText(QLabel::tr("This setting will be effective at next restart."));
+            groupMisc->layout()->addWidget(restartNoticeLabel, 1, 1);
+
+
             // Divider
 
             groupMisc->addDivider(); // row 1
@@ -600,14 +608,14 @@
 
             CBNameWithDate = new QCheckBox(groupMisc);
             CBNameWithDate->setText(QCheckBox::tr("Append date and time to record file name"));
-            groupMisc->layout()->addWidget(CBNameWithDate, 2, 0, 1, 2);
+            groupMisc->layout()->addWidget(CBNameWithDate, 3, 0, 1, 2);
 
             // Associate file extensions
 
             BtnAssociateFiles = new QPushButton(groupMisc);
             BtnAssociateFiles->setText(QPushButton::tr("Associate file extensions"));
             BtnAssociateFiles->setVisible(!custom_data && !custom_config);
-            groupMisc->layout()->addWidget(BtnAssociateFiles, 3, 0, 1, 2);
+            groupMisc->layout()->addWidget(BtnAssociateFiles, 4, 0, 1, 2);
         }
 
 #ifdef __APPLE__
--- a/QTfrontend/ui/page/pageoptions.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageoptions.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -77,8 +77,8 @@
         QComboBox *CBTeamName;
         IconedGroupBox *AGGroupBox;
         QComboBox *CBResolution;
-        QLineEdit *windowWidthEdit;
-        QLineEdit *windowHeightEdit;
+        QSpinBox *windowWidthEdit;
+        QSpinBox *windowHeightEdit;
         QComboBox *CBStereoMode;
         QCheckBox *CBFrontendSound;
         QCheckBox *CBFrontendMusic;
--- a/QTfrontend/ui/page/pageplayrecord.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageplayrecord.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageplayrecord.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageplayrecord.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageroomslist.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageroomslist.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,6 +28,7 @@
 #include <QGroupBox>
 #include <QMenu>
 #include <QDebug>
+#include <QSplitter>
 
 #include <QSortFilterProxyModel>
 
@@ -107,7 +108,18 @@
     topLayout->setRowStretch(1, 0);
     topLayout->setColumnStretch(3, 1);
 
+    // Rooms list and chat with splitter
+    m_splitter = new QSplitter();
+    m_splitter->setChildrenCollapsible(false);
+    pageLayout->addWidget(m_splitter, 100);
+
     // Room list
+    QWidget * roomsListWidget = new QWidget(this);
+    m_splitter->setOrientation(Qt::Vertical);
+    m_splitter->addWidget(roomsListWidget);
+
+    QVBoxLayout * roomsLayout = new QVBoxLayout(roomsListWidget);
+    roomsLayout->setMargin(0);
 
     roomsList = new RoomTableView(this);
     roomsList->setSelectionBehavior(QAbstractItemView::SelectRows);
@@ -118,7 +130,7 @@
     roomsList->setSelectionMode(QAbstractItemView::SingleSelection);
     roomsList->setStyleSheet("QTableView { border-top-left-radius: 0px; }");
     roomsList->setFocusPolicy(Qt::NoFocus);
-    pageLayout->addWidget(roomsList, 200);
+    roomsLayout->addWidget(roomsList, 200);
 
     // Room filters container
 
@@ -126,9 +138,9 @@
     filtersContainer->setMaximumWidth(800);
     filtersContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
 
-    pageLayout->addSpacing(7);
-    pageLayout->addWidget(filtersContainer, 0, Qt::AlignHCenter);
-    pageLayout->addSpacing(7);
+    roomsLayout->addSpacing(7);
+    roomsLayout->addWidget(filtersContainer, 0, Qt::AlignHCenter);
+    roomsLayout->addSpacing(7);
     
     QHBoxLayout * filterLayout = new QHBoxLayout(filtersContainer);
     filterLayout->setSpacing(0);
@@ -194,7 +206,7 @@
     // Lobby chat
 
     chatWidget = new HWChatWidget(this, false);
-    pageLayout->addWidget(chatWidget, 350);
+    m_splitter->addWidget(chatWidget);
 
     CBRules->addItem(QComboBox::tr("Any"));
 
@@ -251,6 +263,8 @@
 
 void PageRoomsList::roomSelectionChanged(const QModelIndex & current, const QModelIndex & previous)
 {
+    Q_UNUSED(previous);
+
     BtnJoin->setEnabled(current.isValid());
 }
 
@@ -732,14 +746,24 @@
 
 bool PageRoomsList::restoreHeaderState()
 {
-    if (!m_gameSettings->contains("frontend/roomslist_header"))
-        return false;
-    return roomsList->horizontalHeader()->restoreState(QByteArray::fromBase64(
-        (m_gameSettings->value("frontend/roomslist_header").toByteArray())));
+    if (m_gameSettings->contains("frontend/roomslist_splitter"))
+    {
+        m_splitter->restoreState(QByteArray::fromBase64(
+            (m_gameSettings->value("frontend/roomslist_splitter").toByteArray())));
+    }
+
+    if (m_gameSettings->contains("frontend/roomslist_header"))
+    {
+        return roomsList->horizontalHeader()->restoreState(QByteArray::fromBase64(
+            (m_gameSettings->value("frontend/roomslist_header").toByteArray())));
+    } else return false;
 }
 
 void PageRoomsList::saveHeaderState()
 {
     m_gameSettings->setValue("frontend/roomslist_header",
         QString(roomsList->horizontalHeader()->saveState().toBase64()));
+
+    m_gameSettings->setValue("frontend/roomslist_splitter",
+        QString(m_splitter->saveState().toBase64()));
 }
--- a/QTfrontend/ui/page/pageroomslist.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageroomslist.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,6 +27,7 @@
 class QTableView;
 class RoomsListModel;
 class QSortFilterProxyModel;
+class QSplitter;
 
 class RoomTableView : public QTableView
 {
@@ -101,6 +102,7 @@
         QSortFilterProxyModel * weaponsFilteredModel;
         QAction * showGamesInLobby;
         QAction * showGamesInProgress;
+        QSplitter * m_splitter;
 
         AmmoSchemeModel * ammoSchemeModel;
 
--- a/QTfrontend/ui/page/pagescheme.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagescheme.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagescheme.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagescheme.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageselectweapon.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageselectweapon.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageselectweapon.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pageselectweapon.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagesingleplayer.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagesingleplayer.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagesingleplayer.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagesingleplayer.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagetraining.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagetraining.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -118,7 +118,7 @@
     DataManager & dataMgr = DataManager::instance();
 
     // get locale
-    QSettings settings("physfs://hedgewars.ini",
+    QSettings settings(dataMgr.settingsFileName(),
                        QSettings::IniFormat);
 
     QString loc = settings.value("misc/locale", "").toString();
--- a/QTfrontend/ui/page/pagetraining.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagetraining.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagevideos.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagevideos.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -414,7 +414,7 @@
             setName(item, newName);
         }
     }
-#ifdef Q_WS_WIN
+#ifdef Q_OS_WIN
     // there is a bug in qt, QDir::rename() doesn't fail on such names but damages files
     if (newName.contains(QRegExp("[\"*:<>?\\/|]")))
     {
@@ -508,8 +508,8 @@
     else
     {
         QString path = item->path();
-        desc += tr("Date: %1\n").arg(QFileInfo(path).created().toString(Qt::DefaultLocaleLongDate));
-        desc += tr("Size: %1\n").arg(FileSizeStr(path));
+        desc += tr("Date: %1").arg(QFileInfo(path).created().toString(Qt::DefaultLocaleLongDate)) + "\n";
+        desc += tr("Size: %1").arg(FileSizeStr(path)) + "\n";
         if (item->desc.isEmpty())
         {
             // Extract description from file;
--- a/QTfrontend/ui/page/pagevideos.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/page/pagevideos.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/qaspectratiolayout.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation.
- */
-
-#include "qaspectratiolayout.h"
-
-QAspectRatioLayout::QAspectRatioLayout(QWidget* parent, int spacing) : QLayout(parent)
-{
-    init(spacing);
-}
-
-QAspectRatioLayout::QAspectRatioLayout(int spacing)
-{
-    init(spacing);
-}
-
-QAspectRatioLayout::~QAspectRatioLayout()
-{
-    delete item;
-    delete lastReceivedRect;
-    delete _geometry;
-}
-
-void QAspectRatioLayout::init(int spacing)
-{
-    item = 0;
-    lastReceivedRect = new QRect(0, 0, 0, 0);
-    _geometry = new QRect(0, 0, 0, 0);
-    setSpacing(spacing);
-}
-
-
-/* Adds item if place isn't already taken. */
-void QAspectRatioLayout::add(QLayoutItem* item)
-{
-    if(!hasItem())
-    {
-        replaceItem(item);
-    }
-}
-
-/* Adds item if place isn't already taken. */
-void QAspectRatioLayout::addItem(QLayoutItem* item)
-{
-    if(!hasItem())
-    {
-        replaceItem(item);
-    }
-}
-
-/* Adds widget if place isn't already taken. */
-void QAspectRatioLayout::addWidget(QWidget* widget)
-{
-    if(!hasItem())
-    {
-        replaceItem(new QWidgetItem(widget));
-    }
-}
-
-/* Returns the item pointer and dereferences it here. */
-QLayoutItem* QAspectRatioLayout::take()
-{
-    QLayoutItem* item = 0;
-    if(this->hasItem())
-    {
-        item = this->item;
-        this->item = 0;
-    }
-    return item;
-}
-
-/* Returns the item pointer and dereferences it here. */
-QLayoutItem* QAspectRatioLayout::takeAt(int index)
-{
-    if(index != 0)
-    {
-        return 0;
-    }
-    return this->take();
-}
-
-/* Returns the item pointer. */
-QLayoutItem* QAspectRatioLayout::itemAt(int index) const
-{
-    if(index != 0)
-    {
-        return 0;
-    }
-    if(hasItem())
-    {
-        return this->item;
-    }
-    return 0;
-}
-
-/* Checks if we have an item. */
-bool QAspectRatioLayout::hasItem() const
-{
-    return this->item != 0;
-}
-
-/* Returns the count of items which can be either 0 or 1. */
-int QAspectRatioLayout::count() const
-{
-    int returnValue = 0;
-    if(hasItem())
-    {
-        returnValue = 1;
-    }
-    return returnValue;
-}
-
-/* Replaces the item with the new and returns the old. */
-QLayoutItem* QAspectRatioLayout::replaceItem(QLayoutItem* item)
-{
-    QLayoutItem* old = 0;
-    if(this->hasItem())
-    {
-        old = this->item;
-    }
-    this->item = item;
-    setGeometry(*this->_geometry);
-    return old;
-}
-
-/* Tells which way layout expands. */
-Qt::Orientations QAspectRatioLayout::expandingDirections() const
-{
-    return Qt::Horizontal | Qt::Vertical;
-}
-
-/* Tells which size is preferred. */
-QSize QAspectRatioLayout::sizeHint() const
-{
-    return this->item->minimumSize();
-}
-
-/* Tells minimum size. */
-QSize QAspectRatioLayout::minimumSize() const
-{
-    return this->item->minimumSize();
-}
-
-/*
- * Tells if heightForWidth calculations is handled.
- * It isn't since width isn't enough to calculate
- * proper size.
- */
-bool QAspectRatioLayout::hasHeightForWidth() const
-{
-    return false;
-}
-
-/* Replaces lastReceivedRect. */
-void QAspectRatioLayout::setLastReceivedRect(const QRect& rect)
-{
-    QRect* oldRect = this->lastReceivedRect;
-    this->lastReceivedRect = new QRect(rect.topLeft(), rect.size());
-    delete oldRect;
-}
-
-/* Returns geometry */
-QRect QAspectRatioLayout::geometry()
-{
-    return QRect(*this->_geometry);
-}
-
-/* Sets geometry to given size. */
-void QAspectRatioLayout::setGeometry(const QRect& rect)
-{
-    /*
-     * We check if the item is set and
-     * if size is the same previously received.
-     * If either is false nothing is done.
-     */
-    if(!this->hasItem() ||
-            areRectsEqual(*this->lastReceivedRect, rect))
-    {
-        return;
-    }
-    /* Replace the last received rectangle. */
-    setLastReceivedRect(rect);
-    /* Calculate proper size for the item relative to the received size. */
-    QSize properSize = calculateProperSize(rect.size());
-    /* Calculate center location in the rect and with item size. */
-    QPoint properLocation = calculateCenterLocation(rect.size(), properSize);
-    /* Set items geometry */
-    this->item->setGeometry(QRect(properLocation, properSize));
-    QRect* oldRect = this->_geometry;
-    /* Cache the calculated geometry. */
-    this->_geometry = new QRect(properLocation, properSize);
-    delete oldRect;
-    /* Super classes setGeometry */
-    QLayout::setGeometry(*this->_geometry);
-}
-
-/* Takes the shortest side and creates QSize
- * with the shortest side as width and height. */
-QSize QAspectRatioLayout::calculateProperSize(QSize from) const
-{
-    QSize properSize;
-    if(from.height() * 2 < from.width())
-    {
-        properSize.setHeight(from.height() - this->margin());
-        properSize.setWidth(from.height() * 2 - this->margin());
-    }
-    else
-    {
-        properSize.setWidth(from.width() - this->margin());
-        properSize.setHeight(from.width() / 2 - this->margin());
-    }
-    return properSize;
-}
-
-/* Calculates center location from the given height and width for item size. */
-QPoint QAspectRatioLayout::calculateCenterLocation(QSize from,
-        QSize itemSize) const
-{
-    QPoint centerLocation;
-    if((from.width() - itemSize.width()) > 0)
-    {
-        centerLocation.setX((from.width() - itemSize.width())/2);
-    }
-    if((from.height() - itemSize.height()) > 0)
-    {
-        centerLocation.setY((from.height() - itemSize.height())/2);
-    }
-    return centerLocation;
-}
-
-/* Compares if two QRects are equal. */
-bool QAspectRatioLayout::areRectsEqual(const QRect& a,
-                                       const QRect& b) const
-{
-    bool result = false;
-    if(a.x() == b.x() &&
-            a.y() == b.y() &&
-            a.height() == b.height() &&
-            a.width() == b.width())
-    {
-        result = true;
-    }
-    return result;
-}
--- a/QTfrontend/ui/qaspectratiolayout.h	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation.
- */
-
-#ifndef QASPECTRATIOLAYOUT_H_
-#define QASPECTRATIOLAYOUT_H_
-
-#include <QLayout>
-#include <QPointer>
-#include <QRect>
-#include <QWidgetItem>
-#include <QLayoutItem>
-
-
-class QAspectRatioLayout : public QLayout
-{
-        Q_OBJECT
-
-    public:
-        QAspectRatioLayout(QWidget* parent, int spacing =-1);
-        QAspectRatioLayout(int spacing = -1);
-        ~QAspectRatioLayout();
-
-        /* Convenience method */
-        virtual void add(QLayoutItem* item);
-
-        /* http://doc.trolltech.com/qlayout.html#addItem */
-        virtual void addItem(QLayoutItem* item);
-        /* http://doc.trolltech.com/qlayout.html#addWidget */
-        virtual void addWidget(QWidget* widget);
-        /* http://doc.trolltech.com/qlayout.html#takeAt */
-        virtual QLayoutItem* takeAt(int index);
-        /* http://doc.trolltech.com/qlayout.html#itemAt */
-        virtual QLayoutItem* itemAt(int index) const;
-        /* http://doc.trolltech.com/qlayout.html#count */
-        virtual int count() const;
-
-        /*
-         * These are ours since we do have only one item.
-         */
-        virtual QLayoutItem* replaceItem(QLayoutItem* item);
-        virtual QLayoutItem* take();
-        virtual bool hasItem() const;
-
-        /* http://doc.trolltech.com/qlayout.html#expandingDirections */
-        virtual Qt::Orientations expandingDirections() const;
-
-        /*
-         * This method contains most of the juice of this article.
-         * http://doc.trolltech.com/qlayoutitem.html#setGeometry
-         */
-        virtual void setGeometry(const QRect& rect);
-        /* http://doc.trolltech.com/qlayoutitem.html#geometry */
-        virtual QRect geometry();
-
-        /* http://doc.trolltech.com/qlayoutitem.html#sizeHint */
-        virtual QSize sizeHint() const;
-        /* http://doc.trolltech.com/qlayout.html#minimumSize */
-        virtual QSize minimumSize() const;
-        /* http://doc.trolltech.com/qlayoutitem.html#hasHeightForWidth */
-        virtual bool hasHeightForWidth() const;
-
-    private:
-        /* Saves the last received rect. */
-        void setLastReceivedRect(const QRect& rect);
-        /* Used to initialize the object. */
-        void init(int spacing);
-        /* Calculates the maximum size for the item from the assigned size. */
-        QSize calculateProperSize(QSize from) const;
-        /* Calculates the center location from the assigned size and
-         * the items size. */
-        QPoint calculateCenterLocation(QSize from, QSize itemSize) const;
-        /* Check if two QRects are equal */
-        bool areRectsEqual(const QRect& a, const QRect& b) const;
-        /* Contains item reference */
-        QLayoutItem* item;
-        /*
-         * Used for caching so we won't do calculations every time
-         * setGeometry is called.
-         */
-        QRect* lastReceivedRect;
-        /* Contains geometry */
-        QRect* _geometry;
-
-};
-
-#endif /* QASPECTRATIOLAYOUT_H_ */
--- a/QTfrontend/ui/widget/FreqSpinBox.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/FreqSpinBox.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/FreqSpinBox.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/FreqSpinBox.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/HistoryLineEdit.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/HistoryLineEdit.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/HistoryLineEdit.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/HistoryLineEdit.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SmartLineEdit.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/SmartLineEdit.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SmartLineEdit.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/SmartLineEdit.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SquareLabel.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/SquareLabel.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SquareLabel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/SquareLabel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/about.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/about.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -52,11 +52,8 @@
     QLabel *imageLabel = new QLabel;
     QImage image(":/res/Hedgehog.png");
     imageLabel->setPixmap(QPixmap::fromImage(image));
-    imageLabel->setScaledContents(true);
-    imageLabel->setMinimumWidth(2.8);
-    imageLabel->setMaximumWidth(280);
-    imageLabel->setMinimumHeight(30);
-    imageLabel->setMaximumHeight(300);
+    imageLabel->setFixedWidth(273);
+    imageLabel->setFixedHeight(300);
 
     leftLayout->addWidget(imageLabel, 0, Qt::AlignHCenter);
 
@@ -113,6 +110,7 @@
         .arg(PHYSFS_VER_PATCH));
 
     QLabel * lblLibInfo = new QLabel();
+    lblLibInfo->setOpenExternalLinks(true);
     lblLibInfo->setText(libinfo);
     lblLibInfo->setWordWrap(true);
     lblLibInfo->setMaximumWidth(280);
--- a/QTfrontend/ui/widget/about.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/about.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/bgwidget.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/bgwidget.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/bgwidget.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/bgwidget.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/chatwidget.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/chatwidget.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -37,7 +37,7 @@
 #include "hwconsts.h"
 #include "gameuiconfig.h"
 #include "playerslistmodel.h"
-
+#include "HWApplication.h"
 #include "chatwidget.h"
 
 
@@ -176,7 +176,7 @@
     QWidget(parent),
     mainLayout(this)
 {
-    this->gameSettings = gameSettings;
+    this->gameSettings = NULL;
     this->notify = notify;
 
     m_isAdmin = false;
@@ -295,9 +295,9 @@
 
 void HWChatWidget::linkClicked(const QUrl & link)
 {
-    if (link.scheme() == "http")
+    if ((link.scheme() == "http") or (link.scheme() == "https"))
         QDesktopServices::openUrl(link);
-    if (link.scheme() == "hwnick")
+    else if (link.scheme() == "hwnick")
     {
         // decode nick
         QString nick = QString::fromUtf8(QByteArray::fromBase64(link.encodedQuery()));
@@ -368,15 +368,43 @@
     return QString("<span class=\"nick\">%1</span>").arg(Qt::escape(nickname));
 }
 
+const QRegExp HWChatWidget::URLREGEXP = QRegExp("(http(s)?://)?(www\\.)?((hedgewars\\.org|code\\.google\\.com|googlecode\\.com|hh\\.unit22\\.org)(/[^ ]*)?)");
 
-void HWChatWidget::onChatString(const QString& str)
+bool HWChatWidget::containsHighlight(const QString & sender, const QString & message)
 {
-    onChatString("", str);
+    if ((sender != m_userNick) && (!m_userNick.isEmpty()))
+    {
+        QString lcStr = message.toLower();
+
+        foreach (const QRegExp & hl, m_highlights)
+        {
+            if (lcStr.contains(hl))
+                return true;
+        }
+    }
+    return false;
 }
 
-const QRegExp HWChatWidget::URLREGEXP = QRegExp("(http://)?(www\\.)?(hedgewars\\.org(/[^ ]*)?)");
+QString HWChatWidget::messageToHTML(const QString & message)
+{
+    QString formattedStr = Qt::escape(message);
+    // link some urls
+    formattedStr = formattedStr.replace(URLREGEXP, "<a href=\"http\\2://\\4\">\\4</a>");
+    return formattedStr;
+}
 
-void HWChatWidget::onChatString(const QString& nick, const QString& str)
+void HWChatWidget::onChatAction(const QString & nick, const QString & action)
+{
+    printChatString(nick, "* " + linkedNick(nick) + " " + messageToHTML(action), "Action", containsHighlight(nick, action));
+}
+
+void HWChatWidget::onChatMessage(const QString & nick, const QString & message)
+{
+    printChatString(nick, linkedNick(nick) + ": " + messageToHTML(message), "Chat", containsHighlight(nick, message));
+}
+
+void HWChatWidget::printChatString(
+    const QString & nick, const QString & str, const QString & cssClassPart, bool highlight)
 {
     QSortFilterProxyModel * playersSortFilterModel = qobject_cast<QSortFilterProxyModel *>(chatNicks->model());
     if(!playersSortFilterModel)
@@ -387,58 +415,15 @@
     if(!players)
         return;
 
-    if (!nick.isEmpty())
-    {
-        // don't show chat lines that are from ignored nicks
-        if (players->isFlagSet(nick, PlayersListModel::Ignore))
-            return;
-    }
+    // don't show chat lines that are from ignored nicks
+    if (players->isFlagSet(nick, PlayersListModel::Ignore))
+        return;
 
     bool isFriend = (!nick.isEmpty()) && players->isFlagSet(nick, PlayersListModel::Friend);
 
-    QString formattedStr = Qt::escape(str.mid(1));
-    // make hedgewars.org urls actual links
-    formattedStr = formattedStr.replace(URLREGEXP, "<a href=\"http://\\3\">\\3</a>");
-
-    // link the nick
-    if(!nick.isEmpty())
-        formattedStr.replace("|nick|", linkedNick(nick));
-
-    QString cssClass("msg_UserChat");
+    QString cssClass = (isFriend ? "msg_Friend" : "msg_User") + cssClassPart;
 
-    // check first character for color code and set color properly
-    char c = str[0].toAscii();
-    switch (c)
-    {
-        case 3:
-            cssClass = (isFriend ? "msg_FriendJoin" : "msg_UserJoin");
-            break;
-        case 2:
-            cssClass = (isFriend ? "msg_FriendAction" : "msg_UserAction");
-            break;
-        default:
-            if (isFriend)
-                cssClass = "msg_FriendChat";
-    }
-
-    bool isHL = false;
-
-    if ((c != 3) && (!nick.isEmpty()) &&
-            (nick != m_userNick) && (!m_userNick.isEmpty()))
-    {
-        QString lcStr = str.toLower();
-
-        foreach (const QRegExp & hl, m_highlights)
-        {
-            if (lcStr.contains(hl))
-            {
-                isHL = true;
-                break;
-            }
-        }
-    }
-
-    addLine(cssClass, formattedStr, isHL);
+    addLine(cssClass, str, highlight);
 }
 
 void HWChatWidget::addLine(const QString & cssClass, QString line, bool isHighlight)
@@ -464,6 +449,7 @@
     {
         line = QString("<span class=\"highlight\">%1</span>").arg(line);
         SDLInteraction::instance().playSoundFile(m_hilightSound);
+        HWApplication::alert(this, 800);
     }
 
     chatStrings.append(line);
@@ -512,6 +498,9 @@
 
     emit nickCountUpdate(chatNicks->model()->rowCount());
 
+    if (!isIgnored)
+        printChatString(nick, QString("*** ") + tr("%1 has joined").arg(linkedNick(nick)), "Join", false);
+
     if (notifyNick && notify && (m_helloSounds.size() > 0))
     {
         SDLInteraction::instance().playSoundFile(
@@ -521,9 +510,19 @@
 
 void HWChatWidget::nickRemoved(const QString& nick)
 {
+    nickRemoved(nick, "");
+}
+
+void HWChatWidget::nickRemoved(const QString& nick, const QString & message)
+{
     chatEditLine->removeNickname(nick);
 
     emit nickCountUpdate(chatNicks->model()->rowCount());
+
+    if (message.isEmpty())
+        printChatString(nick, QString("*** ") + tr("%1 has left").arg(linkedNick(nick)), "Leave", false);
+    else
+        printChatString(nick, QString("*** ") + tr("%1 has left (%2)").arg(linkedNick(nick)).arg(messageToHTML(message)), "Leave", false);
 }
 
 void HWChatWidget::clear()
@@ -582,6 +581,19 @@
     }
 }
 
+void HWChatWidget::onPlayerInfo(
+            const QString & nick,
+            const QString & ip,
+            const QString & version,
+            const QString & roomInfo)
+{
+    addLine("msg_PlayerInfo", QString(" >>> %1 - <span class=\"ipaddress\">%2</span> <span class=\"version\">%3</span> <span class=\"location\">%4</span>")
+        .arg(linkedNick(nick))
+        .arg(ip)
+        .arg(version)
+        .arg(roomInfo));
+}
+
 void HWChatWidget::onKick()
 {
     QModelIndexList mil = chatNicks->selectionModel()->selectedRows();
--- a/QTfrontend/ui/widget/chatwidget.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/chatwidget.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -86,14 +86,39 @@
         void beforeContentAdd();
         void afterContentAdd();
 
+        /**
+         * @brief Checks whether the message contains a highlight.
+         * @param sender the sender of the message
+         * @param message the message
+         * @return true if the sender is somebody else and the message contains a highlight, otherwise false
+         */
+        bool containsHighlight(const QString & sender, const QString & message);
+        /**
+         * @brief Escapes HTML chars in the message and converts URls to HTML links.
+         * @param message the message to be converted to HTML
+         * @return the HTML message
+         */
+        QString messageToHTML(const QString & message);
+        void printChatString(
+            const QString & nick,
+            const QString & str,
+            const QString & cssClassPart,
+            bool highlight);
+
     public slots:
-        void onChatString(const QString& str);
-        void onChatString(const QString& nick, const QString& str);
+        void onChatAction(const QString & nick, const QString & str);
+        void onChatMessage(const QString & nick, const QString & str);
         void onServerMessage(const QString& str);
         void nickAdded(const QString& nick, bool notifyNick);
         void nickRemoved(const QString& nick);
+        void nickRemoved(const QString& nick, const QString& message);
         void clear();
         void adminAccess(bool);
+        void onPlayerInfo(
+            const QString & nick,
+            const QString & ip,
+            const QString & version,
+            const QString & roomInfo);
 
     signals:
         void chatLine(const QString& str);
--- a/QTfrontend/ui/widget/databrowser.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/databrowser.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/databrowser.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/databrowser.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/drawmapwidget.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/drawmapwidget.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -62,8 +62,43 @@
 {
     Q_UNUSED(event);
 
+    int height = this->height();
+    int width = this->width();
+
+    if ((m_scene->height() > 0) && (m_scene->width() > 0) && (height > 0))
+    {
+        qreal saspect = m_scene->width() / m_scene->height();
+
+        qreal h = height;
+        qreal w = width;
+        qreal waspect = w / h;
+
+        if (waspect < saspect)
+        {
+            h = w / saspect;
+        }
+        else if (waspect > saspect)
+        {
+            w = saspect * h;
+        }
+
+        int fixedh = (int)h;
+        int fixedw = (int)w;
+
+        if (ui->graphicsView->width() != fixedw)
+        {
+            ui->graphicsView->setFixedWidth(fixedw);
+        }
+
+        if (ui->graphicsView->height() != fixedh)
+        {
+            ui->graphicsView->setFixedHeight(fixedh);
+        }
+
+    }
+
     if(ui->graphicsView && ui->graphicsView->scene())
-        ui->graphicsView->fitInView(ui->graphicsView->scene()->sceneRect(), Qt::KeepAspectRatio);
+        ui->graphicsView->fitInView(m_scene->sceneRect(), Qt::KeepAspectRatio);
 }
 
 void DrawMapWidget::showEvent(QShowEvent * event)
--- a/QTfrontend/ui/widget/drawmapwidget.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/drawmapwidget.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,7 +25,6 @@
 #include <QGraphicsView>
 #include <QLabel>
 
-#include "qaspectratiolayout.h"
 #include "drawmapscene.h"
 
 
@@ -61,12 +60,13 @@
                 QVBoxLayout * vbox = new QVBoxLayout(drawMapWidget);
                 vbox->setMargin(0);
                 lblPoints = new QLabel("0", drawMapWidget);
-                vbox->addWidget(lblPoints);
-                QAspectRatioLayout * arLayout = new QAspectRatioLayout();
-                arLayout->setMargin(0);
+                QLayout * arLayout = new QVBoxLayout();
+                arLayout->setAlignment(Qt::AlignCenter);
                 vbox->addLayout(arLayout);
 
                 graphicsView = new DrawMapView(drawMapWidget);
+                graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+                graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                 arLayout->addWidget(graphicsView);
 
                 retranslateUi(drawMapWidget);
--- a/QTfrontend/ui/widget/feedbackdialog.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/feedbackdialog.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -34,7 +34,7 @@
 
 #include <string>
 
-#ifdef Q_WS_WIN
+#ifdef Q_OS_WIN
 #define WINVER 0x0500
 #include <windows.h>
 #else
@@ -42,8 +42,11 @@
 #include <sys/types.h>
 #endif
 
-#ifdef Q_WS_MAC
+#ifdef Q_OS_MAC
 #include <sys/sysctl.h>
+#ifndef _SC_NPROCESSORS_ONLN
+#define _SC_NPROCESSORS_ONLN 58
+#endif
 #endif
 
 #include <stdint.h>
@@ -74,16 +77,22 @@
     QHBoxLayout * systemLayout = new QHBoxLayout();
 
     info = new QLabel();
-    info->setText(
+    info->setText(QString(
         "<style type=\"text/css\">"
         "a { color: #fc0; }"
         "b { color: #0df; }"
         "</style>"
-        "<div align=\"center\"><h1>Please give us feedback!</h1>"
-        "<h3>We are always happy about suggestions, ideas, or bug reports.<h3>"
-        "<h4>Your email address is optional, but we may want to contact you.<h4>"
-        "</div>"
+        "<div align=\"center\"><h1>%1</h1>"
+        "<h3>%2<h3>"
+        "<h4>%3 <a href=\"http://code.google.com/p/hedgewars/wiki/KnownBugs\">known bugs</a><h4>"
+        "<h4>%4<h4>"
+        "</div>")
+        .arg(tr("Send us feedback!"))
+        .arg(tr("We are always happy about suggestions, ideas, or bug reports."))
+        .arg(tr("If you found a bug, you can see if it's already been reported here: "))
+        .arg(tr("Your email address is optional, but necessary if you want us to get back at you."))
     );
+    info->setOpenExternalLinks(true);
     pageLayout->addWidget(info);
 
     QVBoxLayout * summaryEmailLayout = new QVBoxLayout();
@@ -198,7 +207,7 @@
     QString processor_name = "Processor: ";
 
     // platform specific code
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
     number_of_cores += QString::number(sysconf(_SC_NPROCESSORS_ONLN)) + "\n";
 
     uint64_t memsize;
@@ -231,19 +240,21 @@
         default: os_version += "\"Unknown version\"\n"; break;
     }
 #endif
-#ifdef Q_WS_WIN
+#ifdef Q_OS_WIN
     SYSTEM_INFO sysinfo;
     GetSystemInfo(&sysinfo);
     number_of_cores += QString::number(sysinfo.dwNumberOfProcessors) + "\n";
     MEMORYSTATUSEX status;
     status.dwLength = sizeof(status);
     GlobalMemoryStatusEx(&status);
-    total_ram += QString::number(status.ullTotalPhys) + "\n";
+    total_ram += QString::number(status.ullTotalPhys/1024/1024) + " MB\n";
 
-    switch(QSysInfo::WinVersion())
+    switch(QSysInfo::windowsVersion())
     {
+        case QSysInfo::WV_NT: os_version += "Windows NT\n"; break;
         case QSysInfo::WV_2000: os_version += "Windows 2000\n"; break;
         case QSysInfo::WV_XP: os_version += "Windows XP\n"; break;
+        case QSysInfo::WV_2003: os_version += "Windows Server 2003\n"; break;
         case QSysInfo::WV_VISTA: os_version += "Windows Vista\n"; break;
         case QSysInfo::WV_WINDOWS7: os_version += "Windows 7\n"; break;
         //case QSysInfo::WV_WINDOWS8: os_version += "Windows 8\n"; break; //QT 5+
@@ -251,7 +262,7 @@
     }
     kernel_line += "Windows kernel\n";
 #endif
-#ifdef Q_WS_X11
+#ifdef Q_OS_X11
     number_of_cores += QString::number(sysconf(_SC_NPROCESSORS_ONLN)) + "\n";
     long pages = sysconf(_SC_PHYS_PAGES),
 /*
@@ -260,13 +271,13 @@
 #else
          available_pages = 0,
 #endif*/
-         page_size = sysconf(_SC_PAGE_SIZE);
-    total_ram += QString::number(pages * page_size) + "\n";
+    page_size = sysconf(_SC_PAGE_SIZE);
+    total_ram += QString::number(pages*page_size/1024/1024) + " MB\n";
     os_version += "GNU/Linux or BSD\n";
 #endif
 
     // uname -a
-#if defined(Q_WS_X11) || defined(Q_WS_MACX)
+#if defined(Q_OS_X11) || defined(Q_OS_MAC)
     QProcess *process = new QProcess();
     QStringList arguments = QStringList("-a");
     process->start("uname", arguments);
@@ -275,7 +286,7 @@
     delete process;
 #endif
 
-#if defined(__i386__) || defined(__x86_64__)
+#if (!defined(Q_OS_MAC) && defined(__i386__)) || defined(__x86_64__)
     // cpu info
     quint32 registers[4];
     quint32 i;
@@ -450,7 +461,7 @@
     QString email = this->email->text();
     QString captchaCode = this->captcha_code->text();
     QString captchaID = QString::number(this->captchaID);
-    QString version = "HedgewarsFoundation-Hedgewars-v" + *cVersionString + "_r" + 
+    QString version = "HedgewarsFoundation-Hedgewars-v" + *cVersionString + "_r" +
                        *cRevisionString + "|" + *cHashString;
 
     if (summary.isEmpty() || description.isEmpty())
--- a/QTfrontend/ui/widget/feedbackdialog.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/feedbackdialog.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/fpsedit.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/fpsedit.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/fpsedit.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/fpsedit.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/frameTeam.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/frameTeam.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/frameTeam.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/frameTeam.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/gamecfgwidget.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/gamecfgwidget.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -599,7 +599,7 @@
             GameSchemes->setEnabled(false);
             GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
         }
-        else
+        else if (m_master)
         {
             GameSchemes->setEnabled(true);
             int num = GameSchemes->findText(scheme);
@@ -614,7 +614,7 @@
             WeaponsName->setEnabled(false);
             WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
         }
-        else
+        else if (m_master)
         {
             WeaponsName->setEnabled(true);
             int num = WeaponsName->findText(weapons);
--- a/QTfrontend/ui/widget/gamecfgwidget.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/gamecfgwidget.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatbutton.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/hatbutton.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatbutton.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/hatbutton.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatprompt.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/hatprompt.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatprompt.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/hatprompt.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hedgehogerWidget.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/hedgehogerWidget.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hedgehogerWidget.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/hedgehogerWidget.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/igbox.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/igbox.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/igbox.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/igbox.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/keybinder.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/keybinder.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/keybinder.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/keybinder.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/lineeditcursor.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/lineeditcursor.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/lineeditcursor.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/lineeditcursor.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/mapContainer.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/mapContainer.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -75,8 +75,11 @@
 
     /* Layouts */
 
-    QHBoxLayout * typeLayout = new QHBoxLayout();
-    QHBoxLayout * seedLayout = new QHBoxLayout();
+    QWidget * topWidget = new QWidget();
+    QHBoxLayout * topLayout = new QHBoxLayout(topWidget);
+    topWidget->setContentsMargins(0, 0, 0, 0);
+    topLayout->setContentsMargins(0, 0, 0, 0);
+
     QHBoxLayout * twoColumnLayout = new QHBoxLayout();
     QVBoxLayout * leftLayout = new QVBoxLayout();
     QVBoxLayout * rightLayout = new QVBoxLayout();
@@ -84,15 +87,13 @@
     twoColumnLayout->addStretch(1);
     twoColumnLayout->addLayout(rightLayout, 0);
     QVBoxLayout * drawnControls = new QVBoxLayout();
-    leftLayout->addLayout(typeLayout, 0);
-    rightLayout->addLayout(seedLayout, 0);
 
     /* Map type combobox */
 
-    typeLayout->setSpacing(10);
-    typeLayout->addWidget(new QLabel(tr("Map type:")), 0);
+    topLayout->setSpacing(10);
+    topLayout->addWidget(new QLabel(tr("Map type:")), 0);
     cType = new QComboBox(this);
-    typeLayout->addWidget(cType, 1);
+    topLayout->addWidget(cType, 1);
     cType->insertItem(0, tr("Image map"), MapModel::StaticMap);
     cType->insertItem(1, tr("Mission map"), MapModel::MissionMap);
     cType->insertItem(2, tr("Hand-drawn"), MapModel::HandDrawnMap);
@@ -103,7 +104,7 @@
 
     /* Randomize button */
 
-    seedLayout->addStretch(1);
+    topLayout->addStretch(1);
     const QIcon& lp = QIcon(":/res/dice.png");
     QSize sz = lp.actualSize(QSize(65535, 65535));
     btnRandomize = new QPushButton();
@@ -117,15 +118,16 @@
     m_childWidgets << btnRandomize;
     btnRandomize->setStyleSheet("padding: 5px;");
     btnRandomize->setFixedHeight(cType->height());
-    seedLayout->addWidget(btnRandomize, 1);
+    topLayout->addWidget(btnRandomize, 1);
 
     /* Seed button */
+
     btnSeed = new QPushButton(parentWidget()->parentWidget());
     btnSeed->setText(tr("Seed"));
     btnSeed->setStyleSheet("padding: 5px;");
     btnSeed->setFixedHeight(cType->height());
     connect(btnSeed, SIGNAL(clicked()), this, SLOT(showSeedPrompt()));
-    seedLayout->addWidget(btnSeed, 0);
+    topLayout->addWidget(btnSeed, 0);
 
     /* Map preview label */
 
@@ -137,6 +139,7 @@
 
     mapPreview = new QPushButton(this);
     mapPreview->setObjectName("mapPreview");
+    mapPreview->setFlat(true);
     mapPreview->setFixedSize(256, 128);
     mapPreview->setContentsMargins(0, 0, 0, 0);
     leftLayout->addWidget(mapPreview, 0);
@@ -240,13 +243,15 @@
     /* Theme chooser */
 
     btnTheme = new QPushButton();
+    btnTheme->setFlat(true);
     connect(btnTheme, SIGNAL(clicked()), this, SLOT(showThemePrompt()));
     m_childWidgets << btnTheme;
     bottomLeftLayout->addWidget(btnTheme, 0);
 
     /* Add everything to main layout */
 
-    mainLayout.addLayout(twoColumnLayout, 0);
+    mainLayout.addWidget(topWidget, 0);
+    mainLayout.addLayout(twoColumnLayout, 1);
 
     /* Set defaults */
 
@@ -463,7 +468,7 @@
 void HWMapContainer::setRandomMap()
 {
     if (!m_master) return;
-    
+
     setRandomSeed();
     switch(m_mapInfo.type)
     {
@@ -796,7 +801,7 @@
     btnTheme->setFixedHeight(64);
     btnTheme->setIconSize(iconSize);
     btnTheme->setIcon(icon);
-    btnTheme->setText(tr("Theme: ") + current.data(Qt::DisplayRole).toString());
+    btnTheme->setText(tr("Theme: %1").arg(current.data(Qt::DisplayRole).toString()));
     updateThemeButtonSize();
 }
 
@@ -927,5 +932,5 @@
 
     m_theme = name;
     btnTheme->setIcon(QIcon());
-    btnTheme->setText(tr("Theme: ") + name);
+    btnTheme->setText(tr("Theme: %1").arg(name));
 }
--- a/QTfrontend/ui/widget/mapContainer.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/mapContainer.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/qpushbuttonwithsound.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/qpushbuttonwithsound.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/qpushbuttonwithsound.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/qpushbuttonwithsound.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/roomnameprompt.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/roomnameprompt.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -62,7 +62,7 @@
     QPushButton * btnOkay = new QPushButton(tr("Create room"));
     connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
     connect(btnOkay, SIGNAL(clicked()), this, SLOT(accept()));
-#ifdef Q_WS_MAC
+#ifdef Q_OS_MAC
         buttonLayout->addWidget(btnCancel);
         buttonLayout->addWidget(btnOkay);
 #else
--- a/QTfrontend/ui/widget/roomnameprompt.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/roomnameprompt.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/seedprompt.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/seedprompt.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -62,7 +62,7 @@
         QPushButton * btnOkay = new QPushButton(tr("Set seed"));
         connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
         connect(btnOkay, SIGNAL(clicked()), this, SLOT(accept()));
-#ifdef Q_WS_MAC
+#ifdef Q_OS_MAC
         buttonLayout->addWidget(btnCancel);
         buttonLayout->addWidget(btnOkay);
 #else
--- a/QTfrontend/ui/widget/seedprompt.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/seedprompt.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/selectWeapon.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/selectWeapon.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/selectWeapon.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/selectWeapon.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/teamselect.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/teamselect.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -38,7 +38,9 @@
         curPlayingTeams.push_back(team);
         connect(framePlaying->getTeamWidget(team), SIGNAL(hhNmChanged(const HWTeam&)),
                 this, SLOT(hhNumChanged(const HWTeam&)));
+        blockSignals(true);
         dynamic_cast<TeamShowWidget*>(framePlaying->getTeamWidget(team))->hhNumChanged();
+        blockSignals(false);
         connect(framePlaying->getTeamWidget(team), SIGNAL(teamColorChanged(const HWTeam&)),
                 this, SLOT(proxyTeamColorChanged(const HWTeam&)));
     }
@@ -210,7 +212,9 @@
     {
         connect(framePlaying->getTeamWidget(team), SIGNAL(hhNmChanged(const HWTeam&)),
                 this, SLOT(hhNumChanged(const HWTeam&)));
+        blockSignals(true);
         dynamic_cast<TeamShowWidget*>(framePlaying->getTeamWidget(team))->hhNumChanged();
+        blockSignals(false);
         connect(framePlaying->getTeamWidget(team), SIGNAL(teamColorChanged(const HWTeam&)),
                 this, SLOT(proxyTeamColorChanged(const HWTeam&)));
         emit teamColorChanged(((TeamShowWidget*)framePlaying->getTeamWidget(team))->getTeam());
@@ -258,12 +262,16 @@
 
     // Add notice about number of required teams.
     numTeamNotice = new QLabel(tr("At least two teams are required to play!"));
+    numTeamNotice->setWordWrap(true);
     mainLayout.addWidget(numTeamNotice);
 
     QPalette p;
     p.setColor(QPalette::Window, QColor(0x00, 0x00, 0x00));
     addScrArea(framePlaying, p.color(QPalette::Window).light(105), 150);
     addScrArea(frameDontPlaying, p.color(QPalette::Window).dark(105), 0);
+
+    this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+    this->setMinimumWidth(200);
 }
 
 void TeamSelWidget::setAcceptOuter(bool acceptOuter)
--- a/QTfrontend/ui/widget/teamselect.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/teamselect.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/teamselhelper.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/teamselhelper.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/teamselhelper.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/teamselhelper.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/themeprompt.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/themeprompt.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/themeprompt.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/themeprompt.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/togglebutton.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/togglebutton.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/togglebutton.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/togglebutton.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/vertScrollArea.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/vertScrollArea.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/vertScrollArea.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/vertScrollArea.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/weaponItem.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/weaponItem.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/weaponItem.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui/widget/weaponItem.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui_hwform.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui_hwform.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -55,8 +55,8 @@
     HWForm->resize(QSize(640, 480).expandedTo(HWForm->minimumSizeHint()));
     HWForm->setMinimumSize(QSize(720, 450));
     QString title = QMainWindow::tr("Hedgewars %1").arg(*cVersionString);
-#ifdef DEBUG
-    title += QMainWindow::tr("-r%1 (%2)").arg(*cRevisionString, *cHashString);
+#ifdef QT_DEBUG
+    title += QString("-r%1 (%2)").arg(*cRevisionString, *cHashString);
 #endif
     HWForm->setWindowTitle(title);
     centralWidget = new QWidget(HWForm);
--- a/QTfrontend/ui_hwform.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/ui_hwform.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/DataManager.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/DataManager.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,8 @@
 #include <QStringList>
 #include <QStandardItemModel>
 #include <QFileInfo>
+#include <QSettings>
+#include <QColor>
 
 #include "hwconsts.h"
 #include "HWApplication.h"
@@ -162,6 +164,41 @@
     return m_bindsModel;
 }
 
+QString DataManager::settingsFileName()
+{
+    if(m_settingsFileName.isEmpty())
+    {
+        QFile settingsFile("physfs://settings.ini");
+
+        if(!settingsFile.exists())
+        {
+            QFile oldSettingsFile("physfs://hedgewars.ini");
+
+            settingsFile.open(QFile::WriteOnly);
+            settingsFile.close();
+
+            if(oldSettingsFile.exists())
+            {
+                QSettings sOld(oldSettingsFile.fileName(), QSettings::IniFormat);
+                QSettings sNew(settingsFile.fileName(), QSettings::IniFormat);
+                sNew.setIniCodec("UTF-8");
+
+                foreach(const QString & key, sOld.allKeys())
+                {
+                    if(key.startsWith("colors/color"))
+                        sNew.setValue(key, sOld.value(key).value<QColor>().name());
+                    else
+                        sNew.setValue(key, sOld.value(key));
+                }
+            }
+        }
+
+        m_settingsFileName = settingsFile.fileName();
+    }
+
+    return m_settingsFileName;
+}
+
 void DataManager::reload()
 {
     // removed for now (also code was a bit unclean, could lead to segfault if
--- a/QTfrontend/util/DataManager.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/DataManager.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -117,6 +117,8 @@
         QStandardItemModel * colorsModel();
         QStandardItemModel * bindsModel();
 
+        QString settingsFileName();
+
         static bool ensureFileExists(const QString & fileName);
 
     public slots:
@@ -148,6 +150,7 @@
         ThemeModel * m_themeModel; ///< theme model instance
         QStandardItemModel * m_colorsModel;
         QStandardItemModel * m_bindsModel;
+        QString m_settingsFileName;
 };
 
 #endif // HEDGEWARS_DATAMANAGER_H
--- a/QTfrontend/util/FileEngine.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/FileEngine.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -54,7 +54,7 @@
     }
 
     if (!m_handle) {
-        qWarning("[PHYSFS] Failed to open %s, reason: %s", m_fileName.toUtf8().constData(), PHYSFS_getLastError());
+        qWarning(QString("[PHYSFS] Failed to open %1, reason: %2").arg(m_fileName).arg(FileEngineHandler::errorStr()).toLocal8Bit().constData());
         return false;
     }
 
@@ -310,6 +310,8 @@
 FileEngineHandler::FileEngineHandler(char *argv0)
 {
     PHYSFS_init(argv0);
+
+    qDebug(QString("[PHYSFS] Init: %1").arg(errorStr()).toLocal8Bit().constData());
 }
 
 FileEngineHandler::~FileEngineHandler()
@@ -328,16 +330,19 @@
 void FileEngineHandler::mount(const QString &path)
 {
     PHYSFS_mount(path.toUtf8().constData(), NULL, 0);
+    qDebug(QString("[PHYSFS] Mounting '%1' to '/': %2").arg(path).arg(errorStr()).toLocal8Bit().constData());
 }
 
 void FileEngineHandler::mount(const QString & path, const QString & mountPoint)
 {
     PHYSFS_mount(path.toUtf8().constData(), mountPoint.toUtf8().constData(), 0);
+    qDebug(QString("[PHYSFS] Mounting '%1' to '%2': %3").arg(path).arg(mountPoint).arg(errorStr()).toLocal8Bit().data());
 }
 
 void FileEngineHandler::setWriteDir(const QString &path)
 {
     PHYSFS_setWriteDir(path.toUtf8().constData());
+    qDebug(QString("[PHYSFS] Setting write dir to '%1': %2").arg(path).arg(errorStr()).toLocal8Bit().data());
 }
 
 void FileEngineHandler::mountPacks()
@@ -345,6 +350,12 @@
     hedgewarsMountPackages();
 }
 
+QString FileEngineHandler::errorStr()
+{
+    QString s = QString::fromUtf8(PHYSFS_getLastError());
+    return s.isEmpty() ? "ok" : s;
+}
+
 
 FileEngineIterator::FileEngineIterator(QDir::Filters filters, const QStringList &nameFilters, const QStringList &entries)
     : QAbstractFileEngineIterator(filters, nameFilters)
--- a/QTfrontend/util/FileEngine.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/FileEngine.h	Thu Jun 13 22:27:23 2013 +0200
@@ -71,6 +71,7 @@
         static void mount(const QString & path, const QString & mountPoint);
         static void setWriteDir(const QString & path);
         static void mountPacks();
+        static QString errorStr();
 
 //    private:
         static const QString scheme;
--- a/QTfrontend/util/LibavInteraction.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/LibavInteraction.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -278,7 +278,7 @@
         return "";
 
     int s = float(pContext->duration)/AV_TIME_BASE;
-    QString desc = QString(tr("Duration: %1m %2s\n")).arg(s/60).arg(s%60);
+    QString desc = tr("Duration: %1m %2s").arg(s/60).arg(s%60) + "\n";
     for (int i = 0; i < (int)pContext->nb_streams; i++)
     {
         AVStream* pStream = pContext->streams[i];
@@ -290,11 +290,11 @@
 
         if (pCodec->codec_type == AVMEDIA_TYPE_VIDEO)
         {
-            desc += QString(tr("Video: %1x%2, ")).arg(pCodec->width).arg(pCodec->height);
+            desc += QString(tr("Video: %1x%2")).arg(pCodec->width).arg(pCodec->height) + ", ";
             if (pStream->avg_frame_rate.den)
             {
                 float fps = float(pStream->avg_frame_rate.num)/pStream->avg_frame_rate.den;
-                desc += QString(tr("%1 fps, ")).arg(fps, 0, 'f', 2);
+                desc += QString(tr("%1 fps")).arg(fps, 0, 'f', 2) + ", ";
             }
         }
         else if (pCodec->codec_type == AVMEDIA_TYPE_AUDIO)
--- a/QTfrontend/util/LibavInteraction.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/LibavInteraction.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/MessageDialog.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/MessageDialog.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,23 +17,39 @@
  */
 
 #include "MessageDialog.h"
+#include "HWApplication.h"
+
+int MessageDialog::ShowFatalMessage(const QString & msg, QWidget * parent)
+{
+    return ShowMessage(QMessageBox::tr("Hedgewars - Error"),
+                       msg,
+                       QMessageBox::Critical,
+                       parent);
+}
 
 int MessageDialog::ShowErrorMessage(const QString & msg, QWidget * parent)
 {
-    return ShowMessage(msg, QMessageBox::tr("Hedgewars - Warning"), QMessageBox::Warning, parent);
+    return ShowMessage(QMessageBox::tr("Hedgewars - Warning"),
+                       msg,
+                       QMessageBox::Warning,
+                       parent);
 }
 
 int MessageDialog::ShowInfoMessage(const QString & msg, QWidget * parent)
 {
-    return ShowMessage(msg, QMessageBox::tr("Hedgewars - Information"), QMessageBox::Information, parent);
+    return ShowMessage(QMessageBox::tr("Hedgewars - Information"),
+                       msg,
+                       QMessageBox::Information,
+                       parent);
 }
 
-int MessageDialog::ShowMessage(const QString & msg, const QString & title, QMessageBox::Icon icon, QWidget * parent)
+int MessageDialog::ShowMessage(const QString & title, const QString & msg, QMessageBox::Icon icon, QWidget * parent)
 {
-    QMessageBox msgMsg(parent);
+    QMessageBox msgMsg(parent ? parent : HWApplication::activeWindow());
+    msgMsg.setWindowTitle(title != NULL ? title : "Hedgewars");
+    msgMsg.setText(msg);
     msgMsg.setIcon(icon);
-    msgMsg.setWindowTitle(title.isEmpty() ? QMessageBox::tr("Hedgewars") : title);
-    msgMsg.setText(msg);
     msgMsg.setWindowModality(Qt::WindowModal);
+
     return msgMsg.exec();
 }
--- a/QTfrontend/util/MessageDialog.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/MessageDialog.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,7 +19,6 @@
 #ifndef MESSAGEDIALOG_H
 #define MESSAGEDIALOG_H
 
-#include <QString>
 #include <QMessageBox>
 
 class QWidget;
@@ -27,9 +26,18 @@
 class MessageDialog
 {
     public:
+        static int ShowFatalMessage(const QString & msg, QWidget * parent = 0);
         static int ShowErrorMessage(const QString & msg, QWidget * parent = 0);
         static int ShowInfoMessage(const QString & msg, QWidget * parent = 0);
-        static int ShowMessage(const QString & msg, const QString & title = QString(), QMessageBox::Icon icon = QMessageBox::NoIcon, QWidget * parent = 0);
+        /**
+         * @brief Displays a message.
+         * @param title message title or <code>NULL</code> if no/default title
+         * @param msg message to display
+         * @param icon (optional) icon to be displayed next to the message
+         * @param parent parent Widget
+         * @return a QMessageBox::StandardButton value indicating which button was clicked
+         */
+        static int ShowMessage(const QString & title, const QString & msg, QMessageBox::Icon icon = QMessageBox::NoIcon, QWidget * parent = 0);
 };
 
 #endif
--- a/QTfrontend/util/SDLInteraction.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/SDLInteraction.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/SDLInteraction.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/SDLInteraction.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/namegen.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/namegen.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Martin Minarik <ttsmj@pokec.sk>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/namegen.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/namegen.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Martin Minarik <ttsmj@pokec.sk>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/CocoaInitializer.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/CocoaInitializer.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/CocoaInitializer.mm	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/CocoaInitializer.mm	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/InstallController.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/InstallController.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/InstallController.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/InstallController.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/M3InstallController.m	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/M3InstallController.m	Thu Jun 13 22:27:23 2013 +0200
@@ -35,8 +35,8 @@
 
 @implementation M3InstallController
 
-- (id) init {
-        if ((self = [super init])) {
+-(id) init {
+    if ((self = [super init])) {
         NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
         NSString *title = [NSString stringWithFormat:NSLocalizedString(@"%@ is currently running from a disk image", @"AppName is currently running from a disk image"), appName];
         NSString *body = [NSString stringWithFormat:NSLocalizedString(@"Would you like to install %@ in your applications folder before quitting?", @"Would you like to install App Name in your applications folder before quitting?"), appName];
@@ -50,70 +50,91 @@
     return self;
 }
 
-- (void)displayInstaller {
+-(void) displayInstaller {
     NSString *imageFilePath = [[[NSWorkspace sharedWorkspace] propertiesForPath:[[NSBundle mainBundle] bundlePath]] objectForKey:NSWorkspace_RBimagefilepath];
     if (imageFilePath && ![imageFilePath isEqualToString:[NSString stringWithFormat:@"/Users/.%@/%@.sparseimage", NSUserName(), NSUserName()]] && ![[NSUserDefaults standardUserDefaults] boolForKey:@"M3DontAskInstallAgain"]) {
         NSInteger returnValue = [alert runModal];
         if (returnValue == NSAlertDefaultReturn) {
             [self installApp];
         }
-        if ([[alert suppressionButton] state] == NSOnState) {
-            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"M3DontAskInstallAgain"];
+        if ([NSAlert instancesRespondToSelector:@selector(suppressionButton)])
+            if ([[alert performSelector:@selector(suppressionButton)] state] == NSOnState)
+                [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"M3DontAskInstallAgain"];
         }
-    }
 }
 
-- (void)installApp {
+-(void) installApp {
     NSString *appsPath = [[NSString stringWithString:@"/Applications"] stringByAppendingPathComponent:[[[NSBundle mainBundle] bundlePath] lastPathComponent]];
     NSString *userAppsPath = [[[NSString stringWithString:@"~/Applications"] stringByAppendingPathComponent:[[[NSBundle mainBundle] bundlePath] lastPathComponent]] stringByExpandingTildeInPath];
     NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
+    NSString *currentPath = [[NSBundle mainBundle] bundlePath];
+    NSString *finalPath;
+    NSError *error = nil;
+    BOOL success;
 
-    //Delete the app that is installed
+    // Prepare the remove invocation
+    SEL removeSelector;
+    if ([NSFileManager instancesRespondToSelector:@selector(removeItemAtPath:error:)])
+        removeSelector = @selector(removeItemAtPath:error:);
+    else
+        removeSelector = @selector(removeFileAtPath:handler:);
+
+    NSMethodSignature *removeSignature = [NSFileManager instanceMethodSignatureForSelector:removeSelector];
+    NSInvocation *removeInvocation = [NSInvocation invocationWithMethodSignature:removeSignature];
+    [removeInvocation setTarget:[NSFileManager defaultManager]];
+    [removeInvocation setSelector:removeSelector];
+
+    // Delete the app if already installed
     if ([[NSFileManager defaultManager] fileExistsAtPath:appsPath]) {
-        if ([NSFileManager instancesRespondToSelector:@selector(removeItemAtPath:error:)])
-            [[NSFileManager defaultManager] removeItemAtPath:appsPath error:nil];
-        else
-            //casting hides the deprecation warning
-            [(id)[NSFileManager defaultManager] removeFileAtPath:appsPath handler:nil];
+        [removeInvocation setArgument:&appsPath atIndex:2];
+        [removeInvocation setArgument:&error atIndex:3];
+        [removeInvocation invoke];
     }
-    //Delete the app that is installed
-    BOOL success = NO;
+
+    // Prepare the copy invocation
+    SEL copySelector;
     if ([NSFileManager instancesRespondToSelector:@selector(copyItemAtPath:toPath:error:)])
-        success = [[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] bundlePath]
-                                                          toPath:appsPath
-                                                           error:nil];
+        copySelector = @selector(copyItemAtPath:toPath:error:);
     else
-        success = [(id)[NSFileManager defaultManager] copyPath:[[NSBundle mainBundle] bundlePath]
-                                                        toPath:appsPath
-                                                       handler:nil];
-    if (success) {
-        NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"%@ installed successfully", @"App Name installed successfully"), appName],
-                        [NSString stringWithFormat:NSLocalizedString(@"%@ was installed in /Applications", @"App Name was installed in /Applications"), appName],
-                        NSLocalizedString(@"Quit", @"Quit"), nil, nil);
-    } else {
+        copySelector = @selector(copyPath:toPath:handler:);
+
+    NSMethodSignature *copySignature = [NSFileManager instanceMethodSignatureForSelector:copySelector];
+    NSInvocation *copyInvocation = [NSInvocation invocationWithMethodSignature:copySignature];
+
+    [copyInvocation setTarget:[NSFileManager defaultManager]];
+    [copyInvocation setSelector:copySelector];
+
+    // Copy the app in /Applications
+    [copyInvocation setArgument:&currentPath atIndex:2];
+    [copyInvocation setArgument:&appsPath atIndex:3];
+    [copyInvocation setArgument:&error atIndex:4];
+    [copyInvocation invoke];
+    [copyInvocation getReturnValue:&success];
+    finalPath = @"/Applications";
+
+    // In case something went wrong, let's try again somewhere else
+    if (success == NO) {
+        // Delete the app if already installed
         if ([[NSFileManager defaultManager] fileExistsAtPath:userAppsPath]) {
-            if ([NSFileManager instancesRespondToSelector:@selector(removeItemAtPath:error:)])
-                [[NSFileManager defaultManager] removeItemAtPath:userAppsPath error:nil];
-            else
-                [(id)[NSFileManager defaultManager] removeFileAtPath:userAppsPath handler:nil];
+            [removeInvocation setArgument:&userAppsPath atIndex:2];
+            [removeInvocation invoke];
         }
-        if ([NSFileManager instancesRespondToSelector:@selector(copyItemAtPath:toPath:error:)])
-            success = [[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] bundlePath]
-                                                              toPath:userAppsPath
-                                                               error:nil];
-        else
-            success = [(id)[NSFileManager defaultManager] copyPath:[[NSBundle mainBundle] bundlePath]
-                                                            toPath:userAppsPath
-                                                           handler:nil];
-        if (success) {
-            NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"%@ installed successfully", @"AppName installed successfully"), appName],
-                [NSString stringWithFormat:NSLocalizedString(@"%@ was installed in %@", @"App Name was installed in %@"), appName, [[NSString stringWithString:@"~/Applications"] stringByExpandingTildeInPath]],
-                        NSLocalizedString(@"Quit", @"Quit"), nil, nil);
-        } else {
-            NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"Could not install %@", @"Could not install App Name"), appName],
-                            NSLocalizedString(@"An error occurred when installing", @"An error occurred when installing"), NSLocalizedString(@"Quit", @"Quit"), nil, nil);
-        }
+
+        // Copy the app in ~/Applications
+        [copyInvocation setArgument:&userAppsPath atIndex:3];
+        [copyInvocation invoke];
+        [copyInvocation getReturnValue:&success];
+        finalPath = [[NSString stringWithString:@"~/Applications"] stringByExpandingTildeInPath];
     }
+
+    if (success)
+        NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"%@ installed successfully", @"successful installation title"), appName],
+              [NSString stringWithFormat:NSLocalizedString(@"%@ was installed in %@", @"successfull installation text"), appName, finalPath],
+              NSLocalizedString(@"Ok", @"ok message"), nil, nil);
+    else
+        NSRunAlertPanel([NSString stringWithFormat:NSLocalizedString(@"Could not install %@", @"installation failure title"), appName],
+              NSLocalizedString(@"An error occurred when installing", @"installation failure text"),
+              NSLocalizedString(@"Quit", @"exit message"), nil, nil);
 }
 
 @end
--- a/QTfrontend/util/platform/M3Panel.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/M3Panel.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/M3Panel.mm	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/M3Panel.mm	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/SparkleAutoUpdater.mm	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/SparkleAutoUpdater.mm	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/xfire.cpp	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/xfire.cpp	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/xfire.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/util/platform/xfire.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/weapons.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/QTfrontend/weapons.h	Thu Jun 13 22:27:23 2013 +0200
@@ -58,9 +58,9 @@
 
 #define AMMOLINE_ONEEVERY_QT    "1111119111111111111111111111111111111111111111111111111"
 #define AMMOLINE_ONEEVERY_PROB  "1111110111111111111111111111111111111111111111111111111"
-#define AMMOLINE_ONEEVERY_DELAY "0000000000000205500000040007004000000000220000000600020"
+#define AMMOLINE_ONEEVERY_DELAY "0000000000000000000000000000000000000000000000000000000"
 #define AMMOLINE_ONEEVERY_CRATE "1111110111111111111111111111111111111111111111111111111"
 
-//When adding new weapons also inster one element in cDefaultAmmos list (hwconsts.cpp.in)
+//When adding new weapons also insert one element in cDefaultAmmos list (hwconsts.cpp.in)
 
 
--- a/README	Tue Apr 30 01:47:30 2013 +0200
+++ b/README	Thu Jun 13 22:27:23 2013 +0200
@@ -3,7 +3,7 @@
 Images and sounds are distributed under the terms of the GNU FDL licence.
 
 Source:
-Copyright 2004-2011 Andrey Korotaev <unC0Rr@gmail.com>
+Copyright 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
 Portions copyright 2006-2008 Igor Ulyanov aka Displacer <iulyanov@gmail.com>
 
 Instructions:
--- a/cmake_modules/CPackConfig.cmake	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-
-# revision information in cpack-generated names
-if(CMAKE_BUILD_TYPE MATCHES DEBUG)
-    set(full_suffix "${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION}")
-else()
-    set(full_suffix "${HEDGEWARS_VERSION}")
-endif()
-
-# CPack variables
-set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Hedgewars, a free turn-based strategy game")
-set(CPACK_PACKAGE_VENDOR "Hedgewars Project")
-set(CPACK_PACKAGE_FILE_NAME "Hedgewars-${full_suffix}")
-set(CPACK_SOURCE_PACKAGE_FILE_NAME "hedgewars-src-${full_suffix}")
-set(CPACK_SOURCE_GENERATOR "TBZ2")
-set(CPACK_PACKAGE_EXECUTABLES "hedgewars" "Hedgewars")
-set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING")
-set(CPACK_PACKAGE_INSTALL_DIRECTORY "Hedgewars ${full_suffix}")
-set(CPACK_STRIP_FILES true)
-
-if(WIN32 AND NOT UNIX)
-    set(CPACK_NSIS_DISPLAY_NAME "Hedgewars")
-    set(CPACK_NSIS_HELP_LINK "http://www.hedgewars.org/")
-    set(CPACK_NSIS_URL_INFO_ABOUT "http://www.hedgewars.org/")
-    set(CPACK_NSIS_CONTACT "unC0Rr@gmail.com")
-    set(CPACK_NSIS_MODIFY_PATH OFF)
-    set(CPACK_NSIS_EXECUTABLES_DIRECTORY "${target_binary_install_dir}")
-    set(CPACK_NSIS_MUI_FINISHPAGE_RUN "hedgewars${CMAKE_EXECUTABLE_SUFFIX}")
-    set(CPACK_GENERATOR "ZIP;NSIS")
-    set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "hedgewars")
-endif(WIN32 AND NOT UNIX)
-
-set(CPACK_SOURCE_IGNORE_FILES
-    #temporary files
-    "~"
-    ".swp"
-    #version control
-    "\\\\.hg"
-    #output binary/library
-    "\\\\.exe$"
-    "\\\\.a$"
-    "\\\\.so$"
-    "\\\\.dylib$"
-    "\\\\.dll$"
-    "\\\\.ppu$"
-    "\\\\.o$"
-    "\\\\.cxx$"
-    #graphics
-    "\\\\.xcf$"
-    "\\\\.svg$"
-    "\\\\.svgz$"
-    "\\\\.psd$"
-    "\\\\.sifz$"
-    #misc
-    "\\\\.core$"
-    "\\\\.sh$"
-    "\\\\.orig$"
-    "\\\\.layout$"
-    "\\\\.db$"
-    "\\\\.dof$"
-    #archives
-    "\\\\.zip$"
-    "\\\\.gz$"
-    "\\\\.bz2$"
-    "\\\\.tmp$"
-    #cmake-configured files
-    "hwconsts\\\\.cpp$"
-    "config\\\\.inc$"
-    "hwengine\\\\.desktop$"
-    "Info\\\\.plist$"
-    #other cmake generated files
-    "Makefile"
-    "Doxyfile"
-    "CMakeFiles"
-    "[dD]ebug$"
-    "[rR]elease$"
-    "CPack"
-    "cmake_install\\\\.cmake$"
-    "CMakeCache\\\\.txt$"
-#    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/libtremor"
-#    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/libfreetype"
-#    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/liblua"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/libopenalbridge"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/project_files/frontlib"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/project_files/promotional_art"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/project_files/cmdlineClient"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/tools/templates"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/bin/checkstack*"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/doc"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/templates"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/tmp"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/utils"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/share/hedgewars/Data/Maps/test"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/install_manifest.txt"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/CMakeCache.txt"
-    "^${CMAKE_CURRENT_SOURCE_DIR}/hedgewars\\\\."
-)
-
-include(CPack)
-
--- a/cmake_modules/FindLua.cmake	Tue Apr 30 01:47:30 2013 +0200
+++ b/cmake_modules/FindLua.cmake	Thu Jun 13 22:27:23 2013 +0200
@@ -1,37 +1,26 @@
-# Find the Lua library
-# --------------------
-# On Android/Windows/OSX this just defines the name of the library that
-#  will be compiled from our bundled sources
-# On Linux it will try to load the system library and fallback to compiling
-#  the bundled one when nothing is found
-
-set(LUA_FOUND false)
-set(LUA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/misc/liblua)
+# Find liblua
+#
+# Once done this will define
+#  LUA_FOUND - system has Lua
+#  LUA_INCLUDE_DIR - the Lua include directory
+#  LUA_LIBRARY - The library needed to use Lua
+# Copyright (c) 2013, Vittorio Giovara <vittorio.giovara@gmail.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
 
-if (ANDROID)
-    SET(LUA_DEFAULT "liblua5.1.so")
-else (ANDROID)
-    IF(WIN32)
-        SET(LUA_DEFAULT lua.dll)
-    ELSE(WIN32)
-        IF(APPLE)
-            SET(LUA_DEFAULT lua)
-        ELSE(APPLE)
-            #locate the system's lua library
-            FIND_LIBRARY(LUA_DEFAULT NAMES lua51 lua5.1 lua-5.1 lua PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib)
-            IF(${LUA_DEFAULT} MATCHES "LUA_DEFAULT-NOTFOUND")
-                set(LUA_DEFAULT lua)
-            ELSE()
-                set(LUA_FOUND true)
-                message(STATUS "LibLua 5.1 found at ${LUA_DEFAULT}")
-                find_path(LUA_INCLUDE_DIR lua.h)
-                #remove the path (fpc doesn't like it - why?)
-                GET_FILENAME_COMPONENT(LUA_DEFAULT ${LUA_DEFAULT} NAME)
-            ENDIF()
-        ENDIF(APPLE)
-    ENDIF(WIN32)
-ENDIF(ANDROID)
+include(FindPackageHandleStandardArgs)
 
-SET(LUA_LIBRARY ${LUA_DEFAULT} CACHE STRING "Lua library to link to; file name without path only!")
+find_path(LUA_INCLUDE_DIR lua.h
+                          PATHS /usr/include /usr/local/include /usr/pkg/include
+                          PATH_SUFFIXES lua5.1 lua51)
+find_library(LUA_LIBRARY NAMES lua51 lua5.1 lua-5.1 lua
+                         PATHS /lib /usr/lib /usr/local/lib /usr/pkg/lib)
 
+find_package_handle_standard_args(Lua DEFAULT_MSG LUA_LIBRARY LUA_INCLUDE_DIR)
+mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARY)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/compilerchecks.cmake	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,77 @@
+
+#TESTING TIME
+include(CheckCCompilerFlag)
+#when you need to check for a linker flag, just leave the argument of "check_c_compiler_flag" empty
+
+# CMAKE_C{XX}_FLAGS is for compiler flags (c and c++)
+# CMAKE_EXE_LINKER_FLAGS is for linker flags (also add them to pascal_flags and haskell_flags)
+# CMAKE_SHARED_LIBRARY_<lang>_FLAGS same but for shared libraries
+
+#TODO: should there be two different checks for C and CXX?
+
+#stack protection, when found it needs to go in the linker flags too
+#it is disabled on win32 because it adds a dll and messes with linker
+#(see 822312 654424 on bugzilla.redhat.com)
+check_c_compiler_flag("-fstack-protector-all -fstack-protector" HAVE_STACKPROTECTOR)
+if(HAVE_STACKPROTECTOR AND (NOT WIN32))
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-all -fstack-protector")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all -fstack-protector")
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fstack-protector-all -fstack-protector")
+    set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} -fstack-protector-all -fstack-protector")
+    set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} -fstack-protector-all -fstack-protector")
+endif()
+
+#symbol visibility, not supported on Windows
+check_c_compiler_flag("-fvisibility=hidden" HAVE_VISIBILITY)
+if(HAVE_VISIBILITY AND (NOT WIN32))
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
+endif()
+
+
+#check for noexecstack on ELF, Gentoo security
+set(CMAKE_REQUIRED_FLAGS "-Wl,-z,noexecstack")
+check_c_compiler_flag("" HAVE_NOEXECSTACK)
+if(HAVE_NOEXECSTACK)
+    append_linker_flag("-znoexecstack")
+endif()
+
+#check for full relro on ELF, Debian security
+set(CMAKE_REQUIRED_FLAGS "-Wl,-zrelro,-znow")
+check_c_compiler_flag("" HAVE_RELROFULL)
+if(HAVE_RELROFULL)
+    append_linker_flag("-zrelro")
+    append_linker_flag("-znow")
+else()
+    #if full relro is not available, try partial relro
+    set(CMAKE_REQUIRED_FLAGS "-Wl,-zrelro")
+    check_c_compiler_flag("" HAVE_RELROPARTIAL)
+    if(HAVE_RELROPARTIAL)
+        append_linker_flag("-zrelro")
+    endif()
+endif()
+
+#check for ASLR on Windows Vista or later, requires binutils >= 2.20
+set(CMAKE_REQUIRED_FLAGS "-Wl,--nxcompat")
+check_c_compiler_flag("" HAVE_WINASLR)
+if(HAVE_WINASLR)
+    append_linker_flag("--nxcompat")
+endif()
+
+#check for DEP on Windows XP SP2 or later, requires binutils >= 2.20
+set(CMAKE_REQUIRED_FLAGS "-Wl,--dynamicbase")
+check_c_compiler_flag("" HAVE_WINDEP)
+if(HAVE_WINDEP)
+    append_linker_flag("--dynamicbase")
+endif()
+
+#this is actually an optimisation
+set(CMAKE_REQUIRED_FLAGS "-Wl,--as-needed")
+check_c_compiler_flag("" HAVE_ASNEEDED)
+if(HAVE_ASNEEDED)
+    append_linker_flag("--as-needed")
+endif()
+
+#always unset or these flags will be spread everywhere
+unset(CMAKE_REQUIRED_FLAGS)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/cpackvars.cmake	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,106 @@
+
+# revision information in cpack-generated names
+if(CMAKE_BUILD_TYPE MATCHES DEBUG)
+    set(full_suffix "${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION}")
+else()
+    set(full_suffix "${HEDGEWARS_VERSION}")
+endif()
+
+# CPack variables
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Hedgewars, a free turn-based strategy game")
+set(CPACK_PACKAGE_VENDOR "Hedgewars Project")
+set(CPACK_PACKAGE_FILE_NAME "Hedgewars-${full_suffix}")
+set(CPACK_SOURCE_PACKAGE_FILE_NAME "hedgewars-src-${full_suffix}")
+set(CPACK_SOURCE_GENERATOR "TBZ2")
+set(CPACK_PACKAGE_EXECUTABLES "hedgewars" "Hedgewars")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING")
+set(CPACK_PACKAGE_INSTALL_DIRECTORY "Hedgewars ${full_suffix}")
+set(CPACK_STRIP_FILES true)
+
+if(WIN32 AND NOT UNIX)
+    set(CPACK_NSIS_DISPLAY_NAME "Hedgewars")
+    set(CPACK_NSIS_HELP_LINK "http://www.hedgewars.org/")
+    set(CPACK_NSIS_URL_INFO_ABOUT "http://www.hedgewars.org/")
+    set(CPACK_NSIS_CONTACT "unC0Rr@gmail.com")
+    set(CPACK_NSIS_MODIFY_PATH OFF)
+    set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
+    set(CPACK_NSIS_MUI_FINISHPAGE_RUN "hedgewars${CMAKE_EXECUTABLE_SUFFIX}")
+    set(CPACK_NSIS_CREATE_ICONS "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Hedgewars.lnk' '$INSTDIR\\\\hedgewars.exe'")
+    set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "hedgewars")
+endif(WIN32 AND NOT UNIX)
+
+set(CPACK_SOURCE_IGNORE_FILES
+    #temporary files
+    "~"
+    ".swp"
+    #version control
+    "\\\\.hg"
+    "\\\\.orig$"
+    #output binary/library
+    "\\\\.exe$"
+    "\\\\.a$"
+    "\\\\.so$"
+    "\\\\.dylib$"
+    "\\\\.dll$"
+    "\\\\.ppu$"
+    "\\\\.o$"
+    "\\\\.cxx$"
+    "\\\\.hi$"
+    #graphics
+    "\\\\.xcf$"
+    "\\\\.svg$"
+    "\\\\.svgz$"
+    "\\\\.psd$"
+    "\\\\.sifz$"
+    #misc
+    "\\\\.core$"
+    "\\\\.layout$"
+    "\\\\.db$"
+    "\\\\.dof$"
+    "\\\\.or$"
+    "\\\\.stackdump$"
+    #archives
+    "\\\\.zip$"
+    "\\\\.gz$"
+    "\\\\.bz2$"
+    "\\\\.tmp$"
+    #cmake-configured files
+    "hwconsts\\\\.cpp$"
+    "config\\\\.inc$"
+    "hwengine\\\\.desktop$"
+    "Info\\\\.plist$"
+    #qt extra files
+    "moc_.*\\\\.cxx_parameters"
+    "\\\\.qrc.depends$"
+    "\\\\.qm$"
+    #other cmake generated files
+    "Makefile$"
+    "Doxyfile"
+    "CMakeFiles"
+    "[dD]ebug$"
+    "[rR]elease$"
+    "CPack"
+    "cmake_install\\\\.cmake$"
+    "cmake_uninstall\\\\.cmake$"
+    "CMakeCache\\\\.txt$"
+    "build_windows_.*\\\\.bat$"
+#    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/libtremor"
+#    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/libfreetype"
+#    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/liblua"
+#    "^${CMAKE_CURRENT_SOURCE_DIR}/project_files/frontlib"
+#    "^${CMAKE_CURRENT_SOURCE_DIR}/project_files/cmdlineClient"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/libopenalbridge"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/misc/winutils/bin"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/project_files/promotional_art"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/tools/templates"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/tools/drawMapTest"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/doc"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/tmp"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/utils"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/share/hedgewars/Data/Maps/test"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/install_manifest.txt"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/CMakeCache.txt"
+    "^${CMAKE_CURRENT_SOURCE_DIR}/hedgewars\\\\."
+)
+
+include(CPack)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/paths.cmake	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,77 @@
+#where to build libs and bins
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+#these variables are for non-makefile generators
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${EXECUTABLE_OUTPUT_PATH})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${EXECUTABLE_OUTPUT_PATH})
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${LIBRARY_OUTPUT_PATH})
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${LIBRARY_OUTPUT_PATH})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${LIBRARY_OUTPUT_PATH})
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${LIBRARY_OUTPUT_PATH})
+
+#resource paths
+if(UNIX AND NOT APPLE)
+    set(target_binary_install_dir "bin")
+    set(target_library_install_dir "lib")
+
+    string(SUBSTRING "${DATA_INSTALL_DIR}" 0 1 sharepath_start)
+    if (NOT (${sharepath_start} MATCHES "/"))
+        set(HEDGEWARS_DATADIR "${CMAKE_INSTALL_PREFIX}/${DATA_INSTALL_DIR}/")
+    else()
+        set(HEDGEWARS_DATADIR "${DATA_INSTALL_DIR}/")
+    endif()
+    set(HEDGEWARS_FULL_DATADIR "${HEDGEWARS_DATADIR}")
+else()
+    set(target_binary_install_dir "./")
+
+    if(APPLE)
+        set(target_library_install_dir "../Frameworks/")
+        set(CMAKE_INSTALL_PREFIX "Hedgewars.app/Contents/MacOS/")
+        set(HEDGEWARS_DATADIR "../Resources/")
+        set(HEDGEWARS_FULL_DATADIR "/Applications/${CMAKE_INSTALL_PREFIX}/${HEDGEWARS_DATADIR}")
+    elseif(WIN32)
+        set(target_library_install_dir "./")
+        set(HEDGEWARS_DATADIR "./")
+        set(HEDGEWARS_FULL_DATADIR "${CMAKE_INSTALL_PREFIX}/")
+        link_directories("${EXECUTABLE_OUTPUT_PATH}" "${CMAKE_SOURCE_DIR}/misc/winutils/bin")
+    endif()
+endif()
+
+
+#RPATH SETTINGS
+#necessary for dynamic libraries on UNIX, ignored elsewhere
+
+#use, i.e. don't skip the full RPATH for the build tree
+set(CMAKE_SKIP_BUILD_RPATH FALSE)
+set(CMAKE_SKIP_INSTALL_RPATH FALSE)
+
+#it's safe to use our RPATH because it is relative
+set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
+
+#paths where to find libraries (final slash not optional):
+# - the first is relative to the executable
+# - the second is the same directory of the executable (so it runs in bin/)
+# - the third one is the full path of the system dir
+#source http://www.cmake.org/pipermail/cmake/2008-January/019290.html
+set(CMAKE_INSTALL_RPATH "$ORIGIN/../${target_library_install_dir}/:$ORIGIN/:${CMAKE_INSTALL_PREFIX}/${target_library_install_dir}/")
+set(CMAKE_INSTALL_RPATH_ESCAPED "$$ORIGIN/../${target_library_install_dir}/:$$ORIGIN/:${CMAKE_INSTALL_PREFIX}/${target_library_install_dir}/")
+
+if(UNIX AND NOT APPLE)
+    #make sure $ORIGIN is respected
+    append_linker_flag("-zorigin")
+    #apply RPATH settings to pascal and haskell executables
+    list(APPEND pascal_flags "-k-rpath" "-k'${CMAKE_INSTALL_RPATH_ESCAPED}'")
+    list(APPEND haskell_flags "-optl" "-Wl,-rpath,'${CMAKE_INSTALL_RPATH_ESCAPED}'")
+endif()
+
+#add the automatically determined parts of the RPATH
+#which point to directories outside the build tree to the install RPATH
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
+
+
+#install_name_tool magic for OS X
+set(CMAKE_INSTALL_NAME_DIR "@executable_path/../Frameworks")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/platform.cmake	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,87 @@
+
+if(APPLE)
+    set(CMAKE_FIND_FRAMEWORK "FIRST")
+
+#what system are we building for
+    set(minimum_macosx_version $ENV{MACOSX_DEPLOYMENT_TARGET})
+
+#detect on which system we are: if sw_vers cannot be found for any reason (re)use minimum_macosx_version
+    find_program(sw_vers sw_vers)
+    if(sw_vers)
+        execute_process(COMMAND ${sw_vers} "-productVersion"
+                        OUTPUT_VARIABLE current_macosx_version
+                        OUTPUT_STRIP_TRAILING_WHITESPACE)
+        string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" current_macosx_version ${current_macosx_version})
+    else()
+        if(NOT minimum_macosx_version)
+            message(FATAL_ERROR "sw_vers not found! Need explicit MACOSX_DEPLOYMENT_TARGET variable set")
+        else()
+            message("*** sw_vers not found! Fallback to MACOSX_DEPLOYMENT_TARGET variable ***")
+            set(current_macosx_version ${minimum_macosx_version})
+        endif()
+    endif()
+
+#if nothing is set, we deploy only for the current system
+    if(NOT minimum_macosx_version)
+        set(minimum_macosx_version ${current_macosx_version})
+    endif()
+
+#lower systems don't have enough processing power anyway
+    if (minimum_macosx_version VERSION_LESS "10.4")
+        message(FATAL_ERROR "Hedgewars is not supported on Mac OS X pre-10.4")
+    endif()
+
+#workaround for http://playcontrol.net/ewing/jibberjabber/big_behind-the-scenes_chang.html#SDL_mixer (Update 2)
+    if(current_macosx_version VERSION_EQUAL "10.4")
+        find_package(SDL_mixer REQUIRED)
+        set(DYLIB_SMPEG "-dylib_file @loader_path/Frameworks/smpeg.framework/Versions/A/smpeg:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/smpeg.framework/Versions/A/smpeg")
+        set(DYLIB_MIKMOD "-dylib_file @loader_path/Frameworks/mikmod.framework/Versions/A/mikmod:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/mikmod.framework/Versions/A/mikmod")
+        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DYLIB_SMPEG} ${DYLIB_MIKMOD}")
+        set(CMAKE_CX_FLAGS "${CMAKE_CX_FLAGS} ${DYLIB_SMPEG} ${DYLIB_MIKMOD}")
+        list(APPEND pascal_flags "-k${DYLIB_SMPEG}" "-k${DYLIB_MIKMOD}")
+    endif()
+
+#CMAKE_OSX_ARCHITECTURES and CMAKE_OSX_SYSROOT need to be set for universal binary and correct linking
+    if(NOT CMAKE_OSX_ARCHITECTURES)
+        if(current_macosx_version VERSION_LESS "10.6")
+            if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "powerpc*")
+                set(CMAKE_OSX_ARCHITECTURES "ppc7400")
+            else()
+                set(CMAKE_OSX_ARCHITECTURES "i386")
+            endif()
+        else()
+            set(CMAKE_OSX_ARCHITECTURES "x86_64")
+        endif()
+    endif()
+
+#CMAKE_OSX_SYSROOT is set at the system version we are supposed to build on
+#we need to provide the correct one when host and target differ
+    if(NOT ${minimum_macosx_version} VERSION_EQUAL ${current_macosx_version})
+        if(minimum_macosx_version VERSION_EQUAL "10.4")
+            set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.4u.sdk/")
+            set(CMAKE_C_COMPILER "/Developer/usr/bin/gcc-4.0")
+            set(CMAKE_CXX_COMPILER "/Developer/usr/bin/g++-4.0")
+        else()
+            string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" sdk_version ${minimum_macosx_version})
+            set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX${sdk_version}.sdk/")
+        endif()
+    endif()
+
+#add user framework directory, other paths can be passed via FPFLAGS
+    list(APPEND pascal_flags "-Ff~/Library/Frameworks")
+#set deployment target
+    list(APPEND pascal_flags "-k-macosx_version_min" "-k${minimum_macosx_version}" "-XR${CMAKE_OSX_SYSROOT}")
+
+endif(APPLE)
+
+if(MINGW)
+    #this flags prevents a few dll hell problems
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc ")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc ")
+endif(MINGW)
+
+if(WIN32)
+    if(NOT ${BUILD_SHARED_LIB})
+        message(FATAL_ERROR "Static linking is not supported on Windows")
+    endif()
+endif(WIN32)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/revinfo.cmake	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,38 @@
+#detect Mercurial revision and init rev/hash information
+find_program(HGCOMMAND hg)
+if(HGCOMMAND AND (EXISTS ${CMAKE_SOURCE_DIR}/.hg))
+    execute_process(COMMAND ${HGCOMMAND} identify -in
+                    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+                    OUTPUT_VARIABLE internal_version
+                    ERROR_QUIET
+                )
+    #check local repo status
+    string(REGEX REPLACE "[^+]" "" HGCHANGED ${internal_version})
+    string(REGEX REPLACE "[0-9a-zA-Z]+(.*) ([0-9]+)(.*)" "\\2" HEDGEWARS_REVISION ${internal_version})
+    string(REGEX REPLACE "([0-9a-zA-Z]+)(.*) [0-9]+(.*)" "\\1" HEDGEWARS_HASH ${internal_version})
+
+    if(HGCHANGED)
+        message("*** You have uncommitted changes in your repository ***")
+    endif()
+    #let's assume that if you have hg you might be interested in debugging
+    set(default_build_type "DEBUG")
+    #write down hash and rev for easy picking should hg be missing
+    file(WRITE "${CMAKE_SOURCE_DIR}/share/version_info.txt" "Hedgewars versioning information, do not modify\nrev ${HEDGEWARS_REVISION}\nhash ${HEDGEWARS_HASH}\n")
+else()
+    set(default_build_type "RELEASE")
+    # when compiling outside rev control, fetch revision and hash information from version_info.txt
+    find_file(version_info version_info.txt PATH ${CMAKE_SOURCE_DIR}/share)
+    if(version_info)
+        file(STRINGS ${version_info} internal_version REGEX "rev")
+        string(REGEX REPLACE "rev ([0-9]*)" "\\1" HEDGEWARS_REVISION ${internal_version})
+        file(STRINGS ${version_info} internal_version REGEX "hash")
+        string(REGEX REPLACE "hash ([a-zA-Z0-9]*)" "\\1" HEDGEWARS_HASH ${internal_version})
+    else()
+        message(WARNING "${CMAKE_SOURCE_DIR}/share/version_info.txt not found, revision information "
+                        "will be incorrect!!! Contact your source provider to fix this!")
+        set(HEDGEWARS_REVISION "0000")
+        set(HEDGEWARS_HASH "unknown")
+    endif()
+endif()
+
+
--- a/cmake_modules/utils.cmake	Tue Apr 30 01:47:30 2013 +0200
+++ b/cmake_modules/utils.cmake	Thu Jun 13 22:27:23 2013 +0200
@@ -25,6 +25,13 @@
     endif(NOT ${_VAR_NAME})
 endmacro(find_package_or_disable_msg _PKG_NAME _VAR_NAME _MSG)
 
+macro(append_linker_flag _FLAG)
+    list(APPEND pascal_flags "-k${_FLAG}")
+    list(APPEND haskell_flags "-optl" "${_FLAG}")
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,${_FLAG}")
+    set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} -Wl,${_FLAG}")
+    set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} -Wl,${_FLAG}")
+endmacro(append_linker_flag _FLAG)
 
 #TODO: find_package_or_bundle
 
--- a/gameServer/Actions.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/Actions.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -20,6 +20,7 @@
 import Control.Exception
 import System.Process
 import Network.Socket
+import System.Random
 -----------------------------
 #if defined(OFFICIAL_SERVER)
 import OfficialServer.GameReplayStore
@@ -161,7 +162,13 @@
     rnc <- gets roomsClients
 
     io $ do
-        modifyClient rnc (\cl -> cl{teamsInGame = 0, isReady = False, isMaster = False, isInGame = False, clientClan = Nothing}) ci
+        modifyClient rnc (
+            \cl -> cl{teamsInGame = 0
+                , isReady = False
+                , isMaster = False
+                , isInGame = False
+                , isJoinedMidGame = False
+                , clientClan = Nothing}) ci
         modifyRoom rnc (\r -> r{playersIn = playersIn r + 1}) ri
         moveClientToRoom rnc ri ci
 
@@ -206,8 +213,9 @@
     rnc <- gets roomsClients
     newMasterId <- liftM (\ids -> fromMaybe (last . filter (/= ci) $ ids) delegateId) . io $ roomClientsIndicesM rnc ri
     newMaster <- io $ client'sM rnc id newMasterId
+    oldMasterId <- io $ room'sM rnc masterID ri
+    oldMaster <- io $ client'sM rnc id oldMasterId
     oldRoomName <- io $ room'sM rnc name ri
-    oldMaster <- client's nick
     kicked <- client's isKickedFromServer
     thisRoomChans <- liftM (map sendChan) $ roomClientsS ri
     let newRoomName = if (proto < 42) || kicked then nick newMaster else oldRoomName
@@ -216,12 +224,13 @@
                 , name = newRoomName
                 , isRestrictedJoins = False
                 , isRestrictedTeams = False
-                , isRegisteredOnly = False
-                , readyPlayers = if isReady newMaster then readyPlayers r else readyPlayers r + 1})
-        , ModifyClient2 newMasterId (\c -> c{isMaster = True, isReady = True})
+                , isRegisteredOnly = False}
+                )
+        , ModifyClient2 newMasterId (\c -> c{isMaster = True})
+        , ModifyClient2 oldMasterId (\c -> c{isMaster = False})
         , AnswerClients [sendChan newMaster] ["ROOM_CONTROL_ACCESS", "1"]
-        , AnswerClients thisRoomChans ["CLIENT_FLAGS", "-h", oldMaster]
-        , AnswerClients thisRoomChans ["CLIENT_FLAGS", "+hr", nick newMaster]
+        , AnswerClients thisRoomChans ["CLIENT_FLAGS", "-h", nick oldMaster]
+        , AnswerClients thisRoomChans ["CLIENT_FLAGS", "+h", nick newMaster]
         ]
 
     newRoom' <- io $ room'sM rnc id ri
@@ -287,7 +296,7 @@
     pr <- client's clientProto
     mapM_ processAction [
         AnswerClients (map sendChan roomPlayers) $ notReadyMessage pr . map nick . filter (not . isMaster) $ roomPlayers
-        , ModifyRoomClients (\cl -> cl{isReady = isMaster cl})
+        , ModifyRoomClients (\cl -> cl{isReady = isMaster cl, isJoinedMidGame = False})
         , ModifyRoom (\r -> r{readyPlayers = 1})
         ]
     where
@@ -298,10 +307,17 @@
     rnc <- gets roomsClients
     ri <- clientRoomA
     thisRoomChans <- liftM (map sendChan) $ roomClientsS ri
+    joinedMidGame <- liftM (filter isJoinedMidGame) $ roomClientsS ri
     answerRemovedTeams <- io $
-         room'sM rnc (map (\t -> AnswerClients thisRoomChans ["REMOVE_TEAM", t]) . leftTeams . fromJust . gameInfo) ri
+         room'sM rnc (\r -> let gi = fromJust $ gameInfo r in 
+                        concatMap (\c -> 
+                            (answerFullConfigParams c (mapParams r) (params r))
+                            ++
+                            (map (\t -> AnswerClients [sendChan c] ["REMOVE_TEAM", t]) $ leftTeams gi) 
+                        ) joinedMidGame
+                     ) ri
 
-    mapM_ processAction $
+    mapM_ processAction $ (
         SaveReplay
         : ModifyRoom
             (\r -> r{
@@ -309,10 +325,11 @@
                 readyPlayers = 0
                 }
             )
-        : UnreadyRoomClients
         : SendUpdateOnThisRoom
         : AnswerClients thisRoomChans ["ROUND_FINISHED"]
         : answerRemovedTeams
+        )
+        ++ [UnreadyRoomClients]
 
 
 processAction (SendTeamRemovalMessage teamName) = do
@@ -381,7 +398,7 @@
         if p < 38 then
             processAction $ ByeClient $ loc "Nickname is already in use"
             else
-            processAction $ NoticeMessage NickAlreadyInUse
+            mapM_ processAction [NoticeMessage NickAlreadyInUse, ModifyClient $ \c -> c{nick = B.empty}]
         else
         do
         db <- gets (dbQueries . serverInfo)
@@ -615,6 +632,12 @@
     processAction $ Warning versionsStats
 
 
+processAction (Random chans items) = do
+    let i = if null items then ["heads", "tails"] else items
+    n <- io $ randomRIO (0, length i - 1)
+    processAction $ AnswerClients chans ["CHAT", "[random]", i !! n]
+
+
 #if defined(OFFICIAL_SERVER)
 processAction SaveReplay = do
     ri <- clientRoomA
--- a/gameServer/CoreTypes.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/CoreTypes.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -75,6 +75,7 @@
     | CheckRecord
     | CheckFailed B.ByteString
     | CheckSuccess [B.ByteString]
+    | Random [ClientChan] [B.ByteString]
 
 type ClientChan = Chan [B.ByteString]
 
@@ -106,10 +107,10 @@
         isAdministrator :: Bool,
         isChecker :: Bool,
         isKickedFromServer :: Bool,
+        isJoinedMidGame :: Bool,
         clientClan :: !(Maybe B.ByteString),
         checkInfo :: Maybe CheckInfo,
-        teamsInGame :: Word,
-        actionsPending :: [Action]
+        teamsInGame :: Word
     }
 
 instance Eq ClientInfo where
@@ -238,8 +239,8 @@
     ServerInfo
         True
         "<h2><p align=center><a href=\"http://www.hedgewars.org/\">http://www.hedgewars.org/</a></p></h2>"
-        "<font color=yellow><h3 align=center>Hedgewars 0.9.18 is out! Please update.</h3><p align=center><a href=http://hedgewars.org/download.html>Download page here</a></font>"
-        43 -- latestReleaseVersion
+        "<font color=yellow><h3 align=center>Hedgewars 0.9.19 is out! Please update.</h3><p align=center><a href=http://hedgewars.org/download.html>Download page here</a></font>"
+        45 -- latestReleaseVersion
         41 -- earliestCompatibleVersion
         46631
         ""
--- a/gameServer/HWProtoChecker.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/HWProtoChecker.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -1,17 +1,12 @@
 {-# LANGUAGE OverloadedStrings #-}
 module HWProtoChecker where
 
-import qualified Data.Map as Map
 import Data.Maybe
-import Data.List
 import Control.Monad.Reader
 --------------------------------------
 import CoreTypes
 import Actions
-import Utils
 import HandlerUtils
-import RoomsAndClients
-import EngineInteraction
 
 
 handleCmd_checker :: CmdHandler
--- a/gameServer/HWProtoCore.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/HWProtoCore.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -4,7 +4,6 @@
 import Control.Monad.Reader
 import Data.Maybe
 import qualified Data.ByteString.Char8 as B
-import qualified Data.List as L
 --------------------------------------
 import CoreTypes
 import Actions
@@ -30,26 +29,28 @@
 handleCmd ["PONG"] = do
     cl <- thisClient
     if pingsQueue cl == 0 then
-        return $ actionsPending cl ++ [ModifyClient (\c -> c{actionsPending = []})]
+        return [ProtocolError "Protocol violation"]
         else
         return [ModifyClient (\c -> c{pingsQueue = pingsQueue c - 1})]
 
-handleCmd ("CMD" : parameters) =
-    let c = concatMap B.words parameters in
-        if not $ null c then
-            h $ (upperCase . head $ c) : tail c
-            else
-            return []
+handleCmd ["CMD", parameters] = do
+        let (cmd, plist) = B.break (== ' ') parameters
+        let param = B.dropWhile (== ' ') plist
+        h (upperCase cmd) param
     where
-        h ["DELEGATE", n] = handleCmd ["DELEGATE", n]
-        h ["STATS"] = handleCmd ["STATS"]
-        h ["PART", msg] = handleCmd ["PART", msg]
-        h ["QUIT", msg] = handleCmd ["QUIT", msg]
-        h ["GLOBAL", msg] = do
+        h "DELEGATE" n | not $ B.null n = handleCmd ["DELEGATE", n]
+        h "STATS" _ = handleCmd ["STATS"]
+        h "PART" m | not $ B.null m = handleCmd ["PART", m]
+                   | otherwise = handleCmd ["PART"]
+        h "QUIT" m | not $ B.null m = handleCmd ["QUIT", m]
+                   | otherwise = handleCmd ["QUIT"]
+        h "RND" p = handleCmd ("RND" : B.words p)
+        h "GLOBAL" p = do
+            cl <- thisClient
             rnc <- liftM snd ask
             let chans = map (sendChan . client rnc) $ allClients rnc
-            return [AnswerClients chans ["CHAT", "[global notice]", msg]]
-        h c = return [Warning . B.concat . L.intersperse " " $ "Unknown cmd" : c]
+            return [AnswerClients chans ["CHAT", "[global notice]", p] | isAdministrator cl]
+        h c p = return [Warning $ B.concat ["Unknown cmd: /", c, p]]
 
 handleCmd cmd = do
     (ci, irnc) <- ask
@@ -72,9 +73,9 @@
     let cl = rnc `client` fromJust maybeClientId
     let roomId = clientRoom rnc clientId
     let clRoom = room rnc roomId
-    let roomMasterSign = if isMaster cl then "@" else ""
+    let roomMasterSign = if isMaster cl then "+" else ""
     let adminSign = if isAdministrator cl then "@" else ""
-    let rInfo = if roomId /= lobbyId then B.concat [roomMasterSign, "room ", name clRoom] else adminSign `B.append` "lobby"
+    let rInfo = if roomId /= lobbyId then B.concat [adminSign, roomMasterSign, "room ", name clRoom] else adminSign `B.append` "lobby"
     let roomStatus = if isJust $ gameInfo clRoom then
             if teamsInGame cl > 0 then "(playing)" else "(spectating)"
             else
--- a/gameServer/HWProtoInRoomState.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/HWProtoInRoomState.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -54,12 +54,12 @@
         roomChans <- roomClientsChans
         cl <- thisClient
         teamColor <-
-            if clientProto cl < 42 then 
+            if clientProto cl < 42 then
                 return color
                 else
                 liftM (head . (L.\\) (map B.singleton ['0'..]) . map teamcolor . teams) thisRoom
         let roomTeams = teams rm
-        let hhNum = let p = if not $ null roomTeams then hhnum $ head roomTeams else 4 in newTeamHHNum roomTeams p
+        let hhNum = let p = if not $ null roomTeams then minimum [hhnum $ head roomTeams, canAddNumber roomTeams] else 4 in newTeamHHNum roomTeams p
         let newTeam = clNick `seq` TeamInfo ci clNick tName teamColor grave fort voicepack flag dif hhNum (hhsList hhsInfo)
         return $
             if not . null . drop (maxTeams rm - 1) $ roomTeams then
@@ -79,10 +79,7 @@
                 AnswerClients clChan ["TEAM_ACCEPTED", tName],
                 AnswerClients othChans $ teamToNet $ newTeam,
                 AnswerClients roomChans ["TEAM_COLOR", tName, teamColor],
-                ModifyClient $ \c -> c{actionsPending = actionsPending cl
-                    ++ [AnswerClients clChan ["HH_NUM", tName, showB $ hhnum newTeam]]
-                    },
-                AnswerClients [sendChan cl] ["PING"]
+                AnswerClients roomChans ["HH_NUM", tName, showB $ hhnum newTeam]
                 ]
         where
         canAddNumber rt = (48::Int) - (sum $ map hhnum rt)
@@ -172,17 +169,15 @@
 handleCmd_inRoom ["TOGGLE_READY"] = do
     cl <- thisClient
     chans <- roomClientsChans
-    if isMaster cl then
-        return []
-        else
-        return [
-            ModifyRoom (\r -> r{readyPlayers = readyPlayers r + (if isReady cl then -1 else 1)}),
-            ModifyClient (\c -> c{isReady = not $ isReady cl}),
-            AnswerClients chans $ if clientProto cl < 38 then
-                    [if isReady cl then "NOT_READY" else "READY", nick cl]
-                    else
-                    ["CLIENT_FLAGS", if isReady cl then "-r" else "+r", nick cl]
-            ]
+
+    return [
+        ModifyRoom (\r -> r{readyPlayers = readyPlayers r + (if isReady cl then -1 else 1)}),
+        ModifyClient (\c -> c{isReady = not $ isReady cl}),
+        AnswerClients chans $ if clientProto cl < 38 then
+                [if isReady cl then "NOT_READY" else "READY", nick cl]
+                else
+                ["CLIENT_FLAGS", if isReady cl then "-r" else "+r", nick cl]
+        ]
 
 
 handleCmd_inRoom ["START_GAME"] = do
@@ -336,7 +331,7 @@
     chans <- roomSameClanChans
     return [AnswerClients chans ["EM", engineMsg cl]]
     where
-        engineMsg cl = toEngineMsg $ B.concat ["b", nick cl, "(team): ", msg, "\x20\x20"]
+        engineMsg cl = toEngineMsg $ B.concat ["b", nick cl, " (team): ", msg, "\x20\x20"]
 
 
 handleCmd_inRoom ["BAN", banNick] = do
@@ -353,6 +348,10 @@
         else
         return []
 
+handleCmd_inRoom ("RND":rs) = do
+    n <- clientNick
+    s <- roomClientsChans
+    return [AnswerClients s ["CHAT", n, B.unwords $ "/rnd" : rs], Random s rs]
 
 handleCmd_inRoom ["LIST"] = return [] -- for old clients (<= 0.9.17)
 
--- a/gameServer/HWProtoLobbyState.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/HWProtoLobbyState.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,6 @@
 {-# LANGUAGE OverloadedStrings #-}
 module HWProtoLobbyState where
 
-import qualified Data.Map as Map
 import Data.Maybe
 import Data.List
 import Control.Monad.Reader
@@ -51,7 +50,7 @@
             [
                 AddRoom rName roomPassword
                 , AnswerClients [sendChan cl] ["CLIENT_FLAGS", "+hr", nick cl]
-                , ModifyClient (\c -> c{isMaster = True, isReady = True})
+                , ModifyClient (\c -> c{isMaster = True, isReady = True, isJoinedMidGame = False})
                 , ModifyRoom (\r -> r{readyPlayers = 1})
             ]
 
@@ -87,17 +86,15 @@
             else
             [
                 MoveToRoom jRI
+                , ModifyClient (\c -> c{isJoinedMidGame = isJust $ gameInfo jRoom})
                 , AnswerClients [sendChan cl] $ "JOINED" : nicks
                 , AnswerClients chans ["CLIENT_FLAGS", "-r", nick cl]
                 , AnswerClients [sendChan cl] $ ["CLIENT_FLAGS", "+h", ownerNick]
             ]
             ++ (if clientProto cl < 38 then map (readynessMessage cl) jRoomClients else [sendStateFlags cl jRoomClients])
-            ++ [AnswerClients [sendChan cl] ["PING"]
-                , ModifyClient $ \c -> c{actionsPending = actionsPending cl
-                    ++ answerFullConfig cl (mapParams jRoom) (params jRoom)
-                    ++ answerTeams cl jRoom
-                    ++ watchRound cl jRoom chans}
-                ]
+            ++ answerFullConfig cl jRoom
+            ++ answerTeams cl jRoom
+            ++ watchRound cl jRoom chans
 
         where
         readynessMessage cl c = AnswerClients [sendChan cl] [if isReady c then "READY" else "NOT_READY", nick c]
@@ -108,18 +105,9 @@
             (ingame, inroomlobby) = partition isInGame clients
             f fl lst = ["CLIENT_FLAGS" : fl : map nick lst | not $ null lst]
 
-        toAnswer cl (paramName, paramStrs) = AnswerClients [sendChan cl] $ "CFG" : paramName : paramStrs
-
-        answerFullConfig cl mpr pr
-            | clientProto cl < 38 = map (toAnswer cl) $
-                 (reverse . map (\(a, b) -> (a, [b])) $ Map.toList mpr)
-                 ++ (("SCHEME", pr Map.! "SCHEME")
-                 : (filter (\(p, _) -> p /= "SCHEME") $ Map.toList pr))
-
-            | otherwise = map (toAnswer cl) $
-                 ("FULLMAPCONFIG", Map.elems mpr)
-                 : ("SCHEME", pr Map.! "SCHEME")
-                 : (filter (\(p, _) -> p /= "SCHEME") $ Map.toList pr)
+        -- get config from gameInfo if possible, otherwise from room
+        answerFullConfig cl jRoom = let f r g = (if isJust $ gameInfo jRoom then g . fromJust . gameInfo else r) jRoom
+                                    in answerFullConfigParams cl (f mapParams giMapParams) (f params giParams)
 
         answerTeams cl jRoom = let f = if isJust $ gameInfo jRoom then teamsAtStart . fromJust . gameInfo else teams in answerAllTeams cl $ f jRoom
 
@@ -147,6 +135,11 @@
         else
         liftM ((:) (AnswerClients [clChan] ["JOINING", roomName])) $ handleCmd_lobby ["JOIN_ROOM", roomName]
 
+
+handleCmd_lobby ("RND":rs) = do
+    c <- liftM sendChan thisClient
+    return [Random [c] rs]
+
     ---------------------------
     -- Administrator's stuff --
 
--- a/gameServer/HandlerUtils.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/HandlerUtils.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -6,7 +6,7 @@
 
 import RoomsAndClients
 import CoreTypes
-import Actions
+
 
 thisClient :: Reader (ClientIndex, IRnC) ClientInfo
 thisClient = do
--- a/gameServer/NetRoutines.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/NetRoutines.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -44,10 +44,10 @@
                     False
                     False
                     False
+                    False
                     Nothing
                     Nothing
                     0
-                    []
                     )
 
         writeChan chan $ Accept newClient
--- a/gameServer/OfficialServer/extdbinterface.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/OfficialServer/extdbinterface.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -14,7 +14,7 @@
 
 
 dbQueryAccount =
-    "SELECT users.pass, users_roles.rid FROM users LEFT JOIN users_roles ON users.uid = users_roles.uid WHERE users.name = ?"
+    "SELECT users.pass, users_roles.rid FROM users LEFT JOIN users_roles ON (users.uid = users_roles.uid AND users_roles.rid = 3) WHERE users.name = ?"
 
 dbQueryStats =
     "INSERT INTO gameserver_stats (players, rooms, last_update) VALUES (?, ?, UNIX_TIMESTAMP())"
@@ -29,7 +29,7 @@
                 execute statement [SqlByteString clNick]
                 passAndRole <- fetchRow statement
                 finish statement
-                let response = 
+                let response =
                         if isJust passAndRole then
                         (
                             clId,
--- a/gameServer/Utils.hs	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/Utils.hs	Thu Jun 13 22:27:23 2013 +0200
@@ -56,7 +56,7 @@
             t : replaceTeam tm ts
 
 illegalName :: B.ByteString -> Bool
-illegalName s = B.null s || B.all isSpace s || isSpace (B.head s) || isSpace (B.last s) || B.any isIllegalChar s
+illegalName s = B.null s || B.length s > 40 || B.all isSpace s || isSpace (B.head s) || isSpace (B.last s) || B.any isIllegalChar s
     where
         isIllegalChar c = c `List.elem` "$()*+?[]^{|}"
 
@@ -90,6 +90,8 @@
             , (42, "0.9.18-dev")
             , (43, "0.9.18")
             , (44, "0.9.19-dev")
+            , (45, "0.9.19")
+            , (46, "0.9.20-dev")
             ]
 
 askFromConsole :: B.ByteString -> IO B.ByteString
@@ -135,5 +137,25 @@
         head (Map.findWithDefault ["Default"] "AMMO" (params r))
         ]
 
+
+answerFullConfigParams ::
+            ClientInfo
+            -> Map.Map B.ByteString B.ByteString
+            -> Map.Map B.ByteString [B.ByteString]
+            -> [Action]
+answerFullConfigParams cl mpr pr
+        | clientProto cl < 38 = map (toAnswer cl) $
+                (reverse . map (\(a, b) -> (a, [b])) $ Map.toList mpr)
+                ++ (("SCHEME", pr Map.! "SCHEME")
+                : (filter (\(p, _) -> p /= "SCHEME") $ Map.toList pr))
+
+        | otherwise = map (toAnswer cl) $
+                ("FULLMAPCONFIG", Map.elems mpr)
+                : ("SCHEME", pr Map.! "SCHEME")
+                : (filter (\(p, _) -> p /= "SCHEME") $ Map.toList pr)
+    where
+        toAnswer cl (paramName, paramStrs) = AnswerClients [sendChan cl] $ "CFG" : paramName : paramStrs
+
+
 loc :: B.ByteString -> B.ByteString
 loc = id
--- a/gameServer/hedgewars-server.cabal	Tue Apr 30 01:47:30 2013 +0200
+++ b/gameServer/hedgewars-server.cabal	Thu Jun 13 22:27:23 2013 +0200
@@ -22,6 +22,7 @@
     bytestring,
     bytestring-show,
     network >= 2.3,
+    random,
     time,
     mtl >= 2,
     dataenc,
--- a/hedgewars/ArgParsers.inc	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/ArgParsers.inc	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -170,9 +170,9 @@
       mediaArray: Array [1..10] of String = ('--fullscreen-width', '--fullscreen-height', '--width', '--height', '--depth', '--volume','--nomusic','--nosound','--locale','--fullscreen');
       allArray: Array [1..14] of String = ('--fullscreen-width','--fullscreen-height', '--width', '--height', '--depth','--volume','--nomusic','--nosound','--locale','--fullscreen','--showfps','--altdmg','--frame-interval','--low-quality');
       reallyAll: array[0..30] of shortstring = (
-                '--prefix', '--user-prefix', '--locale', '--fullscreen-width', '--fullscreen-height', '--width', 
+                '--prefix', '--user-prefix', '--locale', '--fullscreen-width', '--fullscreen-height', '--width',
                 '--height', '--frame-interval', '--volume','--nomusic', '--nosound',
-                '--fullscreen', '--showfps', '--altdmg', '--low-quality', '--raw-quality', '--stereo', '--nick', 
+                '--fullscreen', '--showfps', '--altdmg', '--low-quality', '--raw-quality', '--stereo', '--nick',
   {deprecated}  '--depth', '--set-video', '--set-audio', '--set-other', '--set-multimedia', '--set-everything',
   {internal}    '--internal', '--port', '--recorder', '--landpreview',
   {misc}        '--stats-only', '--gci', '--help');
@@ -189,12 +189,12 @@
         {--prefix}               0 : PathPrefix        := getStringParameter (arg, paramIndex, parseParameter);
         {--user-prefix}          1 : UserPathPrefix    := getStringParameter (arg, paramIndex, parseParameter);
         {--locale}               2 : cLocaleFName      := getStringParameter (arg, paramIndex, parseParameter);
-        {--fullscreen-width}     3 : cFullscreenWidth  := getLongIntParameter(arg, paramIndex, parseParameter);
-        {--fullscreen-height}    4 : cFullscreenHeight := getLongIntParameter(arg, paramIndex, parseParameter);
-        {--width}                5 : cWindowedWidth    := getLongIntParameter(arg, paramIndex, parseParameter);
-        {--height}               6 : cWindowedHeight   := getLongIntParameter(arg, paramIndex, parseParameter);
+        {--fullscreen-width}     3 : cFullscreenWidth  := max(getLongIntParameter(arg, paramIndex, parseParameter), cMinScreenWidth);
+        {--fullscreen-height}    4 : cFullscreenHeight := max(getLongIntParameter(arg, paramIndex, parseParameter), cMinScreenHeight);
+        {--width}                5 : cWindowedWidth    := max(2 * (getLongIntParameter(arg, paramIndex, parseParameter) div 2), cMinScreenWidth);
+        {--height}               6 : cWindowedHeight   := max(2 * (getLongIntParameter(arg, paramIndex, parseParameter) div 2), cMinScreenHeight);
         {--frame-interval}       7 : cTimerInterval    := getLongIntParameter(arg, paramIndex, parseParameter);
-        {--volume}               8 : SetVolume          ( getLongIntParameter(arg, paramIndex, parseParameter) );
+        {--volume}               8 : SetVolume          ( max(getLongIntParameter(arg, paramIndex, parseParameter), 0) );
         {--nomusic}              9 : SetMusic           ( false );
         {--nosound}             10 : SetSound           ( false );
         {--fullscreen}          11 : cFullScreen       := true;
@@ -270,7 +270,7 @@
             end;
         inc(index);
         end;
-    
+
     WriteLn(stdout, 'Attempted to automatically convert to the new syntax:');
     WriteLn(stdout, newSyntax);
     WriteLn(stdout, '');
--- a/hedgewars/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -5,10 +5,7 @@
 find_package(SDL_mixer)
 
 include (CheckLibraryExists)
-#Mix_Init/Mix_Quit from SDL_mixer 1.2.10
-check_library_exists(${SDLMIXER_LIBRARY} Mix_Init "" HAVE_MIXINIT)
-#IMG_Init/IMG_Quit from SDL_image 1.2.8
-check_library_exists(${SDLIMAGE_LIBRARY} IMG_Init "" HAVE_IMGINIT)
+
 
 enable_language(Pascal)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.inc.in ${CMAKE_CURRENT_BINARY_DIR}/config.inc)
@@ -84,6 +81,10 @@
     ${CMAKE_CURRENT_BINARY_DIR}/config.inc
     )
 
+if(${BUILD_ENGINE_LIBRARY})
+    message("*** Engine will be built as library (experimental) ***")
+    list(APPEND pascal_flags "-dHWLIBRARY")
+endif()
 
 include(${CMAKE_MODULE_PATH}/utils.cmake)
 
@@ -143,20 +144,23 @@
 
 find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP")
 if(PNG_FOUND)
-    get_filename_component(PNG_LIB_DIR ${PNG_LIBRARY} PATH)
-    add_definitions(-dPNG_SCREENSHOTS)
-    add_flag_append(CMAKE_Pascal_FLAGS -Fl${PNG_LIB_DIR})
+    list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path
+    get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH)
+    list(APPEND pascal_flags "-dPNG_SCREENSHOTS" "-Fl${PNG_LIBRARY_DIR}" "-k-L${PNG_LIBRARY_DIR}")
 endif()
 
-if(NOT LUA_FOUND)
-    list(APPEND HW_LINK_LIBS lua)
-    add_flag_append(CMAKE_Pascal_FLAGS -k${EXECUTABLE_OUTPUT_PATH}/lib${LUA_LIBRARY}.a)
-    #linking with liblua.a requires system readline
-    if(UNIX)
-        add_flag_append(CMAKE_Pascal_FLAGS -k-lreadline)
-    endif(UNIX)
+if(LUA_FOUND AND LUA_SYSTEM)
+    get_filename_component(LUA_LIBRARY_DIR ${LUA_LIBRARY} PATH)
+    get_filename_component(LUA_LIBRARY_NAME ${LUA_LIBRARY} NAME)
+    #NAME_WE would strip the .1 (or .2) next to the ".so"
+    string(REGEX REPLACE "${CMAKE_SHARED_LIBRARY_PREFIX}(.*)${CMAKE_SHARED_LIBRARY_SUFFIX}" "\\1" LUA_LIBRARY_NAME "${LUA_LIBRARY_NAME}")
+    list(APPEND pascal_flags )
+    list(APPEND pascal_flags "-Fl${LUA_LIBRARY_DIR}"
+                             "-k-L${LUA_LIBRARY_DIR}"
+                             "-XLAlua=${LUA_LIBRARY_NAME}")
 endif()
 
+
 if(NOT PHYSFS_FOUND)
     add_definitions(-dPHYSFS_INTERNAL)
     list(APPEND HW_LINK_LIBS physfs)
@@ -167,14 +171,19 @@
 endif()
 list(APPEND HW_LINK_LIBS physlayer)
 
+#Mix_Init/Mix_Quit from SDL_mixer 1.2.10
+check_library_exists(${SDLMIXER_LIBRARY} Mix_Init "" HAVE_MIXINIT)
 if(HAVE_MIXINIT)
     add_definitions(-dSDL_MIXER_NEWER)
 endif(HAVE_MIXINIT)
 
+#IMG_Init/IMG_Quit from SDL_image 1.2.8
+check_library_exists(${SDLIMAGE_LIBRARY} IMG_Init "" HAVE_IMGINIT)
 if(HAVE_IMGINIT)
     add_definitions(-dSDL_IMAGE_NEWER)
 endif(HAVE_IMGINIT)
 
+#needs to be last
 add_definitions(-dDEBUGFILE)
 
 #SOURCE AND PROGRAMS SECTION
--- a/hedgewars/GL.h	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#pragma once
-
-#include <GL/gl.h>
--- a/hedgewars/GSHandlers.inc	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/GSHandlers.inc	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -53,7 +53,7 @@
         sX:= dX / steps;
         sY:= dY / steps;
         end
-        
+
     else
         begin
         sX:= dX;
@@ -75,7 +75,7 @@
 end;
 
 procedure makeHogsWorry(x, y: hwFloat; r: LongInt);
-var 
+var
     gi: PGear;
     d: LongInt;
 begin
@@ -89,7 +89,7 @@
                 begin
                 if (CurrentHedgehog^.Gear = gi) then
                     PlaySoundV(sndOops, gi^.Hedgehog^.Team^.voicepack)
-                    
+
                 else
                     begin
                     if ((gi^.State and gstMoving) = 0) and (gi^.Hedgehog^.Effects[heFrozen] = 0) then
@@ -97,15 +97,15 @@
                         gi^.dX.isNegative:= X<gi^.X;
                         gi^.State := gi^.State or gstLoser;
                         end;
-                        
+
                     if d > r div 2 then
-                        PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack) 
+                        PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack)
                     else
                         PlaySoundV(sndUhOh, gi^.Hedgehog^.Team^.voicepack);
                     end;
                 end;
             end;
-            
+
         gi := gi^.NextGear
         end;
 end;
@@ -116,10 +116,10 @@
     DeleteCI(HH^.Gear);
     if FollowGear = HH^.Gear then
         FollowGear:= nil;
-        
+
     if lastGearByUID = HH^.Gear then
         lastGearByUID := nil;
-    
+
     HH^.Gear^.Message:= HH^.Gear^.Message or gmRemoveFromList;
     with HH^.Gear^ do
         begin
@@ -154,7 +154,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFallingGear(Gear: PGear);
-var 
+var
     isFalling: boolean;
     //tmp: QWord;
     tdX, tdY: hwFloat;
@@ -162,23 +162,17 @@
     land: word;
 begin
     // clip velocity at 2 - over 1 per pixel, but really shouldn't cause many actual problems.
-{$IFNDEF WEB}
     if Gear^.dX.Round > 2 then
         Gear^.dX.QWordValue:= 8589934592;
     if Gear^.dY.Round > 2 then
         Gear^.dY.QWordValue:= 8589934592;
-{$ELSE}
-    if Gear^.dX.Round > 2 then
-        begin
-        Gear^.dX.Round:= 2;
-        Gear^.dX.Frac:= 0
+
+    if (Gear^.State and gstSubmersible <> 0) and (hwRound(Gear^.Y) > cWaterLine) then
+        begin
+        Gear^.dX:= Gear^.dX * _0_999;
+        Gear^.dY:= Gear^.dY * _0_999
         end;
-    if Gear^.dY.QWordValue > 2 then
-        begin
-        Gear^.dY.Round:= 2;
-        Gear^.dY.Frac:= 0
-        end;
-{$ENDIF}
+
     Gear^.State := Gear^.State and (not gstCollision);
     collV := 0;
     collH := 0;
@@ -186,6 +180,7 @@
     tdY := Gear^.dY;
 
 
+
 // might need some testing/adjustments - just to avoid projectiles to fly forever (accelerated by wind/skips)
     if (hwRound(Gear^.X) < min(LAND_WIDTH div -2, -2048))
     or (hwRound(Gear^.X) > max(LAND_WIDTH * 3 div 2, 6144)) then
@@ -209,16 +204,16 @@
         else if (Gear^.AdvBounce=1) and (TestCollisionYwithGear(Gear, 1) <> 0) then
             collV := 1;
         end
-    else 
+    else
         begin // Gear^.dY.isNegative is false
         land:= TestCollisionYwithGear(Gear, 1);
         if land <> 0 then
             begin
             collV := 1;
             isFalling := false;
-            if land and lfIce <> 0 then 
+            if land and lfIce <> 0 then
                 Gear^.dX := Gear^.dX * (_0_9 + Gear^.Friction * _0_1)
-            else 
+            else
                 Gear^.dX := Gear^.dX * Gear^.Friction;
 
             Gear^.dY := - Gear^.dY * Gear^.Elasticity;
@@ -241,7 +236,7 @@
         Gear^.State := Gear^.State or gstCollision
         end
     else if (Gear^.AdvBounce=1) and TestCollisionXwithGear(Gear, -hwSign(Gear^.dX)) then
-        collH := -hwSign(Gear^.dX); 
+        collH := -hwSign(Gear^.dX);
     //if Gear^.AdvBounce and (collV <>0) and (collH <> 0) and (hwSqr(tdX) + hwSqr(tdY) > _0_08) then
     if (Gear^.AdvBounce=1) and (collV <>0) and (collH <> 0) and ((collV=-1)
     or ((tdX.QWordValue + tdY.QWordValue) > _0_2.QWordValue)) then
@@ -274,18 +269,18 @@
     else
         Gear^.State := Gear^.State or gstMoving;
 
-    if (Gear^.nImpactSounds > 0) and 
+    if (Gear^.nImpactSounds > 0) and
         (Gear^.State and gstCollision <> 0) and
         (((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and
         (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or
-            ((Gear^.Radius >= 3) and 
+            ((Gear^.Radius >= 3) and
                 ((Gear^.dX.QWordValue > _0_1.QWordValue) or (Gear^.dY.QWordValue > _0_1.QWordValue)))) then
         PlaySound(TSound(ord(Gear^.ImpactSound) + LongInt(GetRandom(Gear^.nImpactSounds))), true);
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepBomb(Gear: PGear);
-var 
+var
     i, x, y: LongInt;
     dX, dY, gdX: hwFloat;
     vg: PVisualGear;
@@ -296,7 +291,7 @@
 
     dec(Gear^.Timer);
     if Gear^.Timer = 1000 then // might need adjustments
-        case Gear^.Kind of 
+        case Gear^.Kind of
             gtGrenade: makeHogsWorry(Gear^.X, Gear^.Y, 50);
             gtClusterBomb: makeHogsWorry(Gear^.X, Gear^.Y, 20);
             gtWatermelon: makeHogsWorry(Gear^.X, Gear^.Y, 75);
@@ -320,10 +315,10 @@
 
     if Gear^.Timer = 0 then
         begin
-        case Gear^.Kind of 
+        case Gear^.Kind of
             gtGrenade: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound);
             gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 40, Gear^.Hedgehog, EXPLAutoSound);
-            gtClusterBomb: 
+            gtClusterBomb:
                 begin
                 x := hwRound(Gear^.X);
                 y := hwRound(Gear^.Y);
@@ -336,7 +331,7 @@
                     FollowGear := AddGear(x, y, gtCluster, 0, dX, dY, 25)
                     end
                 end;
-            gtWatermelon: 
+            gtWatermelon:
                 begin
                 x := hwRound(Gear^.X);
                 y := hwRound(Gear^.Y);
@@ -350,7 +345,7 @@
                     FollowGear^.DirAngle := i * 60
                     end
                 end;
-            gtHellishBomb: 
+            gtHellishBomb:
                 begin
                 x := hwRound(Gear^.X);
                 y := hwRound(Gear^.Y);
@@ -366,7 +361,7 @@
                         AddGear(x, y, gtFlame, 0, dX, -dY, 0)
                         end
                     else
-                        begin 
+                        begin
                         AddGear(x, y, gtFlame, 0, dX, dY, 0);
                         AddGear(x, y, gtFlame, gstTmpFlag, dX, -dY, 0)
                         end;
@@ -406,7 +401,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepMolotov(Gear: PGear);
-var 
+var
     s: Longword;
     i, gX, gY: LongInt;
     dX, dY: hwFloat;
@@ -418,15 +413,14 @@
     CalcRotationDirAngle(Gear);
 
     // let's add some smoke depending on speed
-    s:= max(32,152 - hwRound(Distance(Gear^.dX,Gear^.dY)*120))+random(10);
+    s:= max(32,152 - round((abs(hwFloat2FLoat(Gear^.dX))+abs(hwFloat2Float(Gear^.dY)))*120))+random(10);
     if (GameTicks mod s) = 0 then
         begin
         // adjust angle to match the texture
         if Gear^.dX.isNegative then
-            i:= 130
-        else
-            i:= 50;
-            
+             i:= 130
+        else i:= 50;
+
         smoke:= AddVisualGear(hwRound(Gear^.X)-round(cos((Gear^.DirAngle+i) * pi / 180)*20), hwRound(Gear^.Y)-round(sin((Gear^.DirAngle+i) * pi / 180)*20), vgtSmoke);
         if smoke <> nil then
             smoke^.Scale:= 0.75;
@@ -493,7 +487,11 @@
     or (Gear^.Kind = gtBall) then
         CalcRotationDirAngle(Gear)
     else if (GameTicks and $1F) = 0 then
-        AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
+        begin
+        if hwRound(Gear^.Y) > cWaterLine then
+             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
+        else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
+        end
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -510,24 +508,31 @@
         exit
         end;
     if (GameTicks and $3F) = 0 then
-        AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
+        begin
+        if hwRound(Gear^.Y) > cWaterLine then
+             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
+        else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
+        end
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepSnowball(Gear: PGear);
 var kick, i: LongInt;
     particle: PVisualGear;
+    gdX, gdY: hwFloat;
 begin
     AllInactive := false;
     if (GameFlags and gfMoreWind) = 0 then
         Gear^.dX := Gear^.dX + cWindSpeed;
+    gdX := Gear^.dX;
+    gdY := Gear^.dY;
     doStepFallingGear(Gear);
     CalcRotationDirAngle(Gear);
     if (Gear^.State and gstCollision) <> 0 then
         begin
-        kick:= hwRound((hwAbs(Gear^.dX)+hwAbs(Gear^.dY)) * _20);
-        Gear^.dY.isNegative:= not Gear^.dY.isNegative;
-        Gear^.dX.isNegative:= not Gear^.dX.isNegative;
+        kick:= hwRound((hwAbs(gdX)+hwAbs(gdY)) * _20);
+        Gear^.dX:= gdX;
+        Gear^.dY:= gdY;
         AmmoShove(Gear, 0, kick);
         for i:= 15 + kick div 10 downto 0 do
             begin
@@ -669,7 +674,7 @@
                             begin
                             rx:= rx div 2;ry:= ry div 2;
                             end;
-                        if Land[yy + py, xx + px] and $FF00 = 0 then
+                        if Land[yy + py, xx + px] <= lfAllObjMask then
                             if gun then
                                 begin
                                 LandDirty[yy div 32, xx div 32]:= 1;
@@ -686,10 +691,10 @@
                     end;
                 p:= @(p^[s^.pitch shr 2])
                 end;
-            
-            // Why is this here.  For one thing, there's no test on +1 being safe. 
+
+            // Why is this here.  For one thing, there's no test on +1 being safe.
             //Land[py, px+1]:= lfBasic;
-            
+
             if allpx then
                 UpdateLandTexture(xx, Pred(s^.h), yy, Pred(s^.w), true)
             else
@@ -754,7 +759,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepBeeWork(Gear: PGear);
-var 
+var
     t: hwFloat;
     gX,gY,i: LongInt;
     uw, nuw: boolean;
@@ -869,7 +874,7 @@
         Gear^.Hedgehog^.Gear^.Message:= Gear^.Hedgehog^.Gear^.Message and (not gmAttack);
         Gear^.Hedgehog^.Gear^.State:= Gear^.Hedgehog^.Gear^.State and (not gstAttacking);
         AttackBar:= 0;
-        
+
         Gear^.SoundChannel := LoopSound(sndBee);
         Gear^.Timer := 5000;
         // save initial speed in otherwise unused Friction variable
@@ -891,7 +896,7 @@
 end;
 
 procedure doStepShotgunShot(Gear: PGear);
-var 
+var
     i: LongWord;
     shell: PVisualGear;
 begin
@@ -967,7 +972,7 @@
 
         // Bullet trail
         VGear := AddVisualGear(hwRound(ox), hwRound(oy), vgtLineTrail);
-        
+
         if VGear <> nil then
             begin
             VGear^.X:= hwFloat2Float(ox);
@@ -990,7 +995,7 @@
 end;
 
 procedure doStepBulletWork(Gear: PGear);
-var 
+var
     i, x, y: LongWord;
     oX, oY: hwFloat;
     VGear: PVisualGear;
@@ -1005,11 +1010,11 @@
         Gear^.Y := Gear^.Y + Gear^.dY;
         x := hwRound(Gear^.X);
         y := hwRound(Gear^.Y);
-        
+
         if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) and (Land[y, x] <> 0) then
             inc(Gear^.Damage);
         // let's interrupt before a collision to give portals a chance to catch the bullet
-        if (Gear^.Damage = 1) and (Gear^.Tag = 0) and not(CheckLandValue(x, y, $FF00)) then
+        if (Gear^.Damage = 1) and (Gear^.Tag = 0) and not(CheckLandValue(x, y, lfLandMask)) then
             begin
             Gear^.Tag := 1;
             Gear^.Damage := 0;
@@ -1027,7 +1032,7 @@
         else
             AmmoShove(Gear, Gear^.Timer, 20);
         CheckGearDrowning(Gear);
-        dec(i) 
+        dec(i)
     until (i = 0) or (Gear^.Damage > Gear^.Health) or ((Gear^.State and gstDrowning) <> 0);
 
     if Gear^.Damage > 0 then
@@ -1055,7 +1060,7 @@
                 cLaserSighting := false;
             if (Ammoz[Gear^.AmmoType].Ammo.NumPerTurn <= CurrentHedgehog^.MultiShootAttacks) and ((GameFlags and gfArtillery) = 0) then
                 cArtillery := false;
-        
+
         // Bullet Hit
             if (hwRound(Gear^.X) and LAND_WIDTH_MASK = 0) and (hwRound(Gear^.Y) and LAND_HEIGHT_MASK = 0) then
                 begin
@@ -1065,7 +1070,7 @@
                     VGear^.Angle := DxDy2Angle(-Gear^.dX, Gear^.dY);
                     end;
                 end;
-       
+
             spawnBulletTrail(Gear);
             Gear^.doStep := @doStepShotIdle
             end;
@@ -1081,7 +1086,7 @@
 end;
 
 procedure doStepSniperRifleShot(Gear: PGear);
-var 
+var
     HHGear: PGear;
     shell: PVisualGear;
 begin
@@ -1112,7 +1117,7 @@
         Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5;
         PlaySound(sndGun);
         // add 3 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles
-        Gear^.X := Gear^.X + Gear^.dX * 3;  
+        Gear^.X := Gear^.X + Gear^.dX * 3;
         Gear^.Y := Gear^.Y + Gear^.dY * 3;
         Gear^.doStep := @doStepBulletWork;
         end
@@ -1141,7 +1146,7 @@
 begin
 dec(Gear^.Timer);
 case Gear^.Kind of
-    gtATStartGame: 
+    gtATStartGame:
         begin
         AllInactive := false;
         if Gear^.Timer = 0 then
@@ -1149,7 +1154,7 @@
             AddCaption(trmsg[sidStartFight], cWhiteColor, capgrpGameState);
             end
         end;
-    gtATFinishGame: 
+    gtATFinishGame:
         begin
         AllInactive := false;
         if Gear^.Timer = 1000 then
@@ -1172,7 +1177,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepPickHammerWork(Gear: PGear);
-var 
+var
     i, ei, x, y: LongInt;
     HHGear: PGear;
 begin
@@ -1231,7 +1236,7 @@
         end
     else
         begin
-        if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y + Gear^.dY + cGravity), $FF00) then
+        if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y + Gear^.dY + cGravity), lfLandMask) then
             begin
             Gear^.dY := Gear^.dY + cGravity;
             Gear^.Y := Gear^.Y + Gear^.dY
@@ -1241,7 +1246,7 @@
         end;
 
     Gear^.X := Gear^.X + HHGear^.dX;
-    if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y)-cHHRadius, $FF00) then
+    if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y)-cHHRadius, lfLandMask) then
         begin
         HHGear^.X := Gear^.X;
         HHGear^.Y := Gear^.Y - int2hwFloat(cHHRadius)
@@ -1263,7 +1268,7 @@
 end;
 
 procedure doStepPickHammer(Gear: PGear);
-var 
+var
     i, y: LongInt;
     ar: TRangeArray;
     HHGear: PGear;
@@ -1290,11 +1295,11 @@
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
-var 
+var
     BTPrevAngle, BTSteps: LongInt;
 
 procedure doStepBlowTorchWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
     b: boolean;
     prevX: LongInt;
@@ -1303,7 +1308,7 @@
     dec(Gear^.Timer);
     if ((GameFlags and gfInfAttack) <> 0) and (TurnTimeLeft > 0) then
         dec(TurnTimeLeft);
-    
+
     HHGear := Gear^.Hedgehog^.Gear;
 
     HedgehogChAngle(HHGear);
@@ -1384,7 +1389,7 @@
 end;
 
 procedure doStepBlowTorch(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     BTPrevAngle := High(LongInt);
@@ -1406,7 +1411,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepMine(Gear: PGear);
 var vg: PVisualGear;
+    dxdy: hwFloat;
 begin
+    if Gear^.Health = 0 then dxdy:= hwAbs(Gear^.dX)+hwAbs(Gear^.dY);
     if (Gear^.State and gstMoving) <> 0 then
         begin
         DeleteCI(Gear);
@@ -1424,15 +1431,9 @@
         doStepFallingGear(Gear);
     if (Gear^.Health = 0) then
         begin
-        if not Gear^.dY.isNegative and (Gear^.dY > _0_2) and (TestCollisionYwithGear(Gear, 1) <> 0) then
-            inc(Gear^.Damage, hwRound(Gear^.dY * _70))
-        else if not Gear^.dX.isNegative and (Gear^.dX > _0_2) and TestCollisionXwithGear(Gear, 1) then
-            inc(Gear^.Damage, hwRound(Gear^.dX * _70))
-        else if Gear^.dY.isNegative and (Gear^.dY < -_0_2) and (TestCollisionYwithGear(Gear, -1) <> 0) then
-            inc(Gear^.Damage, hwRound(Gear^.dY * -_70))
-        else if Gear^.dX.isNegative and (Gear^.dX < -_0_2) and TestCollisionXwithGear(Gear, -1) then
-            inc(Gear^.Damage, hwRound(Gear^.dX * -_70));
-        
+        if (dxdy > _0_4) and (Gear^.State and gstCollision <> 0) then
+            inc(Gear^.Damage, hwRound(dxdy * _50));
+
         if ((GameTicks and $FF) = 0) and (Gear^.Damage > random(30)) then
             begin
             vg:= AddVisualGear(hwRound(Gear^.X) - 4  + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke);
@@ -1494,9 +1495,9 @@
 procedure doStepSMine(Gear: PGear);
 begin
     // TODO: do real calculation?
-    if TestCollisionXwithGear(Gear, 2) 
-    or (TestCollisionYwithGear(Gear, -2) <> 0) 
-    or TestCollisionXwithGear(Gear, -2) 
+    if TestCollisionXwithGear(Gear, 2)
+    or (TestCollisionYwithGear(Gear, -2) <> 0)
+    or TestCollisionXwithGear(Gear, -2)
     or (TestCollisionYwithGear(Gear, 2) <> 0) then
         begin
         if (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then
@@ -1565,46 +1566,38 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-(*
-TODO
-Increase damage as barrel smokes?
-Try tweaking friction some more
-*)
 procedure doStepRollingBarrel(Gear: PGear);
-var 
+var
     i: LongInt;
     particle: PVisualGear;
+    dxdy: hwFloat;
 begin
     if (Gear^.dY.QWordValue = 0) and (Gear^.dY.QWordValue = 0) and (TestCollisionYwithGear(Gear, 1) = 0) then
         SetLittle(Gear^.dY);
     Gear^.State := Gear^.State or gstAnimation;
-    
+    if Gear^.Health < cBarrelHealth then Gear^.State:= Gear^.State and not gstFrozen;
+
     if ((Gear^.dX.QWordValue <> 0)
     or (Gear^.dY.QWordValue <> 0))  then
         begin
         DeleteCI(Gear);
         AllInactive := false;
-        if not Gear^.dY.isNegative and (Gear^.dY > _0_2) and (TestCollisionYwithGear(Gear, 1) <> 0) then
+        dxdy:= hwAbs(Gear^.dX)+hwAbs(Gear^.dY);
+        doStepFallingGear(Gear);
+        if (Gear^.State and gstCollision <> 0) and(dxdy > _0_4) then
             begin
-            Gear^.State := Gear^.State or gsttmpFlag;
-            inc(Gear^.Damage, hwRound(Gear^.dY * _70));
-            for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
+            if (TestCollisionYwithGear(Gear, 1) <> 0) then
                 begin
-                particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12,vgtDust);
-                if particle <> nil then
-                    particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480)
-                end
-            end
-        else if not Gear^.dX.isNegative and (Gear^.dX > _0_2) and TestCollisionXwithGear(Gear, 1) then
-                inc(Gear^.Damage, hwRound(Gear^.dX * _70))
-                
-        else if Gear^.dY.isNegative and (Gear^.dY < -_0_2) and (TestCollisionYwithGear(Gear, -1) <> 0) then
-                inc(Gear^.Damage, hwRound(Gear^.dY * -_70))
-                
-        else if Gear^.dX.isNegative and (Gear^.dX < -_0_2) and TestCollisionXwithGear(Gear, -1) then
-                inc(Gear^.Damage, hwRound(Gear^.dX * -_70));
-
-        doStepFallingGear(Gear);
+                Gear^.State := Gear^.State or gsttmpFlag;
+                for i:= min(12, hwRound(dxdy*_10)) downto 0 do
+                    begin
+                    particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12,vgtDust);
+                    if particle <> nil then
+                        particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480)
+                    end
+                end;
+            inc(Gear^.Damage, hwRound(dxdy * _50))
+            end;
         CalcRotationDirAngle(Gear);
         //CheckGearDrowning(Gear)
         end
@@ -1643,23 +1636,19 @@
     dec(Gear^.Health, Gear^.Damage);
     Gear^.Damage := 0;
     if Gear^.Health <= 0 then
-        Gear^.doStep := @doStepCase;
-    // Hand off to doStepCase for the explosion
-
+        doStepCase(Gear);
 end;
 
 procedure doStepCase(Gear: PGear);
-var 
+var
     i, x, y: LongInt;
     k: TGearType;
-    exBoom: boolean;
     dX, dY: HWFloat;
     hog: PHedgehog;
     sparkles: PVisualGear;
     gi: PGear;
 begin
     k := Gear^.Kind;
-    exBoom := false;
 
     if (Gear^.Message and gmDestroy) > 0 then
         begin
@@ -1672,25 +1661,57 @@
                 Gear^.Message := Gear^.Message and (not (gmLJump or gmHJump));
         exit
         end;
+    if (k = gtExplosives) and (Gear^.Health < cBarrelHealth) then Gear^.State:= Gear^.State and not gstFrozen;
+
+    if ((k <> gtExplosives) and (Gear^.Damage > 0)) or ((k = gtExplosives) and (Gear^.Health<=0)) then
+        begin
+        x := hwRound(Gear^.X);
+        y := hwRound(Gear^.Y);
+        hog:= Gear^.Hedgehog;
+
+        DeleteGear(Gear);
+        // <-- delete gear!
+
+        if k = gtCase then
+            begin
+            doMakeExplosion(x, y, 25, hog, EXPLAutoSound);
+            for i:= 0 to 63 do
+                AddGear(x, y, gtFlame, 0, _0, _0, 0);
+            end
+        else if k = gtExplosives then
+                begin
+                doMakeExplosion(x, y, 75, hog, EXPLAutoSound);
+                for i:= 0 to 31 do
+                    begin
+                    dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1);
+                    dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1);
+                    AddGear(x, y, gtFlame, 0, dX, dY, 0);
+                    AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0);
+                    end
+                end;
+            exit
+        end;
 
     if k = gtExplosives then
         begin
         //if V > _0_03 then Gear^.State:= Gear^.State or gstAnimation;
         if (hwAbs(Gear^.dX) > _0_15) or ((hwAbs(Gear^.dY) > _0_15) and (hwAbs(Gear^.dX) > _0_02)) then
+            begin
             Gear^.doStep := @doStepRollingBarrel;
-
-        if (Gear^.Health > 0) and ((Gear^.Health * 100 div cBarrelHealth) < random(90)) and ((GameTicks and $FF) = 0) then
+            exit;
+            end
+        else Gear^.dX:= _0;
+
+        if ((Gear^.Health * 100 div cBarrelHealth) < random(90)) and ((GameTicks and $FF) = 0) then
             if (cBarrelHealth div Gear^.Health) > 2 then
                 AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmoke)
-        else
-            AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmokeWhite);
+            else
+                AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmokeWhite);
         dec(Gear^.Health, Gear^.Damage);
         Gear^.Damage := 0;
-        if Gear^.Health <= 0 then
-            exBoom := true;
         end
     else
-        begin 
+        begin
         if (Gear^.Pos <> posCaseHealth) and (GameTicks and $1FFF = 0) then // stir 'em up periodically
             begin
             gi := GearsList;
@@ -1727,46 +1748,18 @@
                 sparkles^.dX:= 0;
                 sparkles^.dY:= 0;
                 sparkles^.Angle:= 270;
-                if Gear^.Tag = 1 then 
+                if Gear^.Tag = 1 then
                     sparkles^.Tint:= $3744D7FF
                 else sparkles^.Tint:= $FAB22CFF
                 end;
             end;
-        if Gear^.Timer < 1000 then 
+        if Gear^.Timer < 1000 then
             begin
             AllInactive:= false;
             exit
             end
         end;
 
-    if (Gear^.Damage > 0) or exBoom then
-        begin
-        x := hwRound(Gear^.X);
-        y := hwRound(Gear^.Y);
-        hog:= Gear^.Hedgehog;
-
-        DeleteGear(Gear);
-        // <-- delete gear!
-
-        if k = gtCase then
-            begin
-            doMakeExplosion(x, y, 25, hog, EXPLAutoSound);
-            for i:= 0 to 63 do
-                AddGear(x, y, gtFlame, 0, _0, _0, 0);
-            end
-        else if k = gtExplosives then
-                begin
-                doMakeExplosion(x, y, 75, hog, EXPLAutoSound);
-                for i:= 0 to 31 do
-                    begin
-                    dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1);
-                    dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1);
-                    AddGear(x, y, gtFlame, 0, dX, dY, 0);
-                    AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0);
-                    end
-                end;
-            exit
-        end;
 
     if (Gear^.dY.QWordValue <> 0)
     or (TestCollisionYwithGear(Gear, 1) = 0) then
@@ -1791,7 +1784,7 @@
             if Gear^.dY > _0_2 then
                 for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
                     AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
-                    
+
             Gear^.dY := - Gear^.dY * Gear^.Elasticity;
             if Gear^.dY > - _0_001 then
                 Gear^.dY := _0
@@ -1845,7 +1838,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepShover(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -1861,7 +1854,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepWhip(Gear: PGear);
-var 
+var
     HHGear: PGear;
     i: LongInt;
 begin
@@ -1883,7 +1876,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFlame(Gear: PGear);
-var 
+var
     gX,gY,i: LongInt;
     sticky: Boolean;
     vgt: PVisualGear;
@@ -1910,10 +1903,10 @@
 
         if Gear^.dX.QWordValue > _0_01.QWordValue then
             Gear^.dX := Gear^.dX * _0_995;
-            
+
         Gear^.dY := Gear^.dY + cGravity;
         // if sticky then Gear^.dY := Gear^.dY + cGravity;
-        
+
         if Gear^.dY.QWordValue > _0_2.QWordValue then
             Gear^.dY := Gear^.dY * _0_995;
 
@@ -1974,13 +1967,13 @@
                     Gear^.Radius := 1;
                     end
                 else if ((GameTicks and $3) = 3) then
-                    doMakeExplosion(gX, gY, 8, Gear^.Hedgehog, 0);//, EXPLNoDamage); 
+                    doMakeExplosion(gX, gY, 8, Gear^.Hedgehog, 0);//, EXPLNoDamage);
                 //DrawExplosion(gX, gY, 4);
-                
+
                 if ((GameTicks and $7) = 0) and (Random(2) = 0) then
                     for i:= Random(2) downto 0 do
                         AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke);
-                        
+
                 if Gear^.Health > 0 then
                     dec(Gear^.Health);
                 Gear^.Timer := 450 - Gear^.Tag * 8
@@ -2023,7 +2016,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFirePunchWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2060,7 +2053,7 @@
 end;
 
 procedure doStepFirePunch(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2083,7 +2076,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 procedure doStepParachuteWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -2112,13 +2105,13 @@
 
     if (Gear^.Message and gmLeft) <> 0 then
         HHGear^.X := HHGear^.X - cMaxWindSpeed * 80
-        
+
     else if (Gear^.Message and gmRight) <> 0 then
         HHGear^.X := HHGear^.X + cMaxWindSpeed * 80;
-        
+
     if (Gear^.Message and gmUp) <> 0 then
         HHGear^.Y := HHGear^.Y - cGravity * 40
-        
+
     else if (Gear^.Message and gmDown) <> 0 then
         HHGear^.Y := HHGear^.Y + cGravity * 40;
 
@@ -2131,7 +2124,7 @@
 end;
 
 procedure doStepParachute(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -2158,7 +2151,7 @@
     if (Gear^.Health > 0)and(not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then
         begin
         dec(Gear^.Health);
-            case Gear^.State of 
+            case Gear^.State of
                 0: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
                 1: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine,    0, cBombsSpeed * Gear^.Tag, _0, 0);
                 2: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtNapalmBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
@@ -2201,7 +2194,7 @@
 
     // calcs for Napalm Strike, so that it will hit the target (without wind at least :P)
     if (Gear^.State = 2) then
-        Gear^.dX := Gear^.dX - cBombsSpeed * Gear^.Tag * 900 
+        Gear^.dX := Gear^.dX - cBombsSpeed * Gear^.Tag * 900
     // calcs for regular falling gears
     else if (int2hwFloat(Gear^.Target.Y) - Gear^.Y > _0) then
             Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(Gear^.Target.Y) - Gear^.Y) * 2 /
@@ -2235,7 +2228,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 procedure doStepGirder(Gear: PGear);
-var 
+var
     HHGear: PGear;
     x, y, tx, ty: hwFloat;
 begin
@@ -2257,7 +2250,7 @@
         isCursorVisible := true;
         DeleteGear(Gear)
         end
-    else 
+    else
         begin
         PlaySound(sndPlaced);
         DeleteGear(Gear);
@@ -2270,7 +2263,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepTeleportAfter(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -2304,7 +2297,7 @@
 end;
 
 procedure doStepTeleport(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2345,7 +2338,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepSwitcherWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
     hedgehog: PHedgehog;
     State: Longword;
@@ -2380,12 +2373,12 @@
 
         repeat
             CurrentTeam^.CurrHedgehog := Succ(CurrentTeam^.CurrHedgehog) mod (CurrentTeam^.HedgehogsNumber);
-        until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and 
-              (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and 
+        until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and
+              (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and
               (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen]=0);
 
         SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]);
-        AmmoMenuInvalidated:= true; 
+        AmmoMenuInvalidated:= true;
 
         HHGear := CurrentHedgehog^.Gear;
         HHGear^.State := State;
@@ -2399,7 +2392,7 @@
 end;
 
 procedure doStepSwitcher(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     Gear^.doStep := @doStepSwitcherWork;
@@ -2415,28 +2408,27 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepMortar(Gear: PGear);
-var 
+var
     dX, dY, gdX, gdY: hwFloat;
     i: LongInt;
-    dxn, dyn: boolean;
 begin
     AllInactive := false;
-    dxn := Gear^.dX.isNegative;
-    dyn := Gear^.dY.isNegative;
+    gdX := Gear^.dX;
+    gdY := Gear^.dY;
 
     doStepFallingGear(Gear);
     if (Gear^.State and gstCollision) <> 0 then
         begin
-        gdX := Gear^.dX;
-        gdY := Gear^.dY;
         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, Gear^.Hedgehog, EXPLAutoSound);
-
-        gdX.isNegative := not dxn;
-        gdY.isNegative := not dyn;
+        gdX.isNegative := not gdX.isNegative;
+        gdY.isNegative := not gdY.isNegative;
+        gdX:= gdX*_0_2;
+        gdY:= gdY*_0_2;
+
         for i:= 0 to 4 do
             begin
-            dX := gdX + (GetRandomf - _0_5) * _0_03;
-            dY := gdY + (GetRandomf - _0_5) * _0_03;
+            dX := gdX + rndSign(GetRandomf) * _0_03;
+            dY := gdY + rndSign(GetRandomf) * _0_03;
             AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
             end;
 
@@ -2445,12 +2437,16 @@
         end;
 
     if (GameTicks and $3F) = 0 then
-        AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
+        begin
+        if hwRound(Gear^.Y) > cWaterLine then
+             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
+        else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
+        end
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepKamikazeWork(Gear: PGear);
-var 
+var
     i: LongWord;
     HHGear: PGear;
     sparkles: PVisualGear;
@@ -2485,7 +2481,7 @@
 
     i := 2;
     repeat
-        
+
         Gear^.X := Gear^.X + HHGear^.dX;
         Gear^.Y := Gear^.Y + HHGear^.dY;
         HHGear^.X := Gear^.X;
@@ -2568,7 +2564,7 @@
 end;
 
 procedure doStepKamikaze(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2589,7 +2585,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 const cakeh =   27;
-var 
+var
     CakePoints: array[0..Pred(cakeh)] of record
         x, y: hwFloat;
     end;
@@ -2609,7 +2605,7 @@
 end;
 
 procedure doStepCakeDown(Gear: PGear);
-var 
+var
     gi: PGear;
     dmg, dmgBase: LongInt;
     fX, fY, tdX, tdY: hwFloat;
@@ -2695,7 +2691,7 @@
 end;
 
 procedure doStepCakeUp(Gear: PGear);
-var 
+var
     i: Longword;
 begin
     AllInactive := false;
@@ -2735,14 +2731,14 @@
 end;
 
 procedure doStepCake(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
 
     HHGear := Gear^.Hedgehog^.Gear;
     HHGear^.Message := HHGear^.Message and (not gmAttack);
-    Gear^.CollisionMask:= lfCurrentMask;
+    Gear^.CollisionMask:= lfNotCurrentMask;
 
     FollowGear := Gear;
 
@@ -2839,7 +2835,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepWaterUp(Gear: PGear);
-var 
+var
     i: LongWord;
 begin
     if (Gear^.Tag = 0)
@@ -2873,28 +2869,28 @@
 forward;
 
 procedure doStepDrillDrilling(Gear: PGear);
-var 
+var
     t: PGearArray;
-    ox, oy: hwFloat;
-    tempColl: Word; 
+    tempColl: Word;
 begin
     AllInactive := false;
-
-    if (Gear^.Timer > 0) and ((Gear^.Timer mod 10) = 0) then
-    begin
-        ox := Gear^.X;
-        oy := Gear^.Y;
-        Gear^.X := Gear^.X + Gear^.dX;
-        Gear^.Y := Gear^.Y + Gear^.dY;
-        DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 2, 6);
-        if (Gear^.Timer mod 30) = 0 then
-            AddVisualGear(hwRound(Gear^.X + _20 * Gear^.dX), hwRound(Gear^.Y + _20 * Gear^.dY), vgtDust);
-        if (CheckGearDrowning(Gear)) then
-            begin
-            StopSoundChan(Gear^.SoundChannel);
-            exit
-        end
+    if (Gear^.Timer > 0) and (Gear^.Timer mod 10 <> 0) then
+        begin
+        dec(Gear^.Timer);
+        exit;
+        end;
+
+    DrawTunnel(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, 2, 6);
+    Gear^.X := Gear^.X + Gear^.dX;
+    Gear^.Y := Gear^.Y + Gear^.dY;
+    if (Gear^.Timer mod 30) = 0 then
+        AddVisualGear(hwRound(Gear^.X + _20 * Gear^.dX), hwRound(Gear^.Y + _20 * Gear^.dY), vgtDust);
+    if (CheckGearDrowning(Gear)) then
+        begin
+        StopSoundChan(Gear^.SoundChannel);
+        exit
     end;
+
     tempColl:= Gear^.CollisionMask;
     Gear^.CollisionMask:= $007F;
     if (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) <> 0) or TestCollisionXWithGear(Gear, hwSign(Gear^.dX)) or (GameTicks > Gear^.FlightTime) then
@@ -2902,7 +2898,7 @@
     else t := nil;
     Gear^.CollisionMask:= tempColl;
     //fixes drill not exploding when touching HH bug
-    
+
     if (Gear^.Timer = 0) or ((t <> nil) and (t^.Count <> 0))
     or ( ((Gear^.State and gsttmpFlag) = 0) and (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) = 0) and (not TestCollisionXWithGear(Gear, hwSign(Gear^.dX))))
 // CheckLandValue returns true if the type isn't matched
@@ -2917,7 +2913,7 @@
         DeleteGear(Gear);
         exit
         end
-        
+
     else if (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) = 0) and (not TestCollisionXWithGear(Gear, hwSign(Gear^.dX))) then
         begin
         StopSoundChan(Gear^.SoundChannel);
@@ -2929,7 +2925,7 @@
 end;
 
 procedure doStepDrill(Gear: PGear);
-var 
+var
     t: PGearArray;
     oldDx, oldDy: hwFloat;
     t2: hwFloat;
@@ -2945,7 +2941,11 @@
     doStepFallingGear(Gear);
 
     if (GameTicks and $3F) = 0 then
-        AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
+        begin
+        if hwRound(Gear^.Y) > cWaterLine then
+             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble)
+        else AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace)
+        end;
 
     if ((Gear^.State and gstCollision) <> 0) then
         begin
@@ -2953,7 +2953,7 @@
         Gear^.dX := oldDx;
         Gear^.dY := oldDy;
 
-        if GameTicks > Gear^.FlightTime then 
+        if GameTicks > Gear^.FlightTime then
             t := CheckGearsCollision(Gear)
         else
             t := nil;
@@ -2964,7 +2964,7 @@
             Gear^.dX := Gear^.dX * t2;
             Gear^.dY := Gear^.dY * t2;
             end
-            
+
         else if (t <> nil) then
             begin
             //explode right on contact with HH
@@ -2978,14 +2978,14 @@
 
         Gear^.SoundChannel := LoopSound(sndDrillRocket);
         Gear^.doStep := @doStepDrillDrilling;
-        
+
         if (Gear^.State and gsttmpFlag) <> 0 then
             gear^.RenderTimer:= true;
         if Gear^.Timer > 0 then dec(Gear^.Timer)
         end
     else if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Tag <> 0) then
         begin
-        if Gear^.Timer > 0 then 
+        if Gear^.Timer > 0 then
             dec(Gear^.Timer)
         else
             begin
@@ -2997,7 +2997,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepBallgunWork(Gear: PGear);
-var 
+var
     HHGear, ball: PGear;
     rx, ry: hwFloat;
     gX, gY: LongInt;
@@ -3014,7 +3014,7 @@
         ry := rndSign(getRandomf * _0_1);
 
         ball:= AddGear(gx, gy, gtBall, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0);
-        ball^.CollisionMask:= lfCurrentMask;
+        ball^.CollisionMask:= lfNotCurrentMask;
 
         PlaySound(sndGun);
         end;
@@ -3027,7 +3027,7 @@
 end;
 
 procedure doStepBallgun(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -3040,7 +3040,7 @@
 procedure doStepRCPlaneWork(Gear: PGear);
 
 const cAngleSpeed =   3;
-var 
+var
     HHGear: PGear;
     i: LongInt;
     dX, dY: hwFloat;
@@ -3149,7 +3149,7 @@
             begin
             if TagTurnTimeLeft = 0 then
                 TagTurnTimeLeft:= TurnTimeLeft;
-                
+
             TurnTimeLeft:= 14 * 125;
             end;
 
@@ -3159,7 +3159,7 @@
 end;
 
 procedure doStepRCPlane(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -3167,7 +3167,7 @@
     HHGear^.State := HHGear^.State or gstNotKickable;
     Gear^.Angle := HHGear^.Angle;
     Gear^.Tag := hwSign(HHGear^.dX);
-    
+
     if HHGear^.dX.isNegative then
         Gear^.Angle := 4096 - Gear^.Angle;
     Gear^.doStep := @doStepRCPlaneWork
@@ -3175,7 +3175,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepJetpackWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
     fuel, i: LongInt;
     move: hwFloat;
@@ -3195,10 +3195,11 @@
     move:= _0_02;
     fuel:= 5;
     end;*)
-
-    if Gear^.Health > 0 then
-        begin
-        if (HHGear^.Message and gmUp) <> 0 then
+    if HHGear^.Message and gmPrecise <> 0 then
+        HedgehogChAngle(HHGear)
+    else if Gear^.Health > 0 then
+        begin
+        if HHGear^.Message and gmUp <> 0 then
             begin
             if (not HHGear^.dY.isNegative) or (HHGear^.Y > -_256) then
                 begin
@@ -3254,9 +3255,9 @@
 
     if Gear^.Health < 0 then
         Gear^.Health := 0;
-        
+
     i:= Gear^.Health div 20;
-    
+
     if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
         begin
         Gear^.Damage:= i;
@@ -3265,10 +3266,12 @@
         Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(i) + '%', cWhiteColor, fntSmall)
         end;
 
-    if HHGear^.Message and (gmAttack or gmUp or gmPrecise or gmLeft or gmRight) <> 0 then 
+    if (HHGear^.Message and (gmAttack or gmUp or gmLeft or gmRight) <> 0) and
+       (HHGear^.Message and gmPrecise = 0) then
         Gear^.State := Gear^.State and (not gsttmpFlag);
-        
-    HHGear^.Message := HHGear^.Message and (not (gmUp or gmPrecise or gmLeft or gmRight));
+
+    if HHGear^.Message and gmPrecise = 0 then
+        HHGear^.Message := HHGear^.Message and (not (gmUp or gmLeft or gmRight));
     HHGear^.State := HHGear^.State or gstMoving;
 
     Gear^.X := HHGear^.X;
@@ -3277,7 +3280,7 @@
     if not isUnderWater and hasBorder and ((HHGear^.X < _0)
     or (hwRound(HHGear^.X) > LAND_WIDTH)) then
         HHGear^.dY.isNegative:= false;
-        
+
     if ((Gear^.State and gsttmpFlag) = 0)
     or (HHGear^.dY < _0) then
         doStepHedgehogMoving(HHGear);
@@ -3285,7 +3288,7 @@
     if // (Gear^.Health = 0)
         (HHGear^.Damage <> 0)
         //or CheckGearDrowning(HHGear)
-        or (cWaterLine + 512 < hwRound(HHGear^.Y))
+        or (cWaterLine + cVisibleWater * 4 < hwRound(HHGear^.Y))
         or (TurnTimeLeft = 0)
         // allow brief ground touches - to be fair on this, might need another counter
         or (((GameTicks and $1FF) = 0) and (not HHGear^.dY.isNegative) and (TestCollisionYwithGear(HHGear, 1) <> 0))
@@ -3309,7 +3312,7 @@
 end;
 
 procedure doStepJetpack(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     Gear^.Pos:= 0;
@@ -3322,7 +3325,7 @@
         begin
         State := State and (not gstAttacking);
         Message := Message and (not (gmAttack or gmUp or gmPrecise or gmLeft or gmRight));
-        
+
         if (dY < _0_1) and (dY > -_0_1) then
             begin
             Gear^.State := Gear^.State or gsttmpFlag;
@@ -3345,13 +3348,13 @@
 end;
 
 procedure doStepBirdyFly(Gear: PGear);
-var 
+var
     HHGear: PGear;
     fuel, i: LongInt;
     move: hwFloat;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
-    if HHGear = nil then 
+    if HHGear = nil then
         begin
         DeleteGear(Gear);
         exit
@@ -3375,11 +3378,11 @@
         if (not HHGear^.dY.isNegative)
         or (HHGear^.Y > -_256) then
             HHGear^.dY := HHGear^.dY - move;
-            
+
         dec(Gear^.Health, fuel);
         Gear^.MsgParam := Gear^.MsgParam or gmUp;
         end;
-        
+
     if (HHGear^.Message and gmLeft) <> 0 then move.isNegative := true;
     if (HHGear^.Message and (gmLeft or gmRight)) <> 0 then
         begin
@@ -3390,7 +3393,7 @@
 
     if Gear^.Health < 0 then
         Gear^.Health := 0;
-        
+
     if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then
         for i:= ((500-Gear^.Health) div 250) downto 0 do
             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather);
@@ -3408,7 +3411,7 @@
 
     if HHGear^.Message and (gmUp or gmPrecise or gmLeft or gmRight) <> 0 then
         Gear^.State := Gear^.State and (not gsttmpFlag);
-        
+
     HHGear^.Message := HHGear^.Message and (not (gmUp or gmPrecise or gmLeft or gmRight));
     HHGear^.State := HHGear^.State or gstMoving;
 
@@ -3451,7 +3454,7 @@
 end;
 
 procedure doStepBirdyDescend(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     if Gear^.Timer > 0 then
@@ -3492,12 +3495,12 @@
 end;
 
 procedure doStepBirdy(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     gear^.State :=  gear^.State or gstAnimation and (not gstTmpFlag);
     Gear^.doStep := @doStepBirdyAppear;
-    
+
     if CurrentHedgehog = nil then
         begin
         DeleteGear(Gear);
@@ -3522,7 +3525,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepEggWork(Gear: PGear);
-var 
+var
     vg: PVisualGear;
     i: LongInt;
 begin
@@ -3563,18 +3566,18 @@
                 if (CurAmmoType = amPortalGun) then
                     begin
                     CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and (not gmSwitch);
-                
+
                     CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^);
                     if CurWeapon^.Pos <> 0 then
                         CurWeapon^.Pos := 0
-                        
+
                     else
                     CurWeapon^.Pos := 1;
                     end;
 end;
 
 procedure doStepPortal(Gear: PGear);
-var 
+var
     iterator, conPortal: PGear;
     s, r, nx, ny, ox, oy, poffs, noffs, pspeed, nspeed,
     resetx, resety, resetdx, resetdy: hwFloat;
@@ -3584,7 +3587,7 @@
     doPortalColorSwitch();
 
     // destroy portal if ground it was attached too is gone
-    if ((Land[hwRound(Gear^.Y), hwRound(Gear^.X)] and $FF00) = 0)
+    if (Land[hwRound(Gear^.Y), hwRound(Gear^.X)] <= lfAllObjMask)
     or (Gear^.Timer < 1)
     or (Gear^.Hedgehog^.Team <> CurrentHedgehog^.Team)
     or (hwRound(Gear^.Y) > cWaterLine) then
@@ -3684,7 +3687,11 @@
             // wow! good candidate there, let's see if the distance and direction is okay!
             if hasdxy then
                 begin
-                s := r / Distance(iterator^.dX, iterator^.dY);
+                s := Distance(iterator^.dX, iterator^.dY);
+                // if the resulting distance is 0 skip this gear
+                if s.QWordValue = 0 then
+                    continue;
+                s := r / s;
                 ox:= iterator^.X + s * iterator^.dX;
                 oy:= iterator^.Y + s * iterator^.dY;
                 end
@@ -3875,7 +3882,7 @@
             resetx.QWordValue:= 4294967296 * 35;
             resetdx.isNegative:= false;
             resetdx.QWordValue:= 4294967296 * 1152;
-    
+
             resetdy:=hwAbs(iterator^.dX*4);
             resetdy:= resetdy + hwPow(resetdy,3)/_6 + _3 * hwPow(resetdy,5) / _40 + _5 * hwPow(resetdy,7) / resety + resetx * hwPow(resetdy,9) / resetdx;
             iterator^.Angle:= hwRound(resetdy*_2048 / _PI);
@@ -3896,7 +3903,7 @@
         and (CurAmmoGear^.Kind =gtRope) then
                CurAmmoGear^.PortalCounter:= 1;
 
-        if not isbullet and (iterator^.State and gstInvisible = 0) 
+        if not isbullet and (iterator^.State and gstInvisible = 0)
         and (iterator^.Kind <> gtFlake) then
             FollowGear := iterator;
 
@@ -3942,7 +3949,7 @@
 end;
 
 procedure doStepMovingPortal_real(Gear: PGear);
-var 
+var
     x, y, tx, ty: LongInt;
     s: hwFloat;
 begin
@@ -3956,7 +3963,7 @@
         begin
         Gear^.State := Gear^.State or gstCollision;
         Gear^.State := Gear^.State and (not gstMoving);
-        
+
         if (Land[y, x] and lfBouncy <> 0)
         or (not CalcSlopeTangent(Gear, x, y, tx, ty, 255))
         or (DistanceI(tx,ty) < _12) then // reject shots at too irregular terrain
@@ -3984,7 +3991,7 @@
         else
             loadNewPortalBall(Gear, true);
     end
-    
+
     else if (y > cWaterLine)
     or (y < -max(LAND_WIDTH,4096))
     or (x > 2*max(LAND_WIDTH,4096))
@@ -3996,13 +4003,13 @@
 begin
     doPortalColorSwitch();
     doStepPerPixel(Gear, @doStepMovingPortal_real, true);
-    if (Gear^.Timer < 1) 
+    if (Gear^.Timer < 1)
     or (Gear^.Hedgehog^.Team <> CurrentHedgehog^.Team) then
         deleteGear(Gear);
 end;
 
 procedure doStepPortalShot(newPortal: PGear);
-var 
+var
     iterator: PGear;
     s: hwFloat;
     CurWeapon: PAmmo;
@@ -4082,15 +4089,15 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepPiano(Gear: PGear);
-var 
+var
     r0, r1: LongInt;
     odY: hwFloat;
 begin
     AllInactive := false;
-    if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and 
+    if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and
         ((CurrentHedgehog^.Gear^.Message and gmSlot) <> 0) then
             begin
-                case CurrentHedgehog^.Gear^.MsgParam of 
+                case CurrentHedgehog^.Gear^.MsgParam of
                 0: PlaySound(sndPiano0);
                 1: PlaySound(sndPiano1);
                 2: PlaySound(sndPiano2);
@@ -4170,7 +4177,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepSineGunShotWork(Gear: PGear);
-var 
+var
     x, y, rX, rY, t, tmp, initHealth: LongInt;
     oX, oY, ldX, ldY, sdX, sdY, sine, lx, ly, amp: hwFloat;
     justCollided: boolean;
@@ -4265,7 +4272,7 @@
                     end;
 
                 if random(100) = 0 then
-                    AddVisualGear(x, y, vgtSmokeTrace); 
+                    AddVisualGear(x, y, vgtSmokeTrace);
                 end
                 else dec(Gear^.Health, 5); // if underwater get additional damage
             end;
@@ -4303,7 +4310,7 @@
 var
     HHGear: PGear;
 begin
-    PlaySound(sndSineGun); 
+    PlaySound(sndSineGun);
 
     // push the shooting Hedgehog back
     HHGear := CurrentHedgehog^.Gear;
@@ -4323,7 +4330,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFlamethrowerWork(Gear: PGear);
-var 
+var
     HHGear, flame: PGear;
     rx, ry, speed: hwFloat;
     i, gX, gY: LongInt;
@@ -4333,7 +4340,7 @@
     HedgehogChAngle(HHGear);
     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
-    
+
     if (GameTicks and $FF) = 0 then
         begin
         if (HHGear^.Message and gmRight) <> 0 then
@@ -4347,11 +4354,11 @@
             begin
             if HHGear^.dX.isNegative and (Gear^.Tag > 5) then
                 dec(Gear^.Tag)
-            else if Gear^.Tag < 20 then 
+            else if Gear^.Tag < 20 then
                 inc(Gear^.Tag);
             end
         end;
-    
+
     dec(Gear^.Timer);
     if Gear^.Timer = 0 then
         begin
@@ -4361,18 +4368,18 @@
             rx := rndSign(getRandomf * _0_1);
             ry := rndSign(getRandomf * _0_1);
             speed := _0_5 * (_10 / Gear^.Tag);
-    
+
             flame:= AddGear(gx, gy, gtFlame, gstTmpFlag,
                     SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
                     AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
-            flame^.CollisionMask:= lfCurrentMask;
-            
+            flame^.CollisionMask:= lfNotCurrentMask;
+
             if (Gear^.Health mod 30) = 0 then
                 begin
                 flame:= AddGear(gx, gy, gtFlame, 0,
                         SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
                         AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
-                flame^.CollisionMask:= lfCurrentMask;
+                flame^.CollisionMask:= lfNotCurrentMask;
                 end
             end;
         Gear^.Timer:= Gear^.Tag
@@ -4397,7 +4404,7 @@
 end;
 
 procedure doStepFlamethrower(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -4408,7 +4415,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepLandGunWork(Gear: PGear);
-var 
+var
     HHGear, land: PGear;
     rx, ry, speed: hwFloat;
     i, gX, gY: LongInt;
@@ -4418,7 +4425,7 @@
     HedgehogChAngle(HHGear);
     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
-    
+
     if (GameTicks and $FF) = 0 then
         begin
         if (HHGear^.Message and gmRight) <> 0 then
@@ -4436,7 +4443,7 @@
                 inc(Gear^.Tag);
             end
         end;
-    
+
     dec(Gear^.Timer);
     if Gear^.Timer = 0 then
         begin
@@ -4446,11 +4453,11 @@
         ry := rndSign(getRandomf * _0_1);
         speed := (_3 / Gear^.Tag);
 
-        land:= AddGear(gx, gy, gtFlake, gstTmpFlag, 
-                SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, 
+        land:= AddGear(gx, gy, gtFlake, gstTmpFlag,
+                SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
                 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
-        land^.CollisionMask:= lfCurrentMask;
-            
+        land^.CollisionMask:= lfNotCurrentMask;
+
         Gear^.Timer:= Gear^.Tag
         end;
 
@@ -4474,7 +4481,7 @@
 end;
 
 procedure doStepLandGun(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -4543,7 +4550,7 @@
 end;
 
 procedure doStepHammerHitWork(Gear: PGear);
-var 
+var
     i, j, ei: LongInt;
     HitGear: PGear;
 begin
@@ -4599,7 +4606,7 @@
 end;
 
 procedure doStepHammerHit(Gear: PGear);
-var 
+var
     i, y: LongInt;
     ar: TRangeArray;
     HHGear: PGear;
@@ -4649,7 +4656,7 @@
         begin
         if (GameTicks and $F) <> 0 then
         exit;
-        end 
+        end
     else if (GameTicks and $1FF) <> 0 then
         exit;
 
@@ -4686,8 +4693,8 @@
                 inc(graves[i]^.Health);
             end;
         end; -}
-        end 
-    else 
+        end
+    else
         begin
         // now really resurrect the hogs with the hp saved in the graves
         for i:= 0 to graves.size - 1 do
@@ -4746,9 +4753,9 @@
             RecountTeamHealth(hh^.Team);
             inc(graves.ar^[Gear^.Tag]^.Health);
             inc(Gear^.Tag)
-            end 
-        end 
-    else 
+            end
+        end
+    else
         begin
         StopSoundChan(Gear^.SoundChannel);
         Gear^.Timer := 250;
@@ -4768,7 +4775,7 @@
     begin
         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, Gear^.Hedgehog, EXPLAutoSound);
         gX := hwRound(Gear^.X);
-        gY := hwRound(Gear^.Y); 
+        gY := hwRound(Gear^.Y);
         for i:= 0 to 10 do
         begin
             dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandomf + _1);
@@ -4796,7 +4803,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepStructure(Gear: PGear);
-var 
+var
     x, y: LongInt;
     HH: PHedgehog;
     t: PGear;
@@ -4813,7 +4820,7 @@
 
     dec(Gear^.Health, Gear^.Damage);
     Gear^.Damage:= 0;
-        
+
     if Gear^.Pos = 1 then
         begin
         AddGearCI(Gear);
@@ -4824,7 +4831,7 @@
             HideHog(HH);
         Gear^.Pos:= 2
         end;
-        
+
     if Gear^.Pos = 2 then
         begin
         if ((GameTicks mod 100) = 0) and (Gear^.Timer < 1000) then
@@ -4840,7 +4847,7 @@
         if Gear^.Tag <= TotalRounds then
             Gear^.Pos:= 3;
         end;
-        
+
     if Gear^.Pos = 3 then
         if Gear^.Timer < 1000 then
             begin
@@ -4858,7 +4865,7 @@
                 RestoreHog(HH);
             Gear^.Pos:= 4;
             end;
-        
+
     if Gear^.Pos = 4 then
         if ((GameTicks mod 1000) = 0) and ((GameFlags and gfInvulnerable) = 0) then
             begin
@@ -4870,12 +4877,12 @@
                 t:= t^.NextGear;
                 end;
             end;
-        
+
     if Gear^.Health <= 0 then
         begin
         if HH^.GearHidden <> nil then
             RestoreHog(HH);
-        
+
         x := hwRound(Gear^.X);
         y := hwRound(Gear^.Y);
 
@@ -4888,7 +4895,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 (*
- TARDIS needs 
+ TARDIS needs
  Warp in.  Pos = 1
  Pause.    Pos = 2
  Hide gear  (TARDIS hedgehog was nil)
@@ -4914,7 +4921,7 @@
             begin
             AfterAttack;
             if Gear = CurAmmoGear then CurAmmoGear := nil;
-            if (HH^.Gear^.Damage = 0) and  (HH^.Gear^.Health > 0) and 
+            if (HH^.Gear^.Damage = 0) and  (HH^.Gear^.Health > 0) and
             ((Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then
                 HideHog(HH)
             end
@@ -4934,7 +4941,7 @@
 if (Gear^.Pos = 1) and (GameTicks and $1F = 0) and (Gear^.Power < 255) then
     begin
     inc(Gear^.Power);
-    if (Gear^.Power = 172) and (HH^.Gear <> nil) and 
+    if (Gear^.Power = 172) and (HH^.Gear <> nil) and
         (HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and
         ((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then
             with HH^.Gear^ do
@@ -4975,7 +4982,7 @@
         begin
         if HH^.GearHidden <> nil then
             FindPlace(HH^.GearHidden, false, 0, LAND_WIDTH,true);
-            
+
         if HH^.GearHidden <> nil then
             begin
             Gear^.X:= HH^.GearHidden^.X;
@@ -5051,9 +5058,9 @@
 WIP. The ice gun will have the following effects.  It has been proposed by sheepluva that it take the appearance of a large freezer
 spewing ice cubes.  The cubes will be visual gears only.  The scatter from them and the impact snow dust should help hide imprecisions in things like the GearsNear effect.
 For now we assume a "ray" like a deagle projected out from the gun.
-All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks.  This is a simplifying assumption for "gun was applying freezing effect to the same target".  
+All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks.  This is a simplifying assumption for "gun was applying freezing effect to the same target".
   * When fired at water a layer of ice textured land is added above the water.
-  * When fired at non-ice land (land and $FF00 and not lfIce) the land is overlaid with a thin layer of ice textured land around that point (say, 1 or 2px into land, 1px above). For attractiveness, a slope would probably be needed.
+  * When fired at non-ice land (land and lfLandMask and not lfIce) the land is overlaid with a thin layer of ice textured land around that point (say, 1 or 2px into land, 1px above). For attractiveness, a slope would probably be needed.
   * When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen.  As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head.  If the effect is interrupted before reaching the top, the freezing state is cleared.
 A frozen hog will animate differently.  To be decided, but possibly in a similar fashion to a grave when it comes to explosions.  The hog might (possibly) not be damaged by explosions.  This might make freezing potentially useful for friendlies in a bad position.  It might be better to allow damage though.
 A frozen hog stays frozen for a certain number of turns. Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again.
@@ -5061,7 +5068,7 @@
 
 
 procedure updateFuel(Gear: PGear);
-var 
+var
   t:LongInt;
 begin
     t:= Gear^.Health div 10;
@@ -5072,13 +5079,24 @@
     Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(t) +
               '%', cWhiteColor, fntSmall)
     end;
-    if GameTicks mod 10 = 0 then dec(Gear^.Health);
+    if Gear^.Message and (gmUp or gmDown) <> 0 then
+        begin
+        StopSoundChan(Gear^.SoundChannel);
+        Gear^.SoundChannel:= -1;
+        if GameTicks mod 40 = 0 then dec(Gear^.Health)
+        end
+    else 
+        begin
+        if Gear^.SoundChannel = -1 then
+            Gear^.SoundChannel := LoopSound(sndIceBeam);
+        if GameTicks mod 10 = 0 then dec(Gear^.Health)
+        end
 end;
 
 
 procedure updateTarget(Gear:PGear; newX, newY:HWFloat);
-    var
-    iter:PGear;    
+//    var
+//    iter:PGear;
 begin
   with Gear^ do
   begin
@@ -5089,86 +5107,74 @@
     LastDamage:= nil;
     X:= Hedgehog^.Gear^.X;
     Y:= Hedgehog^.Gear^.Y;
-    //unfreeze all semifrozen hogs - make this generic hog cleanup
-(*
-    iter := GearsList;
-    while iter <> nil do
-        begin
-        if (iter^.Kind = gtHedgehog) and 
-        (iter^.Hedgehog^.Effects[heFrozen] and $FF = 0) then 
-        iter^.Hedgehog^.Effects[heFrozen]:= 0;
-        iter:= iter^.NextGear
-        end 
-*)
   end;
 end;
 
-
 procedure doStepIceGun(Gear: PGear);
-const iceWaitCollision:Longint = 0;
-const iceCollideWithGround:Longint = 1;
-const iceWaitNextTarget:Longint = 2;
-const iceCollideWithHog:Longint = 4;
-const iceCollideWithWater:Longint = 5;
-const waterFreezingTime:Longint = 500;
-const groundFreezingTime:Longint = 1000;
+const iceWaitCollision = 0;
+const iceCollideWithGround = 1;
+//const iceWaitNextTarget:Longint = 2;
+//const iceCollideWithHog:Longint = 4;
+const iceCollideWithWater = 5;
+//const waterFreezingTime:Longint = 500;
+const groundFreezingTime = 1000;
 const iceRadius = 32;
 const iceHeight = 40;
 var
-    HHGear: PGear;
+    HHGear, iter: PGear;
+    landRect: TSDL_Rect;
     ndX, ndY: hwFloat;
     i, t, gX, gY: LongInt;
     hogs: PGearArrayS;
+    vg: PVisualGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
-    if (Gear^.Message and gmAttack <> 0) or (Gear^.Health = 0) or (HHGear = nil) or (HHGear^.Damage <> 0) then
-        begin
+    if (Gear^.Message and gmAttack <> 0) or (Gear^.Health = 0) or (HHGear = nil) or (HHGear^.Damage <> 0) or (HHGear^.dX.QWordValue > 4294967)  then
+        begin
+        StopSoundChan(Gear^.SoundChannel);
         DeleteGear(Gear);
         AfterAttack;
         exit
-        end
-    else if Gear^.Message and (gmUp or gmDown) = 0 then updateFuel(Gear);
+        end;
+    updateFuel(Gear);
 
     with Gear^ do
         begin
         HedgehogChAngle(HHGear);
         ndX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _4;
         ndY:= -AngleCos(HHGear^.Angle) * _4;
-        if (ndX <> dX) or (ndY <> dY) or 
-           ((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and 
+        if (ndX <> dX) or (ndY <> dY) or
+           ((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and
              (Target.Y and LAND_HEIGHT_MASK = 0) and ((Land[Target.Y, Target.X] = 0))) then
             begin
-                updateTarget(Gear, ndX, ndY);
-                IceState := iceWaitCollision;
+            updateTarget(Gear, ndX, ndY);
+            Timer := iceWaitCollision;
             end
         else
             begin
             X:= X + dX;
             Y:= Y + dY;
             gX:= hwRound(X);
-            gY:= hwRound(Y);    
-            if Target.X = NoPointX then 
-            begin
-                t:= hwRound(hwSqr(X-HHGear^.X)+hwSqr(Y-HHGear^.Y));
-            end;
+            gY:= hwRound(Y);
+            if Target.X = NoPointX then t:= hwRound(hwSqr(X-HHGear^.X)+hwSqr(Y-HHGear^.Y));
 
             if Target.X <> NoPointX then
-            begin
-                CheckCollisionWithLand(Gear);
+                begin
+                CheckCollision(Gear);
                 if (State and gstCollision) <> 0 then
-                begin        
-                if IceState = iceWaitCollision then
                     begin
-                    IceState := iceCollideWithGround;
-                    IceTime := GameTicks;                    
-                    end                    
-                end
+                    if Timer = iceWaitCollision then
+                        begin
+                        Timer := iceCollideWithGround;
+                        Power := GameTicks;
+                        end
+                    end
                 else if (target.y >= cWaterLine) then
                     begin
-                    if IceState = iceWaitCollision then
+                    if Timer = iceWaitCollision then
                         begin
-                        IceState := iceCollideWithWater;
-                        IceTime := GameTicks;  
+                        Timer := iceCollideWithWater;
+                        Power := GameTicks;
                         end;
                     end;
 
@@ -5178,52 +5184,123 @@
                     Y:= HHGear^.Y
                     end;
 
-                if (IceState = iceCollideWithGround) and ((GameTicks - IceTime) > groundFreezingTime) then
-                    begin 
-                    FillRoundInLandWithIce(Target.X, Target.Y, iceRadius);
-                    SetAllHHToActive;                                     
-                    IceState := iceWaitCollision;
+                if (Timer = iceCollideWithGround) and ((GameTicks - Power) > groundFreezingTime) then
+                    begin
+                    FillRoundInLand(target.x, target.y, iceRadius, icePixel);
+                    landRect.x := min(max(target.x - iceRadius, 0), LAND_WIDTH - 1);
+                    landRect.y := min(max(target.y - iceRadius, 0), LAND_HEIGHT - 1);
+                    landRect.w := min(2*iceRadius, LAND_WIDTH - landRect.x - 1);
+                    landRect.h := min(2*iceRadius, LAND_HEIGHT - landRect.y - 1);
+                    UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true);
+                    
+                    // Freeze nearby mines/explosives/cases too
+                    iter := GearsList;
+                    while iter <> nil do
+                        begin
+                        if (iter^.State and gstFrozen = 0) and
+                           ((iter^.Kind = gtExplosives) or (iter^.Kind = gtCase) or (iter^.Kind = gtMine)) and 
+                           (abs(iter^.X.Round-target.x)+abs(iter^.Y.Round-target.y)+2<2*iceRadius) and (Distance(iter^.X-int2hwFloat(target.x),iter^.Y-int2hwFloat(target.y))<int2hwFloat(iceRadius*2)) then
+                            begin
+                            for t:= 0 to 5 do
+                                begin
+                                vg:= AddVisualGear(hwRound(iter^.X)+random(4)-8, hwRound(iter^.Y)+random(8), vgtDust, 1);
+                                if vg <> nil then
+                                    begin
+                                    i:= random(100) + 155;
+                                    vg^.Tint:= (i shl 24) or (i shl 16) or ($FF shl 8) or (random(200) + 55);
+                                    vg^.Angle:= random(360);
+                                    vg^.dx:= 0.001 * random(80);
+                                    vg^.dy:= 0.001 * random(80)
+                                    end
+                                end;
+                            PlaySound(sndHogFreeze);
+                            iter^.State:= iter^.State or gstFrozen;
+                            if iter^.Kind = gtMine then // dud mine block
+                                begin
+                                vg:= AddVisualGear(hwRound(iter^.X) - 4  + Random(8), hwRound(iter^.Y) - 4 - Random(4), vgtSmoke);
+                                if vg <> nil then
+                                    vg^.Scale:= 0.5;
+                                PlaySound(sndVaporize);
+                                iter^.Health := 0;
+                                iter^.Damage := 0;
+                                iter^.State := iter^.State and (not gstAttacking)
+                                end
+                            else if iter^.Kind = gtCase then
+                                begin
+                                DeleteCI(iter);
+                                AddGearCI(iter)
+                                end
+                            else // gtExplosives
+                                iter^.Health:= iter^.Health + cBarrelHealth
+                            end;
+                        iter:= iter^.NextGear
+                        end;
+
+                    // FillRoundInLandWithIce(Target.X, Target.Y, iceRadius);
+                    SetAllHHToActive;
+                    Timer := iceWaitCollision;
                     end;
 
-                if (IceState = iceCollideWithWater) and ((GameTicks - IceTime) > groundFreezingTime) then
-                    begin                    
+                if (Timer = iceCollideWithWater) and ((GameTicks - Power) > groundFreezingTime) then
+                    begin
+                    PlaySound(sndHogFreeze);
                     DrawIceBreak(Target.X, cWaterLine - iceHeight, iceRadius, iceHeight);
-                    SetAllHHToActive; 
-                    IceState := iceWaitCollision;
+                    SetAllHHToActive;
+                    Timer := iceWaitCollision;
                     end;
+(*
+ Any ideas for something that would look good here?
+                if (Target.X <> NoPointX) and ((Timer = iceCollideWithGround) or (Timer = iceCollideWithWater)) and (GameTicks mod max((groundFreezingTime-((GameTicks - Power)*2)),2) = 0) then //and CheckLandValue(Target.X, Target.Y, lfIce) then
+                    begin
+                        vg:= AddVisualGear(Target.X+random(20)-10, Target.Y+random(40)-10, vgtDust, 1);
+                        if vg <> nil then
+                            begin
+                            i:= random(100) + 155;
+                            vg^.Tint:= IceColor or $FF;
+                            vg^.Angle:= random(360);
+                            vg^.dx:= 0.001 * random(80);
+                            vg^.dy:= 0.001 * random(80)
+                            end
+                    end;
+*)
 
 // freeze nearby hogs
                 hogs := GearsNear(int2hwFloat(Target.X), int2hwFloat(Target.Y), gtHedgehog, Gear^.Radius*2);
                 if hogs.size > 0 then
                     for i:= 0 to hogs.size - 1 do
                         if hogs.ar^[i] <> HHGear then
-                            if GameTicks mod 5 = 0 then 
+                            if GameTicks mod 5 = 0 then
                                 begin
                                 hogs.ar^[i]^.Active:= true;
                                 if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] < 256 then
                                     hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] := hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] + 1
                                 else if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] = 256 then
-                                    hogs.ar^[i]^.Hedgehog^.Effects[heFrozen]:= 200000;//cHedgehogTurnTime + cReadyDelay
+                                    begin
+                                    hogs.ar^[i]^.Hedgehog^.Effects[heFrozen]:= 200000-1;//cHedgehogTurnTime + cReadyDelay
+                                    PlaySound(sndHogFreeze);
+                                    end;
                                 end;
                 inc(Pos)
-            end
+                end
             else if (t > 400) and ((gY > cWaterLine) or
                     (((gX and LAND_WIDTH_MASK = 0) and (gY and LAND_HEIGHT_MASK = 0))
                         and (Land[gY, gX] <> 0))) then
-            begin
+                begin
                 Target.X:= gX;
                 Target.Y:= gY;
                 X:= HHGear^.X;
                 Y:= HHGear^.Y
-            end;
-            {if (gX > max(LAND_WIDTH,4096)*2) or
+                end;
+            if (gX > max(LAND_WIDTH,4096)*2) or
                     (gX < -max(LAND_WIDTH,4096)) or
                     (gY < -max(LAND_HEIGHT,4096)) or
                     (gY > max(LAND_HEIGHT,4096)+512) then
-            begin
-                X:= HHGear^.X;
-                Y:= HHGear^.Y
-            end}
+                begin
+                //X:= HHGear^.X;
+                //Y:= HHGear^.Y
+                Target.X:= gX;
+                Target.Y:= gY;
+                end
         end
     end;
 end;
@@ -5299,7 +5376,7 @@
         DeleteGear(Gear)
         end;
     // ssssss he essssscaped
-    if (Gear^.Timer > 250) and ((HHGear = nil) or 
+    if (Gear^.Timer > 250) and ((HHGear = nil) or
             (((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) >  180) and
             (Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) > _180))) then
         begin
@@ -5310,7 +5387,7 @@
     end;
 
 // Search out a new target, as target seek time has expired, target is dead, target is out of range, or we did not have a target
-if (HHGear = nil) or (Gear^.Timer = 0) or 
+if (HHGear = nil) or (Gear^.Timer = 0) or
    (((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) >  Gear^.Angle) and
         (Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) > int2hwFloat(Gear^.Angle)))
     then
@@ -5427,7 +5504,7 @@
  This didn't end up getting used, but, who knows, might be reasonable for javellin or something
 // Make the knife initial angle based on the hog attack angle, or is that too hard?
 procedure doStepKnife(Gear: PGear);
-var t, 
+var t,
     gx, gy, ga,  // gear x,y,angle
     lx, ly, la, // land x,y,angle
     ox, oy, // x,y offset
@@ -5449,9 +5526,9 @@
     if Gear^.State and gstDrowning <> 0 then exit;
     with Gear^ do
         begin
-        if CheckLandValue(gx, gy, $FF00) then
+        if CheckLandValue(gx, gy, lfLandMask) then
             begin
-            t:= Angle + hwRound((hwAbs(dX)+hwAbs(dY)) * _10); 
+            t:= Angle + hwRound((hwAbs(dX)+hwAbs(dY)) * _10);
 
             if t < 0 then inc(t, 4096)
             else if 4095 < t then dec(t, 4096);
@@ -5488,7 +5565,7 @@
                 4:  begin
                     ox:= 29; oy:=  8;
                      w:= 19;  h:= 19;
-                    tx:=  0; ty:= 17 
+                    tx:=  0; ty:= 17
                     end;
                 5:  begin
                     ox:= 29; oy:=  32;
@@ -5498,7 +5575,7 @@
                 6:  begin
                     ox:= 51; oy:=   3;
                      w:= 11;  h:=  23;
-                    tx:=  0; ty:=  22 
+                    tx:=  0; ty:=  22
                     end;
                 7:  begin
                     ox:= 51; oy:=  34;
@@ -5506,7 +5583,7 @@
                     tx:=  0; ty:=  23
                     end
                 end;
-                
+
             surf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask);
             copyToXYFromRect(SpritesData[sprKnife].Surface, surf, ox, oy, w, h, 0, 0);
             // try to make the knife hit point first
@@ -5528,7 +5605,7 @@
                 AddFileLog('la: '+inttostr(la)+' ga: '+inttostr(ga)+' Angle: '+inttostr(Angle))
                 end;
             case Angle div 1024 of
-                0:  begin 
+                0:  begin
                     flipSurface(surf, true);
                     flipSurface(surf, true);
                     BlitImageAndGenerateCollisionInfo(gx-(w-tx), gy-(h-ty), w, surf)
--- a/hedgewars/LuaPas.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/LuaPas.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -14,19 +14,20 @@
 uses uConsts;
 {.$DEFINE LUA_GETHOOK}
 
+const LuaLibName = {$IFDEF LUA_INTERNAL}'libhwlua'{$ELSE}'liblua'{$ENDIF};
+
+{$IFNDEF WIN32}
+    {$linklib lua}
+{$ENDIF}
+
 type
-{$IFNDEF PAS2C}    
     size_t   = Cardinal;
-{$ENDIF}
     Psize_t  = ^size_t;
     PPointer = ^Pointer;
 
     lua_State = record end;
     Plua_State = ^lua_State;
 
-{$DEFINE LuaLibName:= cLuaLibrary}
-
-
 (*****************************************************************************)
 (*                               luaconfig.h                                 *)
 (*****************************************************************************)
--- a/hedgewars/Math.h	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#pragma once
-
--- a/hedgewars/PNGh.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/PNGh.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/SDLh.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/SDLh.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -933,12 +933,11 @@
 procedure SDL_StartTextInput; cdecl; external SDLLibName;
 
 function  SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: TSDL_eventaction; minType, maxType: LongWord): LongInt; cdecl; external SDLLibName;
-function  SDL_CreateThread(fn: Pointer; name: PChar; data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
 {$ELSE}
-function  SDL_CreateThread(fn: Pointer; data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
 function  SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: TSDL_eventaction; mask: LongWord): LongInt; cdecl; external SDLLibName;
 {$ENDIF}
 
+
 function  SDL_GetMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName;
 function  SDL_GetKeyName(key: LongWord): PChar; cdecl; external SDLLibName;
 function  SDL_GetScancodeName(key: LongWord): PChar; cdecl; external SDLLibName;
@@ -956,7 +955,13 @@
 procedure SDL_WM_SetCaption(title: PChar; icon: PChar); cdecl; external SDLLibName;
 function  SDL_WM_ToggleFullScreen(surface: PSDL_Surface): LongInt; cdecl; external SDLLibName;
 
+
+// remember to mark the threaded functions as 'cdecl; export;'
+// (or have fun debugging nil arguments)
+function  SDL_CreateThread(fn: Pointer; {$IFDEF SDL13}name: PChar;{$ENDIF} data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
 procedure SDL_WaitThread(thread: PSDL_Thread; status: PLongInt); cdecl; external SDLLibName;
+procedure SDL_KillThread(thread: PSDL_Thread); cdecl; external SDLLibName;
+
 function  SDL_CreateMutex: PSDL_mutex; cdecl; external SDLLibName;
 procedure SDL_DestroyMutex(mutex: PSDL_mutex); cdecl; external SDLLibName;
 function  SDL_LockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName name 'SDL_mutexP';
--- a/hedgewars/VGSHandlers.inc	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/VGSHandlers.inc	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/avwrapper/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/avwrapper/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -4,17 +4,12 @@
 # fpc will take care of linking but we need to have this library installed
 find_package(GLUT REQUIRED)
 
-#TODO: convert avwrapper to .pas unit so we can skip this step
 include_directories(${FFMPEG_INCLUDE_DIR})
 
-if(WIN32)
-    # it's not possible to statically link libraries on windows, so let's build a shared version here
-    add_library(avwrapper SHARED avwrapper.c)
-
-    target_link_libraries(avwrapper ${FFMPEG_LIBRARIES})
+add_library(avwrapper avwrapper.c)
+#TODO: find good VERSION and SOVERSION values
+target_link_libraries(avwrapper ${FFMPEG_LIBRARIES})
+install(TARGETS avwrapper RUNTIME DESTINATION ${target_binary_install_dir}
+                          LIBRARY DESTINATION ${target_library_install_dir}
+                          ARCHIVE DESTINATION ${target_library_install_dir})
 
-    install(PROGRAMS "${LIBRARY_OUTPUT_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}avwrapper${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION ${target_library_install_dir})
-else()
-    add_library(avwrapper STATIC avwrapper.c)
-endif()
-
--- a/hedgewars/avwrapper/avwrapper.c	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/avwrapper/avwrapper.c	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,6 +28,14 @@
 #define AVIO_FLAG_WRITE AVIO_WRONLY
 #endif
 
+#if (defined _MSC_VER)
+#define AVWRAP_DECL __declspec(dllexport)
+#elif ((__GNUC__ >= 3) && (!__EMX__) && (!sun))
+#define AVWRAP_DECL __attribute__((visibility("default")))
+#else
+#define AVWRAP_DECL
+#endif
+
 static AVFormatContext* g_pContainer;
 static AVOutputFormat* g_pFormat;
 static AVStream* g_pAStream;
@@ -371,7 +379,7 @@
     }
 }
 
-void AVWrapper_WriteFrame(uint8_t* pY, uint8_t* pCb, uint8_t* pCr)
+AVWRAP_DECL void AVWrapper_WriteFrame(uint8_t* pY, uint8_t* pCb, uint8_t* pCr)
 {
     g_pVFrame->data[0] = pY;
     g_pVFrame->data[1] = pCb;
@@ -379,7 +387,7 @@
     WriteFrame(g_pVFrame);
 }
 
-void AVWrapper_Init(
+AVWRAP_DECL void AVWrapper_Init(
          void (*pAddFileLogRaw)(const char*),
          const char* pFilename,
          const char* pDesc,
@@ -472,7 +480,7 @@
     g_pVFrame->pts = -1;
 }
 
-void AVWrapper_Close()
+AVWRAP_DECL void AVWrapper_Close()
 {
     // output buffered frames
     if (g_pVCodec->capabilities & CODEC_CAP_DELAY)
--- a/hedgewars/config.inc.in	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/config.inc.in	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,5 +25,4 @@
       cVersionString = '${HEDGEWARS_VERSION}';
       cRevisionString = '${HEDGEWARS_REVISION}';
       cHashString = '${HEDGEWARS_HASH}';
-      cLuaLibrary = '${LUA_LIBRARY}';
       cDefaultPathPrefix = '${HEDGEWARS_FULL_DATADIR}/Data';
--- a/hedgewars/hwLibrary.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/hwLibrary.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/hwengine.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/hwengine.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler
      , uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions
      , SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted
-     , uPhysFSLayer, uCursor
+     , uPhysFSLayer, uCursor, uRandom
      {$IFDEF USE_VIDEO_RECORDING}, uVideoRec {$ENDIF}
      {$IFDEF USE_TOUCH_INTERFACE}, uTouch {$ENDIF}
      {$IFDEF ANDROID}, GLUnit{$ENDIF}
@@ -79,6 +79,7 @@
                 DisableSomeWeapons;
             AddClouds;
             AddFlakes;
+            SetRandomSeed(cSeed, false);
             AssignHHCoords;
             AddMiscGears;
             StoreLoad(false);
@@ -92,13 +93,7 @@
             ScriptCall('onGameStart');
             GameState:= gsGame;
             end;
-        gsConfirm, gsGame:
-            begin
-            if not cOnlyStats then DrawWorld(Lag);
-            DoGameTick(Lag);
-            if not cOnlyStats then ProcessVisualGears(Lag);
-            end;
-        gsChat:
+        gsConfirm, gsGame, gsChat:
             begin
             if not cOnlyStats then DrawWorld(Lag);
             DoGameTick(Lag);
@@ -122,11 +117,7 @@
     if flagMakeCapture then
         begin
         flagMakeCapture:= false;
-        {$IFDEF PAS2C}
-        s:= '/Screenshots/hw';
-        {$ELSE}
         s:= '/Screenshots/hw_' + FormatDateTime('YYYY-MM-DD_HH-mm-ss', Now()) + inttostr(GameTicks);
-        {$ENDIF}
 
         // flash
         playSound(sndShutter);
@@ -160,7 +151,7 @@
     while isTerminated = false do
     begin
         SDL_PumpEvents();
- 
+
         while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL13}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do
         begin
             case event.type_ of
@@ -169,14 +160,14 @@
                     if GameState = gsChat then
                         begin
                     // sdl on iphone supports only ashii keyboards and the unicode field is deprecated in sdl 1.3
-                        KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym, event.key.keysym.sym)//TODO correct for keymodifiers
+                        KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym), event.key.keysym.sym); //TODO correct for keymodifiers
                         end
-                    else
+                    else 
+                        if GameState >= gsGame then ProcessKey(event.key);
+                SDL_KEYUP:
+                    if (GameState <> gsChat) and (GameState >= gsGame) then
                         ProcessKey(event.key);
-                SDL_KEYUP:
-                    if GameState <> gsChat then
-                        ProcessKey(event.key);
-                    
+
                 SDL_WINDOWEVENT:
                     if event.window.event = SDL_WINDOWEVENT_SHOWN then
                     begin
@@ -202,13 +193,13 @@
                         cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight);
                         cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF};
                     end;
-                        
+
                 SDL_FINGERMOTION:
                     onTouchMotion(event.tfinger.x, event.tfinger.y,event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId);
-                
+
                 SDL_FINGERDOWN:
                     onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
-                
+
                 SDL_FINGERUP:
                     onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
 {$ELSE}
@@ -216,23 +207,20 @@
                     if GameState = gsChat then
                         KeyPressChat(event.key.keysym.unicode, event.key.keysym.sym)
                     else
-                        ProcessKey(event.key);
+                        if GameState >= gsGame then ProcessKey(event.key);
                 SDL_KEYUP:
-                    if GameState <> gsChat then
+                    if (GameState <> gsChat) and (GameState >= gsGame) then
                         ProcessKey(event.key);
-                    
+
                 SDL_MOUSEBUTTONDOWN:
                     if GameState = gsConfirm then
-                    begin
-                        resetPosition();
-                        ParseCommand('quit', true);
-                    end
+                        ParseCommand('quit', true)
                     else
-                        ProcessMouse(event.button, true);
-                    
+                        if (GameState >= gsGame) then ProcessMouse(event.button, true);
+
                 SDL_MOUSEBUTTONUP:
-                    ProcessMouse(event.button, false); 
-                    
+                    if (GameState >= gsGame) then ProcessMouse(event.button, false);
+
                 SDL_ACTIVEEVENT:
                     if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then
                     begin
@@ -241,7 +229,7 @@
                         if prevFocusState xor cHasFocus then
                             onFocusStateChanged()
                     end;
-                        
+
                 SDL_VIDEORESIZE:
                 begin
                     // using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and off-screen widget parts
@@ -345,7 +333,7 @@
                      ' (' + cHashString + ') with protocol #' + inttostr(cNetProtoVersion));
     AddFileLog('Prefix: "' + PathPrefix +'"');
     AddFileLog('UserPrefix: "' + UserPathPrefix +'"');
-    
+
     for i:= 0 to ParamCount do
         AddFileLog(inttostr(i) + ': ' + ParamStr(i));
 
@@ -365,7 +353,7 @@
         InitOffscreenOpenGL()
     else
 {$ENDIF}
-        begin            
+        begin
         // show main window
         if cFullScreen then
             ParseCommand('fullscr 1', true)
--- a/hedgewars/options.inc	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/options.inc	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -29,10 +29,8 @@
 
 {$DEFINE USE_LUA_SCRIPT}
 
-
 {$IFDEF ANDROID}
     {$DEFINE MOBILE}
-    {$DEFINE USE_SDLTHREADS}
     {$DEFINE USE_CONTEXT_RESTORE}
     {$DEFINE Java_Prefix:= 'Java_org_hedgewars_hedgeroid_EngineProtocol_PascalExports_'}
 {$ENDIF}
@@ -66,14 +64,12 @@
     {$DEFINE SDL13}
 {$ENDIF}
 
-{$IFDEF PAS2C}
-    {$DEFINE NOCONSOLE}
-    {$DEFINE USE_SDLTHREADS}
-{$ENDIF}
 
+//TODO: cruft to be removed
 {$DEFINE _S:=}
 {$DEFINE _P:=}
 
+
 //{$DEFINE TRACEAIACTIONS}
 //{$DEFINE COUNTTICKS}
 
--- a/hedgewars/pas2c.h	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-#pragma once
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <wchar.h>
-
-typedef union string255_
-    {
-        struct {
-            char s[256];
-        };
-        struct {
-            char len;
-            char str[255];
-        };
-    } string255;
-typedef struct string192_
-    {
-        char s[193];
-    } string192;
-typedef struct string31_
-    {
-        char s[32];
-    } string31;
-typedef struct string15_
-    {
-        char s[16];
-    } string15;
-
-typedef string255 shortstring;
-typedef string255 ansistring;
-    
-typedef uint8_t Byte;
-typedef int8_t ShortInt;
-typedef uint16_t Word;
-typedef int16_t SmallInt;
-typedef uint32_t LongWord;
-typedef int32_t LongInt;
-typedef uint64_t QWord;
-typedef int64_t Int64;
-typedef LongWord Cardinal;
-
-typedef LongInt Integer;
-typedef float extended;
-typedef float real;
-typedef float single;
-
-typedef bool boolean;
-typedef int LongBool;
-
-typedef void * pointer;
-typedef Byte * PByte;
-typedef char * PChar;
-typedef LongInt * PLongInt;
-typedef LongWord * PLongWord;
-typedef Integer * PInteger;
-typedef int PtrInt;
-typedef wchar_t widechar;
-
-#define new(a) __new((void **)&a, sizeof(*(a)))
-void __new(void ** p, int size);
-#define dispose(a) __dispose(a, sizeof(*(a)))
-void __dispose(pointer p, int size);
-
-void * GetMem(int size);
-void FreeMem(void * p, int size);
-
-#define FillChar(a, b, c) __FillChar(&(a), b, c)
-
-void __FillChar(pointer p, int size, char fill);
-string255 _strconcat(string255 a, string255 b);
-string255 _strappend(string255 s, char c);
-string255 _strprepend(char c, string255 s);
-string255 _chrconcat(char a, char b);
-bool _strcompare(string255 a, string255 b);
-bool _strcomparec(string255 a, char b);
-bool _strncompare(string255 a, string255 b);
-char * _pchar(string255 s);
-string255 pchar2str(char * s);
-
-int Length(string255 a);
-string255 copy(string255 a, int s, int l);
-string255 delete(string255 a, int s, int l);
-string255 trim(string255 a);
-
-#define STRINIT(a) {.len = sizeof(a) - 1, .str = a}
-
-
-int length_ar(void * a);
-
-typedef int file;
-typedef int TextFile;
-extern int FileMode;
-extern int IOResult;
-extern int stdout;
-extern int stderr;
-
-#define assign(a, b) assign_(&(a), b)
-void assign_(int * f, string255 fileName);
-void reset_1(int f, int size);
-void reset_2(int f, int size);
-#define BlockRead(a, b, c, d) BlockRead_(a, &(b), c, &(d))
-void BlockRead_(int f, void * p, int size, int * sizeRead);
-#define BlockWrite(a, b, c) BlockWrite_(a, &(b), c)
-void BlockWrite_(int f, void * p, int size);
-void close(int f);
-
-void write(int f, string255 s);
-void writeLn(int f, string255 s);
-
-bool DirectoryExists(string255 dir);
-bool FileExists(string255 filename);
-
-bool odd(int i);
-
-
-typedef int TThreadId;
-void ThreadSwitch();
-#define InterlockedIncrement(a) __InterlockedIncrement(&(a))
-#define InterlockedDecrement(a) __InterlockedDecrement(&(a))
-void __InterlockedIncrement(int * a);
-void __InterlockedDecrement(int * a);
-
-bool Assigned(void * a);
-
-void randomize();
-int random(int max);
-int abs(int i);
-double sqr(double n);
-double sqrt(double n);
-int trunc(double n);
-int round(double n);
-
-string255 ParamStr(int n);
-int ParamCount();
-
-#define val(a, b, c) _val(a, (LongInt*)&(b), (LongInt*)&(c))
-void _val(string255 str, LongInt * a, LongInt * c);
-
-extern double pi;
-
-string255 EnumToStr(int a);
-string255 ExtractFileName(string255 f);
--- a/hedgewars/pas2cSystem.pas	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-system;
-
-type 
-    Integer = integer;
-    LongInt = integer;
-    LongWord = integer;
-    Cardinal = integer;
-    PtrInt = integer;
-    Word = integer;
-    Byte = integer;
-    SmallInt = integer;
-    ShortInt = integer;
-    QWord = integer;
-    GLint = integer;
-    GLuint = integer;
-    int = integer;
-    size_t = integer;
-
-    pointer = pointer;
-
-    float = float;
-    single = float;
-    double = float;
-    real = float;
-    extended = float;
-    GLfloat = float;
-
-    boolean = boolean;
-    LongBool = boolean;
-
-    string = string;
-    shortstring = string;
-    ansistring = string;
-    widechar = string;
-
-    char = char;
-    PChar = ^char;
-    PPChar = ^Pchar;
-    
-    PByte = ^Byte;
-    PWord = ^Word;
-    PLongInt = ^LongInt;
-    PLongWord = ^LongWord;
-    PInteger = ^Integer;
-    
-    Handle = integer;
-
-    png_structp = pointer;
-    png_size_t = integer;
-
-var 
-    false, true: boolean;
-    
-    write, writeLn, read, readLn: procedure;
-    
-    StrLen, ord, Succ, Pred : function : integer;
-    inc, dec, Low, High, Lo, Hi : function : integer;
-    odd, even : function : boolean;
-
-    Now : function : integer;
-
-    new, dispose, FillChar, Move : procedure;
-
-    trunc, round : function : integer;
-    abs, sqr : function : integer;
-
-    StrPas, FormatDateTime, copy, delete, str, pos, trim, LowerCase : function : shortstring;
-    Length, StrToInt : function : integer;
-    SetLength, val : procedure;
-    _pchar : function : PChar;
-    pchar2str : function : string;
-    memcpy : procedure;
-
-    assign, rewrite, reset, flush, BlockWrite, BlockRead, close : procedure;
-    IOResult : integer;
-    exit, break, halt, continue : procedure;
-    TextFile, file : Handle;
-    FileMode : integer;
-    FileExists, DirectoryExists, eof : function : boolean;
-    ExtractFileName : function : string;
-    exitcode : integer;
-    stdout, stderr : Handle;
-    
-    ParamCount : function : integer;
-    ParamStr : function : string;
-
-    sqrt, arctan2, cos, sin, power : function : float;
-    pi : float;
-
-    TypeInfo, GetEnumName : function : shortstring;
-
-    UTF8ToUnicode, WrapText: function : shortstring;
-
-    sizeof : function : integer;
-
-    GetMem : function : pointer;
-    FreeMem : procedure;
-   
-    glGetString : function : pchar;
- 
-    glBegin, glBindTexture, glBlendFunc, glClear, glClearColor,
-    glColor4ub, glColorMask, glColorPointer, glDeleteTextures,
-    glDisable, glDisableClientState, glDrawArrays, glEnable,
-    glEnableClientState, glEnd, glGenTextures, glGetIntegerv,
-    glHint, glLineWidth, glLoadIdentity, glMatrixMode, glPopMatrix,
-    glPushMatrix, glReadPixels, glRotatef, glScalef, glTexCoord2f,
-    glTexCoordPointer, glTexImage2D, glTexParameterf,
-    glTexParameteri, glTranslatef, glVertex2d, glVertexPointer,
-    glViewport, glext_LoadExtension, glDeleteRenderbuffersEXT,
-    glDeleteFramebuffersEXT, glGenFramebuffersEXT,
-    glGenRenderbuffersEXT, glBindFramebufferEXT, 
-    glBindRenderbufferEXT, glRenderbufferStorageEXT,
-    glFramebufferRenderbufferEXT, glFramebufferTexture2DEXT : procedure;
-
-    GL_BGRA, GL_BLEND, GL_CLAMP_TO_EDGE, GL_COLOR_ARRAY,
-    GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_DEPTH_COMPONENT,
-    GL_DITHER, GL_EXTENSIONS, GL_FALSE, GL_FASTEST, GL_LINEAR,
-    GL_LINE_LOOP, GL_LINES, GL_LINE_SMOOTH, GL_LINE_STRIP,
-    GL_MAX_TEXTURE_SIZE, GL_MODELVIEW, GL_ONE_MINUS_SRC_ALPHA,
-    GL_PERSPECTIVE_CORRECTION_HINT, GL_PROJECTION, GL_QUADS,
-    GL_RENDERER, GL_RGBA, GL_RGBA8, GL_SRC_ALPHA, GL_TEXTURE_2D,
-    GL_TEXTURE_COORD_ARRAY, GL_TEXTURE_MAG_FILTER,
-    GL_TEXTURE_MIN_FILTER, GL_TEXTURE_PRIORITY, GL_TEXTURE_WRAP_S,
-    GL_TEXTURE_WRAP_T, GL_TRIANGLE_FAN, GL_TRUE, GL_VENDOR,
-    GL_VERSION, GL_VERTEX_ARRAY, GLenum,  GL_FRAMEBUFFER_EXT,
-    GL_RENDERBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
-    GL_COLOR_ATTACHMENT0_EXT, GL_FLOAT, GL_UNSIGNED_BYTE : integer;
-
-    TThreadId : function : integer;
-    BeginThread, ThreadSwitch : procedure;
-    InterlockedIncrement, InterlockedDecrement : procedure;
-    
-    random : function : integer;
-    randomize : procedure;
-    
-    Assigned : function : boolean;
-    
-    _strconcat, _strappend, _strprepend, _chrconcat : function : string;
-    _strcompare, _strncompare, _strcomparec : function : boolean;
-
-    png_structp, png_set_write_fn, png_get_io_ptr,
-    png_get_libpng_ver, png_create_write_struct,
-    png_create_info_struct, png_destroy_write_struct,
-    png_write_row, png_set_ihdr, png_write_info,
-    png_write_end : procedure;
-
-    EnumToStr : function : string;
-
--- a/hedgewars/uAI.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uAI.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,31 +30,27 @@
 
 implementation
 uses uConsts, SDLh, uAIMisc, uAIAmmoTests, uAIActions,
-    uAmmos, SysUtils{$IFNDEF USE_SDLTHREADS} {$IFDEF UNIX}, cthreads{$ENDIF} {$ENDIF}, uTypes,
+    uAmmos, SysUtils, uTypes,
     uVariables, uCommands, uUtils, uDebug, uAILandMarks;
 
 var BestActions: TActions;
     CanUseAmmo: array [TAmmoType] of boolean;
     StopThinking: boolean;
-{$IFDEF USE_SDLTHREADS} 
-    ThinkThread: PSDL_Thread = nil;
-{$ELSE}
-    ThinkThread: TThreadID;
-{$ENDIF}
-    hasThread: LongInt;
     StartTicks: Longword;
+    ThinkThread: PSDL_Thread;
+    ThreadLock: PSDL_Mutex;
 
 procedure FreeActionsList;
 begin
     AddFileLog('FreeActionsList called');
-    if hasThread <> 0 then
-    begin
-        AddFileLog('Waiting AI thread to finish');
+    if (ThinkThread <> nil) then
+        begin
         StopThinking:= true;
-        repeat
-            SDL_Delay(10)
-        until hasThread = 0
-    end;
+        SDL_WaitThread(ThinkThread, nil);
+        end;
+    SDL_LockMutex(ThreadLock);
+    ThinkThread:= nil;
+    SDL_UnlockMutex(ThreadLock);
 
     with CurrentHedgehog^ do
         if Gear <> nil then
@@ -66,7 +62,6 @@
 end;
 
 
-
 const cBranchStackSize = 12;
 type TStackEntry = record
                    WastedTicks: Longword;
@@ -123,22 +118,18 @@
         with Me^.Hedgehog^ do
             a:= CurAmmoType;
         aa:= a;
-{$IFDEF USE_SDLTHREADS}
-        SDL_delay(0);    //ThreadSwitch was only a hint
-{$ELSE}
-        ThreadSwitch();
-{$ENDIF}       
+        SDL_delay(0); // hint to let the context switch run
         repeat
-        if (CanUseAmmo[a]) 
-            and ((not rareChecks) or ((AmmoTests[a].flags and amtest_Rare) = 0)) 
-            and ((i = 0) or ((AmmoTests[a].flags and amtest_NoTarget) = 0)) 
+        if (CanUseAmmo[a])
+            and ((not rareChecks) or ((AmmoTests[a].flags and amtest_Rare) = 0))
+            and ((i = 0) or ((AmmoTests[a].flags and amtest_NoTarget) = 0))
             then
             begin
 {$HINTS OFF}
-            Score:= AmmoTests[a].proc(Me, Targets.ar[i].Point, BotLevel, ap);
+            Score:= AmmoTests[a].proc(Me, Targets.ar[i], BotLevel, ap);
 {$HINTS ON}
             if Actions.Score + Score > BestActions.Score then
-                if (BestActions.Score < 0) or (Actions.Score + Score > BestActions.Score + Byte(BotLevel) * 2048) then
+                if (BestActions.Score < 0) or (Actions.Score + Score > BestActions.Score + Byte(BotLevel - 1) * 2048) then
                     begin
                     BestActions:= Actions;
                     inc(BestActions.Score, Score);
@@ -150,10 +141,10 @@
                         AddAction(BestActions, aia_LookRight, 0, 200, 0, 0)
                     else if (ap.Angle < 0) then
                         AddAction(BestActions, aia_LookLeft, 0, 200, 0, 0);
-                    
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_Timerable) <> 0 then
                         AddAction(BestActions, aia_Timer, ap.Time div 1000, 400, 0, 0);
-                        
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_NoCrosshair) = 0 then
                         begin
                         dAngle:= LongInt(Me^.Angle) - Abs(ap.Angle);
@@ -168,23 +159,23 @@
                             AddAction(BestActions, aia_Down, aim_release, -dAngle, 0, 0)
                             end
                         end;
-                        
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_NeedTarget) <> 0 then
                         begin
                         AddAction(BestActions, aia_Put, 0, 1, ap.AttackPutX, ap.AttackPutY)
                         end;
-                        
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_OscAim) <> 0 then
                         begin
                         AddAction(BestActions, aia_attack, aim_push, 350 + random(200), 0, 0);
                         AddAction(BestActions, aia_attack, aim_release, 1, 0, 0);
-                         
+
                         if abs(ap.Angle) > 32 then
                            begin
                            AddAction(BestActions, aia_Down, aim_push, 100 + random(150), 0, 0);
                            AddAction(BestActions, aia_Down, aim_release, 32, 0, 0);
                            end;
-                        
+
                         AddAction(BestActions, aia_waitAngle, ap.Angle, 250, 0, 0);
                         AddAction(BestActions, aia_attack, aim_push, 1, 0, 0);
                         AddAction(BestActions, aia_attack, aim_release, 1, 0, 0);
@@ -243,21 +234,21 @@
 
 if (Me^.State and gstAttacked) = 0 then
     TestAmmos(Actions, Me, false);
-    
+
 BestRate:= RatePlace(Me);
 BaseRate:= Max(BestRate, 0);
 
-// switch to 'skip' if we can't move because of mouse cursor being shown
+// switch to 'skip' if we cannot move because of mouse cursor being shown
 if (Ammoz[Me^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) <> 0 then
     AddAction(Actions, aia_Weapon, Longword(amSkip), 100 + random(200), 0, 0);
-    
-if ((CurrentHedgehog^.MultiShootAttacks = 0) or ((Ammoz[Me^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoMoveAfter) = 0)) 
+
+if ((CurrentHedgehog^.MultiShootAttacks = 0) or ((Ammoz[Me^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoMoveAfter) = 0))
     and (GameFlags and gfArtillery = 0) then
     begin
     tmp:= random(2) + 1;
     Push(0, Actions, Me^, tmp);
     Push(0, Actions, Me^, tmp xor 3);
-    
+
     while (Stack.Count > 0) and (not StopThinking) do
         begin
         Pop(ticks, Actions, Me^);
@@ -267,7 +258,7 @@
             AddAction(Actions, aia_WaitXL, hwRound(Me^.X), 0, 0, 0)
         else
             AddAction(Actions, aia_WaitXR, hwRound(Me^.X), 0, 0, 0);
-        
+
         steps:= 0;
 
         while (not StopThinking) do
@@ -280,8 +271,8 @@
             if ticks > maxticks then
                 break;
 
-            if (BotLevel < 5) 
-                and (GoInfo.JumpType = jmpHJump) 
+            if (BotLevel < 5)
+                and (GoInfo.JumpType = jmpHJump)
                 and (not checkMark(hwRound(Me^.X), hwRound(Me^.Y), markHJumped))
                 then // hjump support
                 begin
@@ -295,7 +286,7 @@
                             AddAction(MadeActions, aia_LookRight, 0, 200, 0, 0)
                         else
                             AddAction(MadeActions, aia_LookLeft, 0, 200, 0, 0);
-                            
+
                         AddAction(MadeActions, aia_HJump, 0, 305 + random(50), 0, 0);
                         AddAction(MadeActions, aia_HJump, 0, 350, 0, 0);
                         end;
@@ -303,8 +294,8 @@
                     Push(ticks, Stack.States[Pred(Stack.Count)].MadeActions, AltMe, Me^.Message)
                     end;
                 end;
-            if (BotLevel < 3) 
-                and (GoInfo.JumpType = jmpLJump) 
+            if (BotLevel < 3)
+                and (GoInfo.JumpType = jmpLJump)
                 and (not checkMark(hwRound(Me^.X), hwRound(Me^.Y), markLJumped))
                 then // ljump support
                 begin
@@ -323,7 +314,7 @@
 
                 // push current position so we proceed from it after checking jump+forward walk opportunities
                 if CanGo then Push(ticks, Actions, Me^, Me^.Message);
-                
+
                 // first check where we go after jump walking forward
                 if Push(ticks, Actions, AltMe, Me^.Message) then
                     with Stack.States[Pred(Stack.Count)] do
@@ -331,10 +322,10 @@
                 break
                 end;
 
-            // 'not CanGO' means we can't go straight, possible jumps are checked above
+            // 'not CanGO' means we cannot go straight, possible jumps are checked above
             if not CanGo then
                 break;
-            
+
              inc(steps);
              Actions.actions[Pred(Actions.Count)].Param:= hwRound(Me^.X);
              Rate:= RatePlace(Me);
@@ -347,17 +338,17 @@
                 end
             else if Rate < BestRate then
                 break;
-                
+
             if ((Me^.State and gstAttacked) = 0) and ((steps mod 4) = 0) then
                 begin
                 if (steps > 4) and checkMark(hwRound(Me^.X), hwRound(Me^.Y), markWalkedHere) then
-                    break;                    
+                    break;
                 addMark(hwRound(Me^.X), hwRound(Me^.Y), markWalkedHere);
 
                 TestAmmos(Actions, Me, ticks shr 12 = oldticks shr 12);
-                
+
                 end;
-                
+
             if GoInfo.FallPix >= FallPixForBranching then
                 Push(ticks, Actions, Me^, Me^.Message xor 3); // aia_Left xor 3 = aia_Right
             end {while};
@@ -368,25 +359,25 @@
     end {if}
 end;
 
-function Think(Me: Pointer): ptrint;
+function Think(Me: PGear): LongInt; cdecl; export;
 var BackMe, WalkMe: TGear;
     switchCount: LongInt;
     StartTicks, currHedgehogIndex, itHedgehog, switchesNum, i: Longword;
     switchImmediatelyAvailable: boolean;
     Actions: TActions;
 begin
-InterlockedIncrement(hasThread);
+dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 StartTicks:= GameTicks;
 currHedgehogIndex:= CurrentTeam^.CurrHedgehog;
 itHedgehog:= currHedgehogIndex;
 switchesNum:= 0;
 
 switchImmediatelyAvailable:= (CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtSwitcher);
-if PGear(Me)^.Hedgehog^.BotLevel <> 5 then
+if Me^.Hedgehog^.BotLevel <> 5 then
     switchCount:= HHHasAmmo(PGear(Me)^.Hedgehog^, amSwitch)
 else switchCount:= 0;
 
-if (PGear(Me)^.State and gstAttacked) = 0 then
+if ((Me^.State and gstAttacked) = 0) or isInMultiShoot then
     if Targets.Count > 0 then
         begin
         // iterate over current team hedgehogs
@@ -402,7 +393,7 @@
                     begin
                     // when AI has to use switcher, make it cost smth unless they have a lot of switches
                     if (switchCount < 10) then Actions.Score:= (-27+switchCount*3)*4000;
-                    AddAction(Actions, aia_Weapon, Longword(amSwitch), 300 + random(200), 0, 0);                    
+                    AddAction(Actions, aia_Weapon, Longword(amSwitch), 300 + random(200), 0, 0);
                     AddAction(Actions, aia_attack, aim_push, 300 + random(300), 0, 0);
                     AddAction(Actions, aia_attack, aim_release, 1, 0, 0);
                     end;
@@ -416,10 +407,9 @@
                 itHedgehog:= Succ(itHedgehog) mod CurrentTeam^.HedgehogsNumber;
             until (itHedgehog = currHedgehogIndex) or ((CurrentTeam^.Hedgehogs[itHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[itHedgehog].Effects[heFrozen]=0));
 
-
             inc(switchesNum);
         until (not (switchImmediatelyAvailable or (switchCount > 0)))
-            or StopThinking 
+            or StopThinking
             or (itHedgehog = currHedgehogIndex)
             or BestActions.isWalkingToABetterPlace;
 
@@ -435,8 +425,9 @@
         end else SDL_Delay(100)
 else
     begin
-    BackMe:= PGear(Me)^;
-    while (not StopThinking) and (BestActions.Count = 0) do
+    BackMe:= Me^;
+    i:= 12;
+    while (not StopThinking) and (BestActions.Count = 0) and (i > 0) do
         begin
 (*
         // Maybe this would get a bit of movement out of them? Hopefully not *toward* water. Need to check how often he'd choose that strategy
@@ -449,14 +440,17 @@
         Actions.Pos:= 0;
         Actions.Score:= 0;
         Walk(@WalkMe, Actions);
+        dec(i);
         if not StopThinking then
             SDL_Delay(100)
         end
     end;
 
-PGear(Me)^.State:= PGear(Me)^.State and (not gstHHThinking);
+Me^.State:= Me^.State and (not gstHHThinking);
+SDL_LockMutex(ThreadLock);
+ThinkThread:= nil;
+SDL_UnlockMutex(ThreadLock);
 Think:= 0;
-InterlockedDecrement(hasThread)
 end;
 
 procedure StartThink(Me: PGear);
@@ -485,17 +479,16 @@
     exit
     end;
 
-FillBonuses((Me^.State and gstAttacked) <> 0);
-AddFileLog('Enter Think Thread');
-{$IFDEF USE_SDLTHREADS}
-ThinkThread := SDL_CreateThread(@Think{$IFDEF SDL13}, nil{$ENDIF}, Me);
-{$ELSE}
-BeginThread(@Think, Me, ThinkThread);
-{$ENDIF}
-AddFileLog('Thread started');
+FillBonuses(((Me^.State and gstAttacked) <> 0) and (not isInMultiShoot));
+
+SDL_LockMutex(ThreadLock);
+ThinkThread:= SDL_CreateThread(@Think{$IFDEF SDL13}, 'think'{$ENDIF}, Me);
+SDL_UnlockMutex(ThreadLock);
 end;
 
-//var scoreShown: boolean = false;
+{$IFDEF DEBUGAI}
+var scoreShown: boolean = false;
+{$ENDIF}
 
 procedure ProcessBot;
 const cStopThinkTime = 40;
@@ -513,21 +506,25 @@
                     StopMessages(Gear^.Message);
                     TryDo((Gear^.Message and gmAllStoppable) = 0, 'Engine bug: AI may break demos playing', true);
                     end;
-                    
+
                 if Gear^.Message <> 0 then
                     exit;
-                    
-                //scoreShown:= false;   
+
+{$IFDEF DEBUGAI}
+                scoreShown:= false;
+{$ENDIF}
                 StartThink(Gear);
                 StartTicks:= GameTicks
-                
+
             end else
                 begin
-                {if not scoreShown then
+{$IFDEF DEBUGAI}
+                if not scoreShown then
                     begin
                     if BestActions.Score > 0 then ParseCommand('/say Expected score = ' + inttostr(BestActions.Score div 1024), true);
                     scoreShown:= true
-                    end;}
+                    end;
+{$ENDIF}
                 ProcessAction(BestActions, Gear)
                 end
         else if ((GameTicks - StartTicks) > cMaxAIThinkTime)
@@ -537,14 +534,15 @@
 
 procedure initModule;
 begin
-    hasThread:= 0;
     StartTicks:= 0;
-    ThinkThread:= ThinkThread;
+    ThinkThread:= nil;
+    ThreadLock:= SDL_CreateMutex();
 end;
 
 procedure freeModule;
 begin
     FreeActionsList();
+    SDL_DestroyMutex(ThreadLock);
 end;
 
 end.
--- a/hedgewars/uAIActions.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uAIActions.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uAIAmmoTests.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uAIAmmoTests.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,8 +20,8 @@
 
 unit uAIAmmoTests;
 interface
-uses SDLh, uConsts, uFloat, uTypes;
-const 
+uses uConsts, uFloat, uTypes, uAIMisc;
+const
     amtest_Rare     = $00000001; // check only several positions
     amtest_NoTarget = $00000002; // each pos, but no targetting
 
@@ -34,27 +34,27 @@
         AttackPutX, AttackPutY: LongInt;
         end;
 
-function TestBazooka(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestSnowball(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestGrenade(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestMolotov(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestClusterBomb(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestWatermelon(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestDrillRocket(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestMortar(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestDesertEagle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestSniperRifle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestWhip(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestKamikaze(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestAirAttack(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestTeleport(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestHammer(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-function TestCake(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestSnowball(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestGrenade(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestMolotov(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestClusterBomb(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestWatermelon(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestDrillRocket(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestMortar(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestShotgun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestDesertEagle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestSniperRifle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestBaseballBat(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestFirePunch(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 
-type TAmmoTestProc = function (Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+type TAmmoTestProc = function (Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
     TAmmoTest = record
             proc: TAmmoTestProc;
             flags: Longword;
@@ -123,14 +123,14 @@
             );
 
 implementation
-uses uAIMisc, uVariables, uUtils, uGearsHandlers;
+uses uVariables, uUtils, uGearsHandlers;
 
 function Metric(x1, y1, x2, y2: LongInt): LongInt; inline;
 begin
 Metric:= abs(x1 - x2) + abs(y1 - y2)
 end;
 
-function TestBazooka(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var Vx, Vy, r, mX, mY: real;
     rTime: LongInt;
     EX, EY: LongInt;
@@ -147,8 +147,8 @@
 valueResult:= BadTurn;
 repeat
     rTime:= rTime + 300 + Level * 50 + random(300);
-    Vx:= - windSpeed * rTime * 0.5 + (Targ.X + AIrndSign(2) - mX) / rTime;
-    Vy:= cGravityf * rTime * 0.5 - (Targ.Y + 1 - mY) / rTime;
+    Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime;
+    Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - mY) / rTime;
     r:= sqr(Vx) + sqr(Vy);
     if not (r > 1) then
         begin
@@ -163,16 +163,16 @@
             dX:= dX + windSpeed;
             dY:= dY + cGravityf;
             dec(t)
-        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or 
-               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 5))) or (t <= 0);
-        
+        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
+               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t <= 0);
+
         EX:= trunc(x);
         EY:= trunc(y);
         if Level = 1 then
             value:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand)
         else value:= RateExplosion(Me, EX, EY, 101);
-        if value = 0 then
-            value:= 1024 - Metric(Targ.X, Targ.Y, EX, EY) div 64;
+        if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then
+            value:= 1024 - Metric(Targ.Point.X, Targ.Point.Y, EX, EY) div 64;
         if valueResult <= value then
             begin
             ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9));
@@ -184,12 +184,12 @@
             end;
         end
 //until (value > 204800) or (rTime > 4250); not so useful since adding score to the drowning
-until rTime > 4250;
+until rTime > 5050 - Level * 800;
 TestBazooka:= valueResult
 end;
 
 
-function TestDrillRocket(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestDrillRocket(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var Vx, Vy, r, mX, mY: real;
     rTime: LongInt;
     EX, EY: LongInt;
@@ -197,7 +197,11 @@
     x, y, dX, dY: real;
     t: LongInt;
     value: LongInt;
+    t2: real;
+    timer: Longint;
 begin
+    if (Level > 3) then exit(BadTurn);
+
     mX:= hwFloat2Float(Me^.X);
     mY:= hwFloat2Float(Me^.Y);
     ap.Time:= 0;
@@ -206,8 +210,8 @@
     valueResult:= BadTurn;
     repeat
         rTime:= rTime + 300 + Level * 50 + random(300);
-        Vx:= - windSpeed * rTime * 0.5 + (Targ.X + AIrndSign(2) - mX) / rTime;
-        Vy:= cGravityf * rTime * 0.5 - (Targ.Y - 35 - mY) / rTime;
+        Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime;
+        Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y - 35 - mY) / rTime;
         r:= sqr(Vx) + sqr(Vy);
         if not (r > 1) then
             begin
@@ -222,16 +226,34 @@
                 dX:= dX + windSpeed;
                 dY:= dY + cGravityf;
                 dec(t)
-            until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or 
-                   ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 5))) or (y > cWaterLine);
-            
+            until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
+                   ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (y > cWaterLine);
+
+            if TestCollExcludingObjects(trunc(x), trunc(y), 5) and (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) > 21) then
+                begin
+                timer := 500;
+                t2 := 0.5 / sqrt(sqr(dX) + sqr(dY));
+                dX := dX * t2;
+                dY := dY * t2;
+                repeat
+                    x:= x + dX;
+                    y:= y + dY;
+                    dec(timer);
+                until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 22)
+                    or (x < 0)
+                    or (y < 0)
+                    or (trunc(x) > LAND_WIDTH)
+                    or (trunc(y) > LAND_HEIGHT)
+                    or not TestCollExcludingObjects(trunc(x), trunc(y), 5)
+                    or (timer = 0)
+                end;
             EX:= trunc(x);
             EY:= trunc(y);
+            // Try to prevent AI from thinking firing into water will cause a drowning
+            if (EY < cWaterLine-5) and (Timer > 0) and (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) > 21) then exit(BadTurn);
             if Level = 1 then
                 value:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand)
             else value:= RateExplosion(Me, EX, EY, 101);
-            if value = 0 then
-                value:= 1024 - Metric(Targ.X, Targ.Y, EX, EY) div 64;
             if valueResult <= value then
                 begin
                 ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9));
@@ -239,15 +261,15 @@
                 ap.ExplR:= 100;
                 ap.ExplX:= EX;
                 ap.ExplY:= EY;
-                valueResult:= value
+                valueResult:= value-2500 // trying to make it slightly less attractive than a bazooka, to prevent waste.  AI could use awareness of weapon count
                 end;
             end
-    until rTime > 4250;
+    until rTime > 5050 - Level * 800;
     TestDrillRocket:= valueResult
 end;
 
 
-function TestSnowball(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestSnowball(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var Vx, Vy, r: real;
     rTime: LongInt;
     EX, EY: LongInt;
@@ -265,8 +287,8 @@
 valueResult:= BadTurn;
 repeat
     rTime:= rTime + 300 + Level * 50 + random(1000);
-    Vx:= - windSpeed * rTime * 0.5 + ((Targ.X + AIrndSign(2)) - meX) / rTime;
-    Vy:= cGravityf * rTime * 0.5 - (Targ.Y - meY) / rTime;
+    Vx:= - windSpeed * rTime * 0.5 + ((Targ.Point.X + AIrndSign(2)) - meX) / rTime;
+    Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y - meY) / rTime;
     r:= sqr(Vx) + sqr(Vy);
     if not (r > 1) then
         begin
@@ -281,15 +303,15 @@
             dX:= dX + windSpeed;
             dY:= dY + cGravityf;
             dec(t)
-        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or 
-               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 5))) or (t <= 0);
+        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
+               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t <= 0);
         EX:= trunc(x);
         EY:= trunc(y);
 
-        value:= RateShove(trunc(x), trunc(y), 5, 1, trunc((abs(dX)+abs(dY))*20), -dX, -dY, afTrackFall);
+        value:= RateShove(Me, trunc(x), trunc(y), 5, 1, trunc((abs(dX)+abs(dY))*20), -dX, -dY, afTrackFall);
         // LOL copypasta: this is score for digging with... snowball
         //if value = 0 then
-        //    value:= - Metric(Targ.X, Targ.Y, EX, EY) div 64;
+        //    value:= - Metric(Targ.Point.X, Targ.Point.Y, EX, EY) div 64;
 
         if valueResult <= value then
             begin
@@ -301,14 +323,14 @@
             valueResult:= value
             end;
      end
-until (rTime > 4250);
+until (rTime > 5050 - Level * 800);
 TestSnowball:= valueResult
 end;
 
-function TestMolotov(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestMolotov(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var Vx, Vy, r: real;
     Score, EX, EY, valueResult: LongInt;
-    TestTime: Longword;
+    TestTime: LongInt;
     x, y, dY, meX, meY: real;
     t: LongInt;
 begin
@@ -319,8 +341,8 @@
 ap.ExplR:= 0;
 repeat
     inc(TestTime, 300);
-    Vx:= (Targ.X - meX) / TestTime;
-    Vy:= cGravityf * (TestTime div 2) - Targ.Y - meY / TestTime;
+    Vx:= (Targ.Point.X - meX) / TestTime;
+    Vy:= cGravityf * (TestTime div 2) - Targ.Point.Y - meY / TestTime;
     r:= sqr(Vx) + sqr(Vy);
     if not (r > 1) then
         begin
@@ -333,15 +355,15 @@
             y:= y + dY;
             dY:= dY + cGravityf;
             dec(t)
-        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 6)) or 
-               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 6))) or (t = 0);
+        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 6)) or
+               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 6))) or (t = 0);
         EX:= trunc(x);
         EY:= trunc(y);
         if t < 50 then
             Score:= RateExplosion(Me, EX, EY, 97)  // average of 17 attempts, most good, but some failing spectacularly
         else
             Score:= BadTurn;
-                  
+
         if valueResult < Score then
             begin
             ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level));
@@ -352,15 +374,15 @@
             valueResult:= Score
             end;
         end
-until (TestTime > 4250);
+until (TestTime > 5050 - Level * 800);
 TestMolotov:= valueResult
 end;
 
-function TestGrenade(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestGrenade(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 const tDelta = 24;
 var Vx, Vy, r: real;
     Score, EX, EY, valueResult: LongInt;
-    TestTime: Longword;
+    TestTime: LongInt;
     x, y, meX, meY, dY: real;
     t: LongInt;
 begin
@@ -371,13 +393,13 @@
 meY:= hwFloat2Float(Me^.Y);
 repeat
     inc(TestTime, 1000);
-    Vx:= (Targ.X - meX) / (TestTime + tDelta);
-    Vy:= cGravityf * ((TestTime + tDelta) div 2) - (Targ.Y - meY) / (TestTime + tDelta);
+    Vx:= (Targ.Point.X - meX) / (TestTime + tDelta);
+    Vy:= cGravityf * ((TestTime + tDelta) div 2) - (Targ.Point.Y - meY) / (TestTime + tDelta);
     r:= sqr(Vx) + sqr(Vy);
     if not (r > 1) then
         begin
         x:= meX;
-        y:= meY; 
+        y:= meY;
         dY:= -Vy;
         t:= TestTime;
         repeat
@@ -385,21 +407,21 @@
             y:= y + dY;
             dY:= dY + cGravityf;
             dec(t)
-        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or 
-               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 5))) or (t = 0);
+        until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
+               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t = 0);
     EX:= trunc(x);
     EY:= trunc(y);
-    if t < 50 then 
+    if t < 50 then
         if Level = 1 then
             Score:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand)
         else Score:= RateExplosion(Me, EX, EY, 101)
-    else 
+    else
         Score:= BadTurn;
 
     if (valueResult < Score) and (Score > 0) then
         begin
-        ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level));
-        ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 15);
+        ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level * 3));
+        ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 20);
         ap.Time:= TestTime;
         ap.ExplR:= 100;
         ap.ExplX:= EX;
@@ -408,11 +430,11 @@
         end;
     end
 //until (Score > 204800) or (TestTime > 4000);
-until TestTime > 4000;
+until TestTime > 4500 - Level * 512;
 TestGrenade:= valueResult
 end;
 
-function TestClusterBomb(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestClusterBomb(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 const tDelta = 24;
 var Vx, Vy, r: real;
     Score, EX, EY, valueResult: LongInt;
@@ -428,11 +450,11 @@
 repeat
     inc(TestTime, 900);
     // Try to overshoot slightly, seems to pay slightly better dividends in terms of hitting cluster
-    if meX<Targ.X then
-        Vx:= ((Targ.X+10) - meX) / (TestTime + tDelta)
+    if meX<Targ.Point.X then
+        Vx:= ((Targ.Point.X+10) - meX) / (TestTime + tDelta)
     else
-        Vx:= ((Targ.X-10) - meX) / (TestTime + tDelta);
-    Vy:= cGravityf * ((TestTime + tDelta) div 2) - ((Targ.Y-50) - meY) / (TestTime + tDelta);
+        Vx:= ((Targ.Point.X-10) - meX) / (TestTime + tDelta);
+    Vy:= cGravityf * ((TestTime + tDelta) div 2) - ((Targ.Point.Y-50) - meY) / (TestTime + tDelta);
     r:= sqr(Vx)+sqr(Vy);
     if not (r > 1) then
         begin
@@ -445,18 +467,18 @@
         y:= y + dY;
         dY:= dY + cGravityf;
         dec(t)
-    until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or 
-           ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 5))) or (t = 0);
+    until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or
+           ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t = 0);
     EX:= trunc(x);
     EY:= trunc(y);
-    if t < 50 then 
+    if t < 50 then
         Score:= RateExplosion(Me, EX, EY, 41)
-    else 
+    else
         Score:= BadTurn;
 
-     if valueResult < Score then
+     if Score > 0 then
         begin
-        ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level));
+        ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level * 2));
         ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 15);
         ap.Time:= TestTime div 1000 * 1000;
         ap.ExplR:= 90;
@@ -469,7 +491,7 @@
 TestClusterBomb:= valueResult
 end;
 
-function TestWatermelon(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestWatermelon(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 const tDelta = 24;
 var Vx, Vy, r: real;
     Score, EX, EY, valueResult: LongInt;
@@ -484,8 +506,8 @@
 meY:= hwFloat2Float(Me^.Y);
 repeat
     inc(TestTime, 900);
-    Vx:= (Targ.X - meX) / (TestTime + tDelta);
-    Vy:= cGravityf * ((TestTime + tDelta) div 2) - ((Targ.Y-50) - meY) / (TestTime + tDelta);
+    Vx:= (Targ.Point.X - meX) / (TestTime + tDelta);
+    Vy:= cGravityf * ((TestTime + tDelta) div 2) - ((Targ.Point.Y-50) - meY) / (TestTime + tDelta);
     r:= sqr(Vx)+sqr(Vy);
     if not (r > 1) then
         begin
@@ -498,16 +520,16 @@
             y:= y + dY;
             dY:= dY + cGravityf;
             dec(t)
-       until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 6)) or 
-               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 6))) or (t = 0);
-        
+       until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 6)) or
+               ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 6))) or (t = 0);
+
         EX:= trunc(x);
         EY:= trunc(y);
-        if t < 50 then 
+        if t < 50 then
             Score:= RateExplosion(Me, EX, EY, 200) + RateExplosion(Me, EX, EY + 120, 200)
-        else 
+        else
             Score:= BadTurn;
-            
+
         if valueResult < Score then
             begin
             ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level));
@@ -544,8 +566,8 @@
             else
                 Solve:= 0
     end;
-    
-function TestMortar(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+
+function TestMortar(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 //const tDelta = 24;
 var Vx, Vy: real;
     Score, EX, EY: LongInt;
@@ -561,13 +583,13 @@
     if (Level > 2) then
         exit(BadTurn);
 
-    TestTime:= Solve(Targ.X, Targ.Y, trunc(meX), trunc(meY));
+    TestTime:= Solve(Targ.Point.X, Targ.Point.Y, trunc(meX), trunc(meY));
 
     if TestTime = 0 then
         exit(BadTurn);
 
-    Vx:= (Targ.X - meX) / TestTime;
-    Vy:= cGravityf * (TestTime div 2) - (Targ.Y - meY) / TestTime;
+    Vx:= (Targ.Point.X - meX) / TestTime;
+    Vy:= cGravityf * (TestTime div 2) - (Targ.Point.Y - meY) / TestTime;
 
     x:= meX;
     y:= meY;
@@ -579,15 +601,15 @@
         dY:= dY + cGravityf;
         EX:= trunc(x);
         EY:= trunc(y);
-    until (((Me = CurrentHedgehog^.Gear) and TestColl(EX, EY, 4)) or 
-           ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, EX, EY, 4))) or (EY > cWaterLine);
+    until (((Me = CurrentHedgehog^.Gear) and TestColl(EX, EY, 4)) or
+           ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, EX, EY, 4))) or (EY > cWaterLine);
 
     if (EY < cWaterLine) and (dY >= 0) then
         begin
         Score:= RateExplosion(Me, EX, EY, 91);
         if (Score = 0) then
-            if (dY > 0.15) then
-                Score:= - abs(Targ.Y - EY) div 32
+            if (dY > 0.15) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then
+                Score:= - abs(Targ.Point.Y - EY) div 32
             else
                 Score:= BadTurn
         else if (Score < 0) then
@@ -596,7 +618,7 @@
     else
         Score:= BadTurn;
 
-    if BadTurn < Score then
+    if Score > 0 then
         begin
         ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level));
         ap.Power:= 1;
@@ -607,7 +629,7 @@
         end;
 end;
 
-function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestShotgun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 const
     MIN_RANGE =  80;
     MAX_RANGE = 400;
@@ -621,33 +643,33 @@
 ap.Power:= 1;
 x:= hwFloat2Float(Me^.X);
 y:= hwFloat2Float(Me^.Y);
-range:= Metric(trunc(x), trunc(y), Targ.X, Targ.Y);
+range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y);
 if ( range < MIN_RANGE ) or ( range > MAX_RANGE ) then
     exit(BadTurn);
 
-Vx:= (Targ.X - x) * 1 / 1024;
-Vy:= (Targ.Y - y) * 1 / 1024;
+Vx:= (Targ.Point.X - x) * 1 / 1024;
+Vy:= (Targ.Point.Y - y) * 1 / 1024;
 ap.Angle:= DxDy2AttackAnglef(Vx, -Vy);
 repeat
     x:= x + vX;
     y:= y + vY;
     rx:= trunc(x);
     ry:= trunc(y);
-    if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 2)) or 
-        ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, rx, ry, 2)) then
+    if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 2)) or
+        ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, rx, ry, 2)) then
     begin
         x:= x + vX * 8;
         y:= y + vY * 8;
         valueResult:= RateShotgun(Me, vX, vY, rx, ry);
-     
-        if valueResult = 0 then 
-            valueResult:= 1024 - Metric(Targ.X, Targ.Y, rx, ry) div 64
-        else 
+
+        if (valueResult = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then
+            valueResult:= 1024 - Metric(Targ.Point.X, Targ.Point.Y, rx, ry) div 64
+        else
             dec(valueResult, Level * 4000);
         // 27/20 is reuse bonus
         exit(valueResult * 27 div 20)
     end
-until (Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) < 4)
+until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4)
     or (x < 0)
     or (y < 0)
     or (trunc(x) > LAND_WIDTH)
@@ -656,27 +678,26 @@
 TestShotgun:= BadTurn
 end;
 
-function TestDesertEagle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-var Vx, Vy, x, y, t, dmgMod: real;
+function TestDesertEagle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+var Vx, Vy, x, y, t: real;
     d: Longword;
-    fallDmg, valueResult: LongInt;
+    {fallDmg, }valueResult: LongInt;
 begin
-if Level > 4 then exit(BadTurn);
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
+if (Level > 4) or (Targ.Score < 0) or (Targ.Kind <> gtHedgehog) then exit(BadTurn);
 Level:= Level; // avoid compiler hint
-ap.ExplR:= 0;
+ap.ExplR:= 1;
 ap.Time:= 0;
 ap.Power:= 1;
 
 x:= hwFloat2Float(Me^.X);
 y:= hwFloat2Float(Me^.Y);
 
-if Abs(trunc(x) - Targ.X) + Abs(trunc(y) - Targ.Y) < 20 then
+if Abs(trunc(x) - Targ.Point.X) + Abs(trunc(y) - Targ.Point.Y) < 20 then
     exit(BadTurn);
 
-t:= 2 / sqrt(sqr(Targ.X - x)+sqr(Targ.Y-y));
-Vx:= (Targ.X - x) * t;
-Vy:= (Targ.Y - y) * t;
+t:= 2 / sqrt(sqr(Targ.Point.X - x)+sqr(Targ.Point.Y-y));
+Vx:= (Targ.Point.X - x) * t;
+Vy:= (Targ.Point.Y - y) * t;
 ap.Angle:= DxDy2AttackAnglef(Vx, -Vy);
 d:= 0;
 
@@ -686,47 +707,40 @@
     if ((trunc(x) and LAND_WIDTH_MASK) = 0)and((trunc(y) and LAND_HEIGHT_MASK) = 0)
     and (Land[trunc(y), trunc(x)] <> 0) then
         inc(d);
-until (Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) < 5)
+until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 5)
     or (x < 0)
     or (y < 0)
     or (trunc(x) > LAND_WIDTH)
     or (trunc(y) > LAND_HEIGHT)
     or (d > 48);
 
-if Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) < 5 then
-    begin
-    fallDmg:= TraceShoveFall(Targ.X, Targ.Y, vX * 0.00125 * 20, vY * 0.00125 * 20);
-    if fallDmg < 0 then
-        valueResult:= 204800
-    else valueResult:= Max(0, (4 - d div 12) * trunc((7 + fallDmg) * dmgMod) * 1024)
-    end
-else
-    valueResult:= BadTurn;
+if Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 5 then
+     valueResult:= RateShove(Me, Targ.Point.X, Targ.Point.Y, 1, 7, 20, vX*0.125, vY*0.125, afTrackFall)
+else valueResult:= BadTurn;
 TestDesertEagle:= valueResult
 end;
 
 
-function TestSniperRifle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
-var Vx, Vy, x, y, t, dmg, dmgMod: real;
+function TestSniperRifle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
+var Vx, Vy, x, y, t, dmg: real;
     d: Longword;
-    fallDmg: LongInt;
+    //fallDmg: LongInt;
 begin
-if Level > 3 then exit(BadTurn);
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
+if (Level > 3) or (Targ.Score < 0) or (Targ.Kind <> gtHedgehog) then exit(BadTurn);
 Level:= Level; // avoid compiler hint
 ap.ExplR:= 0;
 ap.Time:= 0;
 ap.Power:= 1;
 x:= hwFloat2Float(Me^.X);
 y:= hwFloat2Float(Me^.Y);
-if Abs(trunc(x) - Targ.X) + Abs(trunc(y) - Targ.Y) < 40 then
+if Abs(trunc(x) - Targ.Point.X) + Abs(trunc(y) - Targ.Point.Y) < 40 then
     exit(BadTurn);
 
-dmg:= sqrt(sqr(Targ.X - x)+sqr(Targ.Y-y));
+dmg:= sqrt(sqr(Targ.Point.X - x)+sqr(Targ.Point.Y-y));
 t:= 1.5 / dmg;
 dmg:= dmg * 0.025; // div 40
-Vx:= (Targ.X - x) * t;
-Vy:= (Targ.Y - y) * t;
+Vx:= (Targ.Point.X - x) * t;
+Vy:= (Targ.Point.Y - y) * t;
 ap.Angle:= DxDy2AttackAnglef(Vx, -Vy);
 d:= 0;
 
@@ -736,27 +750,20 @@
     if ((trunc(x) and LAND_WIDTH_MASK) = 0)and((trunc(y) and LAND_HEIGHT_MASK) = 0)
     and (Land[trunc(y), trunc(x)] <> 0) then
         inc(d);
-until (Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) < 4)
+until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4)
     or (x < 0)
     or (y < 0)
     or (trunc(x) > LAND_WIDTH)
     or (trunc(y) > LAND_HEIGHT)
     or (d > 22);
 
-if Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) < 4 then
-    begin
-    fallDmg:= TraceShoveFall(Targ.X, Targ.Y, vX * 0.00166 * dmg, vY * 0.00166 * dmg);
-    if fallDmg < 0 then
-        TestSniperRifle:= BadTurn
-    else 
-        TestSniperRifle:= Max(0, trunc((dmg + fallDmg) * dmgMod) * 1024)
-    end
-else
-    TestSniperRifle:= BadTurn
+if Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4 then
+     TestSniperRifle:= RateShove(Me, Targ.Point.X, Targ.Point.Y, 1, trunc(dmg), 20, vX*0.166, vY*0.166, afTrackFall)
+else TestSniperRifle:= BadTurn;
 end;
 
 
-function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestBaseballBat(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var valueResult, a, v1, v2: LongInt;
     x, y, trackFall: LongInt;
     dx, dy: real;
@@ -780,20 +787,20 @@
         dx:= sin(a / cMaxAngle * pi) * 0.5;
         dy:= cos(a / cMaxAngle * pi) * 0.5;
 
-        v1:= RateShove(x - 10, y + 2
+        v1:= RateShove(Me, x - 10, y + 2
                 , 32, 30, 115
                 , -dx, -dy, trackFall);
-        v2:= RateShove(x + 10, y + 2
+        v2:= RateShove(Me, x + 10, y + 2
                 , 32, 30, 115
                 , dx, -dy, trackFall);
         if (v1 > valueResult) or (v2 > valueResult) then
-            if (v2 > v1) 
+            if (v2 > v1)
                 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
                 begin
                 ap.Angle:= a;
                 valueResult:= v2
                 end
-            else 
+            else
                 begin
                 ap.Angle:= -a;
                 valueResult:= v1
@@ -801,14 +808,14 @@
 
         a:= a - 15 - random(cMaxAngle div 16)
         end;
-   
+
     if valueResult <= 0 then
         valueResult:= BadTurn;
 
     TestBaseballBat:= valueResult;
 end;
 
-function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestFirePunch(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var valueResult, v1, v2, i: LongInt;
     x, y, trackFall: LongInt;
 begin
@@ -826,11 +833,11 @@
     v1:= 0;
     for i:= 0 to 8 do
         begin
-        v1:= v1 + RateShove(x - 5, y - 10 * i
+        v1:= v1 + RateShove(Me, x - 5, y - 10 * i
                 , 19, 30, 40
                 , -0.45, -0.9, trackFall or afSetSkip);
         end;
-    v1:= v1 + RateShove(x - 5, y - 90
+    v1:= v1 + RateShove(Me, x - 5, y - 90
             , 19, 30, 40
             , -0.45, -0.9, trackFall);
 
@@ -839,26 +846,26 @@
     v2:= 0;
     for i:= 0 to 8 do
         begin
-        v2:= v2 + RateShove(x + 5, y - 10 * i
+        v2:= v2 + RateShove(Me, x + 5, y - 10 * i
                 , 19, 30, 40
                 , 0.45, -0.9, trackFall or afSetSkip);
         end;
-    v2:= v2 + RateShove(x + 5, y - 90
+    v2:= v2 + RateShove(Me, x + 5, y - 90
             , 19, 30, 40
             , 0.45, -0.9, trackFall);
 
-    if (v2 > v1) 
+    if (v2 > v1)
         or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
         begin
         ap.Angle:= 1;
         valueResult:= v2
         end
-    else 
+    else
         begin
         ap.Angle:= -1;
         valueResult:= v1
         end;
-    
+
     if valueResult <= 0 then
         valueResult:= BadTurn;
 
@@ -866,7 +873,7 @@
 end;
 
 
-function TestWhip(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var valueResult, v1, v2: LongInt;
     x, y, trackFall: LongInt;
 begin
@@ -882,37 +889,37 @@
     y:= hwRound(Me^.Y);
 
     // check left direction
-    {first RateShove checks farthermost of two whip's AmmoShove attacks 
-    to encourage distant attacks (damaged hog is excluded from view of second 
+    {first RateShove checks farthermost of two whip's AmmoShove attacks
+    to encourage distant attacks (damaged hog is excluded from view of second
     RateShove call)}
-    v1:= RateShove(x - 13, y
+    v1:= RateShove(Me, x - 13, y
             , 30, 30, 25
             , -1, -0.8, trackFall or afSetSkip);
     v1:= v1 +
-        RateShove(x - 2, y
+        RateShove(Me, x - 2, y
             , 30, 30, 25
             , -1, -0.8, trackFall);
     // now try opposite direction
-    v2:= RateShove(x + 13, y
+    v2:= RateShove(Me, x + 13, y
             , 30, 30, 25
             , 1, -0.8, trackFall or afSetSkip);
     v2:= v2 +
-        RateShove(x + 2, y
+        RateShove(Me, x + 2, y
             , 30, 30, 25
             , 1, -0.8, trackFall);
 
-    if (v2 > v1) 
+    if (v2 > v1)
         or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
         begin
         ap.Angle:= 1;
         valueResult:= v2
         end
-    else 
+    else
         begin
         ap.Angle:= -1;
         valueResult:= v1
         end;
-    
+
     if valueResult <= 0 then
         valueResult:= BadTurn
     else
@@ -921,7 +928,7 @@
     TestWhip:= valueResult;
 end;
 
-function TestKamikaze(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 const step = 8;
 var valueResult, i, v, tx: LongInt;
     trackFall: LongInt;
@@ -931,19 +938,19 @@
     ap.Time:= 0;
     ap.Power:= 1;
 
-    if Level = 1 then 
+    if Level = 1 then
         trackFall:= afTrackFall
     else if Level = 2 then
         trackFall:= 0
     else
         exit(BadTurn);
-        
+
     valueResult:= 0;
     v:= 0;
 
     x:= hwFloat2Float(Me^.X);
     y:= hwFloat2Float(Me^.Y);
-    d:= sqrt(sqr(Targ.X - x) + sqr(Targ.Y - y));
+    d:= sqrt(sqr(Targ.Point.X - x) + sqr(Targ.Point.Y - y));
     if d < 10 then
         begin
         dx:= 0;
@@ -953,21 +960,21 @@
     else
         begin
         t:= step / d;
-        dx:= (Targ.X - x) * t;
-        dy:= (Targ.Y - y) * t;
+        dx:= (Targ.Point.X - x) * t;
+        dy:= (Targ.Point.Y - y) * t;
 
         ap.Angle:= DxDy2AttackAnglef(dx, -dy)
         end;
-    
+
     if dx >= 0 then cx:= 0.45 else cx:= -0.45;
 
     for i:= 0 to 512 div step - 2 do
         begin
-        valueResult:= valueResult + 
-            RateShove(trunc(x), trunc(y)
+        valueResult:= valueResult +
+            RateShove(Me, trunc(x), trunc(y)
                 , 30, 30, 25
                 , cx, -0.9, trackFall or afSetSkip);
-                
+
         x:= x + dx;
         y:= y + dy;
         end;
@@ -976,14 +983,14 @@
         x:= hwFloat2Float(Me^.X);
         y:= hwFloat2Float(Me^.Y);
         tx:= trunc(x);
-        v:= RateShove(tx, trunc(y)
+        v:= RateShove(Me, tx, trunc(y)
                 , 30, 30, 25
                 , -cx, -0.9, trackFall);
         for i:= 1 to 512 div step - 2 do
             begin
             y:= y + dy;
-            v:= v + 
-                RateShove(tx, trunc(y)
+            v:= v +
+                RateShove(Me, tx, trunc(y)
                     , 30, 30, 25
                     , -cx, -0.9, trackFall or afSetSkip);
             end
@@ -994,7 +1001,7 @@
         valueResult:= v
         end;
 
-    v:= RateShove(trunc(x), trunc(y)
+    v:= RateShove(Me, trunc(x), trunc(y)
             , 30, 30, 25
             , cx, -0.9, trackFall);
     valueResult:= valueResult + v - KillScore * friendlyfactor div 100 * 1024;
@@ -1005,7 +1012,7 @@
     TestKamikaze:= valueResult;
 end;
 
-function TestHammer(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var rate: LongInt;
 begin
 Level:= Level; // avoid compiler hint
@@ -1015,14 +1022,14 @@
 ap.Time:= 0;
 ap.Power:= 1;
 ap.Angle:= 0;
-         
+
 rate:= RateHammer(Me);
 if rate = 0 then
     rate:= BadTurn;
 TestHammer:= rate;
 end;
 
-function TestAirAttack(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 const cShift = 4;
 var bombsSpeed, X, Y, dY: real;
     b: array[0..9] of boolean;
@@ -1036,12 +1043,12 @@
     exit(BadTurn);
 
 ap.Angle:= 0;
-ap.AttackPutX:= Targ.X;
-ap.AttackPutY:= Targ.Y;
+ap.AttackPutX:= Targ.Point.X;
+ap.AttackPutY:= Targ.Point.Y;
 
 bombsSpeed:= hwFloat2Float(cBombsSpeed);
-X:= Targ.X - 135 - cShift; // hh center - cShift
-X:= X - bombsSpeed * sqrt(((Targ.Y + 128) * 2) / cGravityf);
+X:= Targ.Point.X - 135 - cShift; // hh center - cShift
+X:= X - bombsSpeed * sqrt(((Targ.Point.Y + 128) * 2) / cGravityf);
 Y:= -128;
 dY:= 0;
 
@@ -1073,7 +1080,7 @@
 
 for i:= 0 to 5 do inc(valueResult, dmg[i]);
 t:= valueResult;
-ap.AttackPutX:= Targ.X - 60;
+ap.AttackPutX:= Targ.Point.X - 60;
 
 for i:= 0 to 3 do
     begin
@@ -1082,7 +1089,7 @@
     if t > valueResult then
         begin
         valueResult:= t;
-        ap.AttackPutX:= Targ.X - 30 - cShift + i * 30
+        ap.AttackPutX:= Targ.Point.X - 30 - cShift + i * 30
         end
     end;
 
@@ -1092,7 +1099,7 @@
 end;
 
 
-function TestTeleport(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var
     i, failNum: longword;
     maxTop: longword;
@@ -1105,15 +1112,15 @@
         begin
         if Me^.Health <= 100  then
             begin
-            maxTop := Targ.Y - cHHRadius * 2;
-            
-            while not TestColl(Targ.X, maxTop, cHHRadius) and (maxTop > topY + cHHRadius * 2 + 1) do
+            maxTop := Targ.Point.Y - cHHRadius * 2;
+
+            while not TestColl(Targ.Point.X, maxTop, cHHRadius) and (maxTop > topY + cHHRadius * 2 + 1) do
                 dec(maxTop, cHHRadius*2);
-            if not TestColl(Targ.X, maxTop + cHHRadius, cHHRadius) then
+            if not TestColl(Targ.Point.X, maxTop + cHHRadius, cHHRadius) then
                 begin
-                ap.AttackPutX := Targ.X;
+                ap.AttackPutX := Targ.Point.X;
                 ap.AttackPutY := maxTop + cHHRadius;
-                TestTeleport := Targ.Y - maxTop;
+                TestTeleport := Targ.Point.Y - maxTop;
                 end;
             end;
         end
@@ -1125,7 +1132,7 @@
             inc(failNum);
         until not TestColl(bonuses.ar[i].X, bonuses.ar[i].Y - cHHRadius - bonuses.ar[i].Radius, cHHRadius)
         or (failNum = bonuses.Count*2);
-        
+
         if failNum < bonuses.Count*2 then
             begin
             ap.AttackPutX := bonuses.ar[i].X;
@@ -1147,7 +1154,7 @@
     begin
     cakeStep(Gear);
     v:= RateExplosion(Me, hwRound(Gear^.X), hwRound(Gear^.Y), cakeDmg * 2, afTrackFall);
-    if v > ap.Power then 
+    if v > ap.Power then
         begin
         ap.ExplX:= hwRound(Gear^.X);
         ap.ExplY:= hwRound(Gear^.Y);
@@ -1156,7 +1163,7 @@
     end;
 end;
 
-function TestCake(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams): LongInt;
 var valueResult, v1, v2: LongInt;
     cake: TGear;
 begin
@@ -1171,7 +1178,7 @@
 
     //FillChar(cake, sizeof(cake), 0);
     cake.Radius:= 7;
-    cake.CollisionMask:= lfCurrentMask;
+    cake.CollisionMask:= lfNotCurrentMask;
     cake.Hedgehog:= Me^.Hedgehog;
 
     // check left direction
--- a/hedgewars/uAIMisc.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uAIMisc.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,14 +30,18 @@
 
       BadTurn = Low(LongInt) div 4;
 
-type TTarget = record
+type TTarget = record // starting to look more and more like a gear
     Point: TPoint;
-    Score: LongInt;
-    skip, matters: boolean;
+    Score, Radius: LongInt;
+    State: LongWord;
+    Density: real;
+    skip, matters, dead: boolean;
+    Kind: TGearType;
     end;
 TTargets = record
     Count: Longword;
-    ar: array[0..Pred(cMaxHHs)] of TTarget;
+    ar: array[0..Pred(256)] of TTarget;
+    reset: boolean;
     end;
 TJumpType = (jmpNone, jmpHJump, jmpLJump);
 TGoInfo = record
@@ -55,6 +59,7 @@
 procedure freeModule;
 
 procedure FillTargets;
+procedure ResetTargets; inline;
 procedure AddBonus(x, y: LongInt; r: Longword; s: LongInt); inline;
 procedure FillBonuses(isAfterAttack: boolean);
 procedure AwareOfExplosion(x, y, r: LongInt); inline;
@@ -63,11 +68,11 @@
 function  TestColl(x, y, r: LongInt): boolean; inline;
 function  TestCollExcludingObjects(x, y, r: LongInt): boolean; inline;
 function  TestCollExcludingMe(Me: PGear; x, y, r: LongInt): boolean; inline;
-function  TraceShoveFall(x, y, dX, dY: Real): LongInt;
 
 function  RateExplosion(Me: PGear; x, y, r: LongInt): LongInt; inline;
-function  RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt;
-function  RateShove(x, y, r, power, kick: LongInt; gdX, gdY: real; Flags: LongWord): LongInt;
+function  RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt; inline;
+function  RealRateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt;
+function  RateShove(Me: PGear; x, y, r, power, kick: LongInt; gdX, gdY: real; Flags: LongWord): LongInt;
 function  RateShotgun(Me: PGear; gdX, gdY: real; x, y: LongInt): LongInt;
 function  RateHammer(Me: PGear): LongInt;
 
@@ -89,52 +94,82 @@
 
 const KillScore = 200;
 var friendlyfactor: LongInt = 300;
+var dmgMod: real = 1.0;
 
 implementation
 uses uCollisions, uVariables, uUtils, uLandTexture, uGearsUtils;
 
-var 
+var
     KnownExplosion: record
         X, Y, Radius: LongInt
         end = (X: 0; Y: 0; Radius: 0);
 
+procedure ResetTargets; inline;
+var i: LongWord;
+begin
+if Targets.reset then
+    for i:= 0 to Targets.Count do
+        Targets.ar[i].dead:= false;
+Targets.reset:= false;
+end;
 procedure FillTargets;
-var i, t: Longword;
+var //i, t: Longword;
     f, e: LongInt;
+    Gear: PGear;
 begin
 Targets.Count:= 0;
+Targets.reset:= false;
 f:= 0;
 e:= 0;
-for t:= 0 to Pred(TeamsCount) do
-    with TeamsArray[t]^ do
-        if not hasGone then
+Gear:= GearsList;
+while Gear <> nil do
+    begin
+    if  (((Gear^.Kind = gtHedgehog) and
+            (Gear <> ThinkingHH) and
+            (Gear^.Health > Gear^.Damage) and
+            not(Gear^.Hedgehog^.Team^.hasgone)) or
+        ((Gear^.Kind = gtExplosives) and
+            (Gear^.Health > Gear^.Damage)) or
+        ((Gear^.Kind = gtMine) and
+            (Gear^.Health = 0) and
+             (Gear^.Damage < 35))
+             )  and 
+        (Targets.Count < 256) then
+        begin
+        with Targets.ar[Targets.Count] do
             begin
-            for i:= 0 to cMaxHHIndex do
-                if (Hedgehogs[i].Gear <> nil)
-                and (Hedgehogs[i].Gear <> ThinkingHH)
-                and (Hedgehogs[i].Gear^.Health > Hedgehogs[i].Gear^.Damage) 
-                    then
+            skip:= false;
+            dead:= false;
+            Kind:= Gear^.Kind;
+            Radius:= Gear^.Radius;
+            Density:= hwFloat2Float(Gear^.Density)/3;
+            State:= Gear^.State;
+            matters:= (Gear^.AIHints and aihDoesntMatter) = 0;
+
+            Point.X:= hwRound(Gear^.X);
+            Point.Y:= hwRound(Gear^.Y);
+            if (Gear^.Kind = gtHedgehog) then
+                begin
+                if (Gear^.Hedgehog^.Team^.Clan = CurrentTeam^.Clan) then
                     begin
-                    with Targets.ar[Targets.Count], Hedgehogs[i] do
-                        begin
-                        skip:= false;
-                        matters:= (Hedgehogs[i].Gear^.AIHints and aihDoesntMatter) = 0;
-                        
-                        Point.X:= hwRound(Gear^.X);
-                        Point.Y:= hwRound(Gear^.Y);
-                        if Clan <> CurrentTeam^.Clan then
-                            begin
-                            Score:= Gear^.Health - Gear^.Damage;
-                            inc(e)
-                            end else
-                            begin
-                            Score:= Gear^.Damage - Gear^.Health;
-                            inc(f)
-                            end
-                        end;
-                    inc(Targets.Count)
+                    Score:= Gear^.Damage - Gear^.Health;
+                    inc(f)
+                    end
+                else 
+                    begin
+                    Score:= Gear^.Health - Gear^.Damage;
+                    inc(e)
                     end;
+                end
+            else if Gear^.Kind = gtExplosives then
+                Score:= Gear^.Health - Gear^.Damage
+            else if Gear^.Kind = gtMine then 
+                Score:= max(0,35-Gear^.Damage);
             end;
+        inc(Targets.Count)
+        end;
+    Gear:= Gear^.NextGear
+    end;
 
 if e > f then friendlyfactor:= 300 + (e - f) * 30
 else friendlyfactor:= max(30, 300 - f * 80 div max(1,e))
@@ -180,24 +215,24 @@
             gtFlame:
                 if (Gear^.State and gsttmpFlag) <> 0 then
                     AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 20, -50);
-// avoid mines unless they are very likely to be duds, or are duds. also avoid if they are about to blow 
+// avoid mines unless they are very likely to be duds, or are duds. also avoid if they are about to blow
             gtMine:
                 if ((Gear^.State and gstAttacking) = 0) and (((cMineDudPercent < 90) and (Gear^.Health <> 0))
                 or (isAfterAttack and (Gear^.Health = 0) and (Gear^.Damage > 30))) then
                     AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 50, -50)
                 else if (Gear^.State and gstAttacking) <> 0 then
                     AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 100, -50); // mine is on
-                    
+
             gtExplosives:
             if isAfterAttack then
                 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 75, -60 + Gear^.Health);
-                
+
             gtSMine:
                 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 50, -30);
-                
+
             gtDynamite:
                 AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 150, -75);
-                
+
             gtHedgehog:
                 begin
                 if Gear^.Damage >= Gear^.Health then
@@ -255,6 +290,58 @@
     RatePlace:= rate;
 end;
 
+function CheckBounds(x, y, r: Longint): boolean; inline;
+begin
+    CheckBounds := (((x-r) and LAND_WIDTH_MASK) = 0) and
+        (((x+r) and LAND_WIDTH_MASK) = 0) and
+        (((y-r) and LAND_HEIGHT_MASK) = 0) and
+        (((y+r) and LAND_HEIGHT_MASK) = 0);
+end;
+
+
+function TestCollWithEverything(x, y, r: LongInt): boolean; inline;
+begin
+    if not CheckBounds(x, y, r) then
+        exit(false);
+
+    if (Land[y-r, x-r] <> 0) or
+       (Land[y+r, x-r] <> 0) or
+       (Land[y-r, x+r] <> 0) or
+       (Land[y+r, x+r] <> 0) then
+       exit(true);
+
+    TestCollWithEverything := false;
+end;
+
+function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline;
+begin
+    if not CheckBounds(x, y, r) then
+        exit(false);
+
+    if (Land[y-r, x-r] > lfAllObjMask) or
+       (Land[y+r, x-r] > lfAllObjMask) or
+       (Land[y-r, x-r] > lfAllObjMask) or
+       (Land[y+r, x+r] > lfAllObjMask) then
+       exit(true);
+
+    TestCollExcludingObjects:= false;
+end;
+
+function TestColl(x, y, r: LongInt): boolean; inline;
+begin
+    if not CheckBounds(x, y, r) then
+        exit(false);
+
+    if (Land[y-r, x-r] and lfNotCurrentMask <> 0) or
+       (Land[y+r, x-r] and lfNotCurrentMask <> 0) or
+       (Land[y+r, x-r] and lfNotCurrentMask <> 0) or
+       (Land[y+r, x+r] and lfNotCurrentMask <> 0) then
+       exit(true);
+
+    TestColl:= false;
+end;
+
+
 // Wrapper to test various approaches.  If it works reasonably, will just replace.
 // Right now, converting to hwFloat is a tad inefficient since the x/y were hwFloat to begin with...
 function TestCollExcludingMe(Me: PGear; x, y, r: LongInt): boolean; inline;
@@ -265,155 +352,134 @@
         MeX:= hwRound(Me^.X);
         MeY:= hwRound(Me^.Y);
         // We are still inside the hog. Skip radius test
-        if ((((x-MeX)*(x-MeX)) + ((y-MeY)*(y-MeY))) < 256) and ((Land[y, x] and $FF00) = 0) then
+        if ((sqr(x-MeX) + sqr(y-MeY)) < 256) and (Land[y, x] and lfObjMask = 0) then
             exit(false);
     end;
-    TestCollExcludingMe:= TestColl(x, y, r)
-end;
-
-function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline;
-var b: boolean;
-begin
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] and $FF00 <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] and $FF00 <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] and $FF00 <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] and $FF00 <> 0);
-    if b then
-        exit(true);
-    
-    TestCollExcludingObjects:= false;
+    TestCollExcludingMe:= TestCollWithEverything(x, y, r)
 end;
 
-function TestColl(x, y, r: LongInt): boolean; inline;
-var b: boolean;
-begin
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] and lfCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] and lfCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] and lfCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] and lfCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    TestColl:= false;
-end;
+
 
-function TestCollWithLand(x, y, r: LongInt): boolean; inline;
-var b: boolean;
-begin
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] > 255);
-    if b then
-        exit(true);
-        
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] > 255);
-    if b then
-        exit(true);
-        
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] > 255);
-    if b then
-        exit(true);
-        
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] > 255);
-    if b then
-        exit(true);
-
-    TestCollWithLand:= false;
-end;
-
-function TraceFall(eX, eY: LongInt; x, y, dX, dY: Real; r: LongWord): LongInt;
+function TraceFall(eX, eY: LongInt; var x, y: Real; dX, dY: Real; r: LongWord; Target: TTarget): LongInt;
 var skipLandCheck: boolean;
-    rCorner: real;
+    rCorner, dxdy, odX, odY: real;
     dmg: LongInt;
 begin
+    odX:= dX;
+    odY:= dY;
     skipLandCheck:= true;
-    if x - eX < 0 then dX:= -dX;
-    if y - eY < 0 then dY:= -dY;
     // ok. attempt approximate search for an unbroken trajectory into water.  if it continues far enough, assume out of map
     rCorner:= r * 0.75;
     while true do
-    begin
+        begin
         x:= x + dX;
         y:= y + dY;
         dY:= dY + cGravityf;
         skipLandCheck:= skipLandCheck and (r <> 0) and (abs(eX-x) + abs(eY-y) < r) and ((abs(eX-x) < rCorner) or (abs(eY-y) < rCorner));
-        if not skipLandCheck and TestCollWithLand(trunc(x), trunc(y), cHHRadius) then
-        begin
-            if 0.4 < dY then
-            begin
-                dmg := 1 + trunc((abs(dY) - 0.4) * 70);
-                if dmg >= 1 then
-                    exit(dmg);
+        if not skipLandCheck and TestCollExcludingObjects(trunc(x), trunc(y), Target.Radius) then
+            with Target do
+                begin
+                if (Kind = gtHedgehog) and (0.4 < dY) then
+                    begin
+                    dmg := 1 + trunc((dY - 0.4) * 70);
+                    exit(dmg)
+                    end
+                else 
+                    begin
+                    dxdy:= abs(dX)+abs(dY);
+                    if ((Kind = gtMine) and (dxdy > 0.35)) or 
+                       ((Kind = gtExplosives) and 
+                            (((State and gstTmpFlag <> 0) and (dxdy > 0.35)) or
+                             ((State and gstTmpFlag = 0) and 
+                                ((abs(odX) > 0.15) or ((abs(odY) > 0.15) and 
+                                (abs(odX) > 0.02))) and (dxdy > 0.35)))) then
+                        begin
+                        dmg := trunc(dxdy * 25);
+                        exit(dmg)
+                        end
+                    else if (Kind = gtExplosives) and not((abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then
+                        begin
+                        dmg := trunc(dy * 70);
+                        exit(dmg)
+                        end
+                    end;
+            exit(0)
             end;
-            exit(0)
-        end;
-        if (y > cWaterLine) or (x > 4096) or (x < 0) then
-            exit(-1);
-    end;
+        if (y > cWaterLine) or (x > rightX) or (x < leftX) then exit(-1)
+        end
 end;
 
-function TraceShoveFall(x, y, dX, dY: Real): LongInt;
+function TraceShoveFall(var x, y: Real; dX, dY: Real; Target: TTarget): LongInt;
 var dmg: LongInt;
+    dxdy, odX, odY: real;
 begin
+    odX:= dX;
+    odY:= dY;
 //v:= random($FFFFFFFF);
     while true do
-    begin
+        begin
         x:= x + dX;
         y:= y + dY;
         dY:= dY + cGravityf;
 
-{        if ((trunc(y) and LAND_HEIGHT_MASK) = 0) and ((trunc(x) and LAND_WIDTH_MASK) = 0) then 
+{        if ((trunc(y) and LAND_HEIGHT_MASK) = 0) and ((trunc(x) and LAND_WIDTH_MASK) = 0) then
             begin
             LandPixels[trunc(y), trunc(x)]:= v;
             UpdateLandTexture(trunc(X), 1, trunc(Y), 1, true);
             end;}
 
-
-        // consider adding dX/dY calc here for fall damage
-        if TestCollExcludingObjects(trunc(x), trunc(y), cHHRadius) then
-        begin
-            if 0.4 < dY then
-            begin
-                dmg := 1 + trunc((abs(dY) - 0.4) * 70);
-                if dmg >= 1 then
+        if TestCollExcludingObjects(trunc(x), trunc(y), Target.Radius) then
+            with Target do
+                begin
+                if (Kind = gtHedgehog) and (0.4 < dY) then
+                    begin
+                    dmg := trunc((dY - 0.4) * 70);
                     exit(dmg);
-            end;
+                    end
+                else 
+                    begin
+                    dxdy:= abs(dX)+abs(dY);
+                    if ((Kind = gtMine) and (dxdy > 0.4)) or 
+                       ((Kind = gtExplosives) and 
+                            (((State and gstTmpFlag <> 0) and (dxdy > 0.4)) or
+                             ((State and gstTmpFlag = 0) and 
+                                ((abs(odX) > 0.15) or ((abs(odY) > 0.15) and 
+                                (abs(odX) > 0.02))) and (dxdy > 0.35)))) then
+                        begin
+                        dmg := trunc(dxdy * 50);
+                        exit(dmg)
+                        end
+                    else if (Kind = gtExplosives) and not((abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then
+                        begin
+                        dmg := trunc(dy * 70);
+                        exit(dmg)
+                        end
+                    end;
             exit(0)
         end;
-        if (y > cWaterLine) or (x > 4096) or (x < 0) then
+        if (y > cWaterLine) or (x > rightX) or (x < leftX) then
             // returning -1 for drowning so it can be considered in the Rate routine
             exit(-1)
     end;
 end;
 
-function RateExplosion(Me: PGear; x, y, r: LongInt): LongInt;
+function RateExplosion(Me: PGear; x, y, r: LongInt): LongInt; inline;
 begin
-    RateExplosion:= RateExplosion(Me, x, y, r, 0);
+    RateExplosion:= RealRateExplosion(Me, x, y, r, 0);
+    ResetTargets;
+end;
+function RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt; inline;
+begin
+    RateExplosion:= RealRateExplosion(Me, x, y, r, Flags);
+    ResetTargets;
 end;
 
-function RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt;
-var i, fallDmg, dmg, dmgBase, rate, erasure: LongInt;
-    dX, dY, dmgMod: real;
+function RealRateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt;
+var i, fallDmg, dmg, dmgBase, rate, subrate, erasure: LongInt;
+    pX, pY, dX, dY: real;
     hadSkips: boolean;
 begin
 fallDmg:= 0;
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 rate:= 0;
 // add our virtual position
 with Targets.ar[Targets.Count] do
@@ -422,10 +488,12 @@
     Point.y:= hwRound(Me^.Y);
     skip:= false;
     matters:= true;
+    Kind:= gtHedgehog;
+    Density:= 1;
+    Radius:= cHHRadius;
     Score:= - ThinkingHH^.Health
     end;
 // rate explosion
-dmgBase:= r + cHHRadius div 2;
 
 if (Flags and afErasesLand <> 0) and (GameFlags and gfSolidLand = 0) then erasure:= r
 else erasure:= 0;
@@ -433,98 +501,169 @@
 hadSkips:= false;
 
 for i:= 0 to Targets.Count do
-    with Targets.ar[i] do
-      if not matters then hadSkips:= true
-        else
-        begin
-        dmg:= 0;
-        if abs(Point.x - x) + abs(Point.y - y) < dmgBase then
-            dmg:= trunc(dmgMod * min((dmgBase - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)))) div 2, r));
+    if not Targets.ar[i].dead then
+        with Targets.ar[i] do
+          if not matters then hadSkips:= true
+            else
+            begin
+            dmg:= 0;
+            dmgBase:= r + Radius div 2;
+            if abs(Point.x - x) + abs(Point.y - y) < dmgBase then
+                dmg:= trunc(dmgMod * min((dmgBase - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)))) div 2, r));
 
-        if dmg > 0 then
-            begin
-            if (Flags and afTrackFall <> 0) and (dmg < abs(Score)) then
+            if dmg > 0 then
                 begin
-                dX:= 0.005 * dmg + 0.01;
-                dY:= dX;
-                if (x and LAND_WIDTH_MASK = 0) and ((y+cHHRadius+2) and LAND_HEIGHT_MASK = 0) and 
-                   (Land[y+cHHRadius+2, x] and lfIndestructible <> 0) then
-                     fallDmg:= trunc(TraceFall(x, y, Point.x, Point.y, dX, dY, 0) * dmgMod)
-                else fallDmg:= trunc(TraceFall(x, y, Point.x, Point.y, dX, dY, erasure) * dmgMod)
-                end;
-            if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI
-                if Score > 0 then
-                    inc(rate, (KillScore + Score div 10) * 1024)   // Add a bit of a bonus for bigger hog drownings
-                else
-                    dec(rate, (KillScore * friendlyfactor div 100 - Score div 10) * 1024) // and more of a punishment for drowning bigger friendly hogs
-            else if (dmg+fallDmg) >= abs(Score) then
-                if Score > 0 then
-                    inc(rate, KillScore * 1024 + (dmg + fallDmg)) // tiny bonus for dealing more damage than needed to kill
-                else
-                    dec(rate, KillScore * friendlyfactor div 100 * 1024)
-            else
-                if Score > 0 then
-                    inc(rate, (dmg + fallDmg) * 1024)
-                else dec(rate, (dmg + fallDmg) * friendlyfactor div 100 * 1024)
+                pX:= Point.x;
+                pY:= Point.y;
+                fallDmg:= 0;
+                if (Flags and afTrackFall <> 0) and (Score > 0) and (dmg < Score) then
+                    begin
+                    dX:= (0.005 * dmg + 0.01) / Density;
+                    dY:= dX;
+                    if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and 
+                       (((abs(dY) > 0.15) and (abs(dX) < 0.02)) or
+                        ((abs(dY) < 0.15) and (abs(dX) < 0.15))) then
+                        dX:= 0;
+
+                    if pX - x < 0 then dX:= -dX;
+                    if pY - y < 0 then dY:= -dY;
+
+                    if (x and LAND_WIDTH_MASK = 0) and ((y+cHHRadius+2) and LAND_HEIGHT_MASK = 0) and
+                       (Land[y+cHHRadius+2, x] and lfIndestructible <> 0) then
+                         fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, 0, Targets.ar[i]) * dmgMod)
+                    else fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, erasure, Targets.ar[i]) * dmgMod)
+                    end;
+                if Kind = gtHedgehog then
+                    begin
+                    if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI
+                        begin
+                        if Score > 0 then
+                            inc(rate, (KillScore + Score div 10) * 1024)   // Add a bit of a bonus for bigger hog drownings
+                        else
+                            dec(rate, (KillScore * friendlyfactor div 100 - Score div 10) * 1024) // and more of a punishment for drowning bigger friendly hogs
+                        end
+                    else if (dmg+fallDmg) >= abs(Score) then
+                        begin
+                        dead:= true;
+                        Targets.reset:= true;
+                        if dX < 0.035 then
+                            begin
+                            subrate:= RealRateExplosion(Me, round(pX), round(pY), 61, afErasesLand or (Flags and afTrackFall));
+                            if abs(subrate) > 2000 then inc(Rate,subrate)
+                            end;
+                        if Score > 0 then
+                             inc(rate, KillScore * 1024 + (dmg + fallDmg)) // tiny bonus for dealing more damage than needed to kill
+                        else dec(rate, KillScore * friendlyfactor div 100 * 1024)
+                        end
+                    else
+                        begin
+                        if Score > 0 then
+                             inc(rate, (dmg + fallDmg) * 1024)
+                        else dec(rate, (dmg + fallDmg) * friendlyfactor div 100 * 1024)
+                        end
+                    end
+                else if (fallDmg >= 0) and ((dmg+fallDmg) >= Score) then
+                    begin
+                    dead:= true;
+                    Targets.reset:= true;
+                    if Kind = gtExplosives then
+                         subrate:= RealRateExplosion(Me, round(pX), round(pY), 151, afErasesLand or (Flags and afTrackFall))
+                    else subrate:= RealRateExplosion(Me, round(pX), round(pY), 101, afErasesLand or (Flags and afTrackFall));
+                    if abs(subrate) > 2000 then inc(Rate,subrate);
+                    end
+                end
             end;
-        end;
 
 if hadSkips and (rate = 0) then
-    RateExplosion:= BadTurn
+    RealRateExplosion:= BadTurn
     else
-    RateExplosion:= rate;
+    RealRateExplosion:= rate;
 end;
 
-function RateShove(x, y, r, power, kick: LongInt; gdX, gdY: real; Flags: LongWord): LongInt;
-var i, fallDmg, dmg, rate: LongInt;
-    dX, dY, dmgMod: real;
+function RateShove(Me: PGear; x, y, r, power, kick: LongInt; gdX, gdY: real; Flags: LongWord): LongInt;
+var i, fallDmg, dmg, rate, subrate: LongInt;
+    dX, dY, pX, pY: real;
 begin
 fallDmg:= 0;
 dX:= gdX * 0.01 * kick;
 dY:= gdY * 0.01 * kick;
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 rate:= 0;
 for i:= 0 to Pred(Targets.Count) do
     with Targets.ar[i] do
-      if skip then 
-        if (Flags and afSetSkip = 0) then skip:= false else {still skip}
-      else if matters then
-        begin
-        dmg:= 0;
-        if abs(Point.x - x) + abs(Point.y - y) < r then
-            dmg:= r - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)));
-
-        if dmg > 0 then
+        if skip then
+            begin
+            if Flags and afSetSkip = 0 then skip:= false
+            end
+        else if matters then
             begin
-            if (Flags and afSetSkip <> 0) then skip:= true;
-            if (Flags and afTrackFall <> 0) and (Score > 0) then 
-                fallDmg:= trunc(TraceShoveFall(Point.x, Point.y - 2, dX, dY) * dmgMod);
-            if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI
-                if Score > 0 then
-                    inc(rate, KillScore + Score div 10)   // Add a bit of a bonus for bigger hog drownings
-                else
-                    dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs
-            else if power+fallDmg >= abs(Score) then
-                if Score > 0 then
-                    inc(rate, KillScore)
-                else
-                    dec(rate, KillScore * friendlyfactor div 100)
-            else
-                if Score > 0 then
-                    inc(rate, power+fallDmg)
-                else
-                    dec(rate, (power+fallDmg) * friendlyfactor div 100)
+            dmg:= 0;
+            if abs(Point.x - x) + abs(Point.y - y) < r then
+                dmg:= r - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)));
+
+            if dmg > 0 then
+                begin
+                pX:= Point.x;
+                pY:= Point.y-2;
+                fallDmg:= 0;
+                if (Flags and afSetSkip <> 0) then skip:= true;
+                if not(dead) and (Flags and afTrackFall <> 0) and (Score > 0) and (power < Score) then
+                    if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and 
+                       (((abs(dY) > 0.15) and (abs(dX) < 0.02)) or
+                        ((abs(dY) < 0.15) and (abs(dX) < 0.15))) then
+                        fallDmg:= trunc(TraceShoveFall(pX, pY, 0, dY, Targets.ar[i]) * dmgMod)
+                    else
+                        fallDmg:= trunc(TraceShoveFall(pX, pY, dX, dY, Targets.ar[i]) * dmgMod);
+                if Kind = gtHedgehog then
+                    begin
+                    if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI
+                        begin
+                        if Score > 0 then
+                            inc(rate, KillScore + Score div 10)   // Add a bit of a bonus for bigger hog drownings
+                        else
+                            dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs
+                        end
+                    else if power+fallDmg >= abs(Score) then
+                        begin
+                        dead:= true;
+                        Targets.reset:= true;
+                        if dX < 0.035 then
+                            begin
+                            subrate:= RealRateExplosion(Me, round(pX), round(pY), 61, afErasesLand or afTrackFall);
+                            if abs(subrate) > 2000 then inc(Rate,subrate div 1024)
+                            end;
+                        if Score > 0 then
+                            inc(rate, KillScore)
+                        else
+                            dec(rate, KillScore * friendlyfactor div 100)
+                        end
+                    else
+                        begin
+                        if Score > 0 then
+                            inc(rate, power+fallDmg)
+                        else
+                            dec(rate, (power+fallDmg) * friendlyfactor div 100)
+                        end
+                    end
+                else if (fallDmg >= 0) and ((dmg+fallDmg) >= Score) then
+                    begin
+                    dead:= true;
+                    Targets.reset:= true;
+                    if Kind = gtExplosives then
+                         subrate:= RealRateExplosion(Me, round(pX), round(pY), 151, afErasesLand or (Flags and afTrackFall))
+                    else subrate:= RealRateExplosion(Me, round(pX), round(pY), 101, afErasesLand or (Flags and afTrackFall));
+                    if abs(subrate) > 2000 then inc(Rate,subrate div 1024);
+                    end
+                end
             end;
-        end;
-RateShove:= rate * 1024
+RateShove:= rate * 1024;
+ResetTargets
 end;
 
 function RateShotgun(Me: PGear; gdX, gdY: real; x, y: LongInt): LongInt;
-var i, dmg, fallDmg, baseDmg, rate, erasure: LongInt;
-    dX, dY, dmgMod: real;
+var i, dmg, fallDmg, baseDmg, rate, subrate, erasure: LongInt;
+    pX, pY, dX, dY: real;
     hadSkips: boolean;
 begin
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 rate:= 0;
 gdX:= gdX * 0.01;
 gdY:= gdX * 0.01;
@@ -535,6 +674,9 @@
     Point.y:= hwRound(Me^.Y);
     skip:= false;
     matters:= true;
+    Kind:= gtHedgehog;
+    Density:= 1;
+    Radius:= cHHRadius;
     Score:= - ThinkingHH^.Health
     end;
 // rate shot
@@ -546,48 +688,80 @@
 hadSkips:= false;
 
 for i:= 0 to Targets.Count do
-    with Targets.ar[i] do
-      if not matters then hadSkips:= true
-        else
-        begin
-        dmg:= 0;
-        if abs(Point.x - x) + abs(Point.y - y) < baseDmg then
-            begin
-            dmg:= min(baseDmg - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y))), 25);
-            dmg:= trunc(dmg * dmgMod);
-            end;
-        if dmg > 0 then
+    if not Targets.ar[i].dead then
+        with Targets.ar[i] do
+          if not matters then hadSkips:= true
+            else
             begin
-            dX:= gdX * dmg;
-            dY:= gdY * dmg;
-            if dX < 0 then dX:= dX - 0.01
-            else dX:= dX + 0.01;
-            if (x and LAND_WIDTH_MASK = 0) and ((y+cHHRadius+2) and LAND_HEIGHT_MASK = 0) and 
-               (Land[y+cHHRadius+2, x] and lfIndestructible <> 0) then
-                 fallDmg:= trunc(TraceFall(x, y, Point.x, Point.y, dX, dY, 0) * dmgMod)
-            else fallDmg:= trunc(TraceFall(x, y, Point.x, Point.y, dX, dY, erasure) * dmgMod);
-            if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI
-                if Score > 0 then
-                    inc(rate, KillScore + Score div 10)   // Add a bit of a bonus for bigger hog drownings
-                else
-                    dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs
-            else if (dmg+fallDmg) >= abs(Score) then
-                if Score > 0 then
-                    inc(rate, KillScore)
-                else
-                    dec(rate, KillScore * friendlyfactor div 100)
-            else
-                if Score > 0 then
-                    inc(rate, dmg+fallDmg)
-            else
-                dec(rate, (dmg+fallDmg) * friendlyfactor div 100)
+            dmg:= 0;
+            if abs(Point.x - x) + abs(Point.y - y) < baseDmg then
+                begin
+                dmg:= min(baseDmg - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y))), 25);
+                dmg:= trunc(dmg * dmgMod);
+                end;
+            if dmg > 0 then
+                begin
+                if not(dead) and (Score > 0) and (dmg < Score) then
+                    begin
+                    pX:= Point.x;
+                    pY:= Point.y;
+                    dX:= gdX * dmg / Density;
+                    dY:= gdY * dmg / Density;
+                    if dX < 0 then dX:= dX - 0.01
+                    else dX:= dX + 0.01;
+                    if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and 
+                       (((abs(dY) > 0.15) and (abs(dX) < 0.02)) or
+                        ((abs(dY) < 0.15) and (abs(dX) < 0.15))) then 
+                       dX:= 0;
+                    if (x and LAND_WIDTH_MASK = 0) and ((y+cHHRadius+2) and LAND_HEIGHT_MASK = 0) and
+                       (Land[y+cHHRadius+2, x] and lfIndestructible <> 0) then
+                         fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, 0, Targets.ar[i]) * dmgMod)
+                    else fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, erasure, Targets.ar[i]) * dmgMod)
+                    end;
+                if Kind = gtHedgehog then
+                    begin
+                    if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI
+                        begin
+                        if Score > 0 then
+                            inc(rate, KillScore + Score div 10)   // Add a bit of a bonus for bigger hog drownings
+                        else
+                            dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs
+                        end
+                    else if (dmg+fallDmg) >= abs(Score) then
+                        begin
+                        dead:= true;
+                        Targets.reset:= true;
+                        if dX < 0.035 then
+                            begin
+                            subrate:= RealRateExplosion(Me, round(pX), round(pY), 61, afErasesLand or afTrackFall);
+                            if abs(subrate) > 2000 then inc(Rate,subrate div 1024)
+                            end;
+                        if Score > 0 then
+                            inc(rate, KillScore)
+                        else
+                            dec(rate, KillScore * friendlyfactor div 100)
+                        end
+                    else if Score > 0 then
+                         inc(rate, dmg+fallDmg)
+                    else dec(rate, (dmg+fallDmg) * friendlyfactor div 100)
+                    end
+                else if (fallDmg >= 0) and ((dmg+fallDmg) >= Score) then
+                    begin
+                    dead:= true;
+                    Targets.reset:= true;
+                    if Kind = gtExplosives then
+                         subrate:= RealRateExplosion(Me, round(pX), round(pY), 151, afErasesLand or afTrackFall)
+                    else subrate:= RealRateExplosion(Me, round(pX), round(pY), 101, afErasesLand or afTrackFall);
+                    if abs(subrate) > 2000 then inc(Rate,subrate div 1024);
+                    end
+                end
             end;
-        end;
 
 if hadSkips and (rate = 0) then
     RateShotgun:= BadTurn
     else
     RateShotgun:= rate * 1024;
+    ResetTargets;
 end;
 
 function RateHammer(Me: PGear): LongInt;
@@ -600,14 +774,13 @@
 
 for i:= 0 to Pred(Targets.Count) do
     with Targets.ar[i] do
-      if matters then
          // hammer hit radius is 8, shift is 10
-        if abs(Point.x - x) + abs(Point.y - y) < 18 then
+      if matters and (Kind = gtHedgehog) and (abs(Point.x - x) + abs(Point.y - y) < 18) then
             begin
             r:= trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)));
 
             if r <= 18 then
-                if Score > 0 then 
+                if Score > 0 then
                     inc(rate, Score div 3)
                 else
                     inc(rate, Score div 3 * friendlyfactor div 100)
@@ -625,7 +798,7 @@
 bY:= hwRound(Gear^.Y);
 case JumpType of
     jmpNone: exit(false);
-    
+
     jmpHJump:
         if TestCollisionYwithGear(Gear, -1) = 0 then
         begin
@@ -635,7 +808,7 @@
         end
     else
         exit(false);
-        
+
     jmpLJump:
         begin
             if TestCollisionYwithGear(Gear, -1) <> 0 then
@@ -657,12 +830,12 @@
 end;
 
 repeat
-        {if ((hwRound(Gear^.Y) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X) and LAND_WIDTH_MASK) = 0) then 
+        {if ((hwRound(Gear^.Y) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X) and LAND_WIDTH_MASK) = 0) then
             begin
             LandPixels[hwRound(Gear^.Y), hwRound(Gear^.X)]:= Gear^.Hedgehog^.Team^.Clan^.Color;
             UpdateLandTexture(hwRound(Gear^.X), 1, hwRound(Gear^.Y), 1, true);
             end;}
-            
+
     if not (hwRound(Gear^.Y) + cHHRadius < cWaterLine) then
         exit(false);
     if (Gear^.State and gstMoving) <> 0 then
@@ -712,7 +885,7 @@
 var pX, pY, tY: LongInt;
 begin
 HHGo:= false;
-Gear^.CollisionMask:= lfCurrentMask;
+Gear^.CollisionMask:= lfNotCurrentMask;
 AltGear^:= Gear^;
 
 GoInfo.Ticks:= 0;
@@ -720,7 +893,7 @@
 GoInfo.JumpType:= jmpNone;
 tY:= hwRound(Gear^.Y);
 repeat
-        {if ((hwRound(Gear^.Y) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X) and LAND_WIDTH_MASK) = 0) then 
+        {if ((hwRound(Gear^.Y) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X) and LAND_WIDTH_MASK) = 0) then
             begin
             LandPixels[hwRound(Gear^.Y), hwRound(Gear^.X)]:= random($FFFFFFFF);//Gear^.Hedgehog^.Team^.Clan^.Color;
             UpdateLandTexture(hwRound(Gear^.X), 1, hwRound(Gear^.Y), 1, true);
@@ -734,8 +907,8 @@
             AddWalkBonus(pX, tY, 250, -40);
         exit(false)
         end;
-        
-    // hog is falling    
+
+    // hog is falling
     if (Gear^.State and gstMoving) <> 0 then
         begin
         inc(GoInfo.Ticks);
@@ -744,7 +917,7 @@
             begin
             GoInfo.FallPix:= 0;
             // try ljump instead of fall with damage
-            HHJump(AltGear, jmpLJump, GoInfo); 
+            HHJump(AltGear, jmpLJump, GoInfo);
             if AltGear^.Hedgehog^.BotLevel < 4 then
                 AddWalkBonus(pX, tY, 175, -20);
             exit(false)
--- a/hedgewars/uAmmos.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uAmmos.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uCaptions.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uCaptions.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uChat.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uChat.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -48,8 +48,8 @@
     LocalStrs: array[0 .. MaxStrIndex] of shortstring;
     missedCount: LongWord;
     lastStr: LongWord;
-    localLastStr: LongWord;
-    history: LongWord;
+    localLastStr: LongInt;
+    history: LongInt;
     visibleCount: LongWord;
     InputStr: TChatLine;
     InputStrL: array[0..260] of char; // for full str + 4-byte utf-8 char
--- a/hedgewars/uCollisions.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uCollisions.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -83,7 +83,7 @@
     X:= hwRound(Gear^.X);
     Y:= hwRound(Gear^.Y);
     Radius:= Gear^.Radius;
-    ChangeRoundInLand(X, Y, Radius - 1, true, (Gear = CurrentHedgehog^.Gear) or (Gear^.Kind = gtCase));
+    ChangeRoundInLand(X, Y, Radius - 1, true, (Gear = CurrentHedgehog^.Gear) or ((Gear^.Kind = gtCase) and (Gear^.State and gstFrozen <> 0)));
     cGear:= Gear
     end;
 Gear^.CollisionIndex:= Count;
@@ -104,7 +104,7 @@
 if Gear^.CollisionIndex >= 0 then
     begin
     with cinfos[Gear^.CollisionIndex] do
-        ChangeRoundInLand(X, Y, Radius - 1, false, (Gear = CurrentHedgehog^.Gear) or (Gear^.Kind = gtCase));
+        ChangeRoundInLand(X, Y, Radius - 1, false, (Gear = CurrentHedgehog^.Gear) or ((Gear^.Kind = gtCase) and (Gear^.State and gstFrozen <> 0)));
     cinfos[Gear^.CollisionIndex]:= cinfos[Pred(Count)];
     cinfos[Gear^.CollisionIndex].cGear^.CollisionIndex:= Gear^.CollisionIndex;
     Gear^.CollisionIndex:= -1;
@@ -139,7 +139,7 @@
 var x, y, i: LongInt;
 begin
 // Special case to emulate the old intersect gear clearing, but with a bit of slop for pixel overlap
-if (Gear^.CollisionMask = lfCurrentMask) and (Gear^.Kind <> gtHedgehog) and (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) and
+if (Gear^.CollisionMask = lfNotCurrentMask) and (Gear^.Kind <> gtHedgehog) and (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) and
     ((hwRound(Gear^.Hedgehog^.Gear^.X) + Gear^.Hedgehog^.Gear^.Radius + 16 < hwRound(Gear^.X) - Gear^.Radius) or
      (hwRound(Gear^.Hedgehog^.Gear^.X) - Gear^.Hedgehog^.Gear^.Radius - 16 > hwRound(Gear^.X) + Gear^.Radius)) then
     Gear^.CollisionMask:= $FFFF;
@@ -169,7 +169,7 @@
 var x, y, i: LongInt;
 begin
 // Special case to emulate the old intersect gear clearing, but with a bit of slop for pixel overlap
-if (Gear^.CollisionMask = lfCurrentMask) and (Gear^.Kind <> gtHedgehog) and (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) and
+if (Gear^.CollisionMask = lfNotCurrentMask) and (Gear^.Kind <> gtHedgehog) and (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) and
     ((hwRound(Gear^.Hedgehog^.Gear^.Y) + Gear^.Hedgehog^.Gear^.Radius + 16 < hwRound(Gear^.Y) - Gear^.Radius) or
      (hwRound(Gear^.Hedgehog^.Gear^.Y) - Gear^.Hedgehog^.Gear^.Radius - 16 > hwRound(Gear^.Y) + Gear^.Radius)) then
     Gear^.CollisionMask:= $FFFF;
--- a/hedgewars/uCommandHandlers.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uCommandHandlers.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@
 procedure chGenCmd(var s: shortstring);
 begin
 case s[1] of
-    'R': if ReadyTimeLeft > 1 then 
+    'R': if ReadyTimeLeft > 1 then
         begin
         ReadyTimeLeft:= 1;
         if not isExternalSource then
@@ -480,7 +480,7 @@
 with CurrentHedgehog^.Gear^ do
     begin
     Message:= Message or (gmSlot and InputMask);
-    MsgParam:= slot; 
+    MsgParam:= slot;
     ScriptCall('onSlot', MsgParam);
     end
 end;
@@ -517,7 +517,7 @@
 with CurrentHedgehog^.Gear^ do
     begin
     Message:= Message or (gmAnimate and InputMask);
-    MsgParam:= byte(s[1]) ; 
+    MsgParam:= byte(s[1]) ;
     ScriptCall('onTaunt', MsgParam);
     end
 end;
@@ -573,7 +573,7 @@
 begin
 if isDeveloperMode then
     begin
-    SetRandomSeed(s);
+    SetRandomSeed(s, true);
     cSeed:= s;
     InitStepsFlags:= InitStepsFlags or cifRandomize
     end
--- a/hedgewars/uCommands.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uCommands.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uConsole.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uConsole.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uConsts.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uConsts.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -97,11 +97,16 @@
     lfDamaged        = $1000;  //
     lfIce            = $0800;  // blue
     lfBouncy         = $0400;  // green
+    lfLandMask       = $FF00;  // upper byte is used for terrain, not objects.
 
     lfCurrentHog     = $0080;  // CurrentHog.  It is also used to flag crates, for convenience of AI.  Since an active hog would instantly collect the crate, this doesn't impact play
-    lfCurrentMask    = $FF7F;  // inverse of above. frequently used.
+    lfNotCurrentMask = $FF7F;  // inverse of above. frequently used
     lfObjMask        = $007F;  // lower 7 bits used for hogs
     lfNotObjMask     = $FF80;  // inverse of above.
+    // lower byte is for objects. 
+    // consists of 0-127 counted for object checkins and $80 as a bit flag for current hog. 
+    lfAllObjMask     = $00FF;  // lfCurrentHog or lfObjMask
+
 
     cMaxPower     = 1500;
     cMaxAngle     = 2048;
@@ -110,13 +115,11 @@
     MAXNAMELEN = 192;
     MAXROPEPOINTS = 3840;
 
-    {$IFNDEF PAS2C}
     // some opengl headers do not have these macros
     GL_BGR              = $80E0;
     GL_BGRA             = $80E1;
     GL_CLAMP_TO_EDGE    = $812F;
     GL_TEXTURE_PRIORITY = $8066;
-    {$ENDIF}
 
     cVisibleWater       : LongInt = 128;
     cTeamHealthWidth    : LongInt = 128;
@@ -209,6 +212,8 @@
     gstLoser          = $00080000;
     gstHHGone         = $00100000;
     gstInvisible      = $00200000;
+    gstSubmersible    = $00400000;
+    gstFrozen         = $00800000;
 
     // gear messages
     gmLeft           = $00000001;
--- a/hedgewars/uDebug.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uDebug.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uFloat.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uFloat.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -63,9 +63,7 @@
 // The implemented operators
 
 operator = (const z1, z2: hwFloat) z : boolean; inline;
-{$IFDEF PAS2C}
-operator <> (const z1, z2: hwFloat) z : boolean; inline;
-{$ENDIF}
+
 operator + (const z1, z2: hwFloat) z : hwFloat; inline;
 operator - (const z1, z2: hwFloat) z : hwFloat; inline;
 operator - (const z1: hwFloat) z : hwFloat; inline;
@@ -86,7 +84,8 @@
 function hwAbs(const t: hwFloat): hwFloat; inline; // Returns the value of t with positive sign.
 function hwSqr(const t: hwFloat): hwFloat; inline; // Returns the square value of parameter t.
 function hwPow(const t: hwFloat; p: LongWord): hwFloat; inline; // Returns the power of the value
-function hwSqrt(const t: hwFloat): hwFloat; inline; // Returns the the positive square root of parameter t.
+function hwSqrt1(const t: hwFloat): hwFloat; inline; // Returns the the positive square root of parameter t.
+function hwSqrt(const x: hwFloat): hwFloat; inline; // Returns the the positive square root of parameter t.
 function Distance(const dx, dy: hwFloat): hwFloat; // Returns the distance between two points in 2-dimensional space, of which the parameters are the horizontal and vertical distance.
 function DistanceI(const dx, dy: LongInt): hwFloat; // Same as above for integer parameters.
 function AngleSin(const Angle: Longword): hwFloat;
@@ -221,19 +220,11 @@
     hwFloat2Float:= -hwFloat2Float;
 end;
 
-{$IFNDEF WEB}
 operator = (const z1, z2: hwFloat) z : boolean; inline;
 begin
     z:= (z1.isNegative = z2.isNegative) and (z1.QWordValue = z2.QWordValue);
 end;
 
-{$IFDEF PAS2C}
-operator <> (const z1, z2: hwFloat) z : boolean; inline;
-begin
-    z:= (z1.isNegative <> z2.isNegative) or (z1.QWordValue <> z2.QWordValue);
-end;
-{$ENDIF}
-
 operator + (const z1, z2: hwFloat) z : hwFloat; inline;
 begin
 if z1.isNegative = z2.isNegative then
@@ -274,7 +265,7 @@
     end
 end;
 
-function isZero(const z: hwFloat): boolean; inline; 
+function isZero(const z: hwFloat): boolean; inline;
 begin
 isZero := z.QWordValue = 0;
 end;
@@ -287,7 +278,7 @@
     if z1.QWordValue = z2.QWordValue then
         b:= false
     else
-        b:= not((z1.QWordValue = z2.QWordValue) or ((z2.QWordValue < z1.QWordValue) <> z1.isNegative))
+        b:= (z2.QWordValue < z1.QWordValue) = z1.isNegative
 end;
 
 operator > (const z1, z2: hwFloat) b : boolean; inline;
@@ -300,102 +291,6 @@
     else
         b:= (z1.QWordValue > z2.QWordValue) <> z2.isNegative
 end;
-{$ENDIF}
-{$IFDEF WEB}
-(*
-    Mostly to be kind to JS as of 2012-08-27 where there is no int64/uint64.  This may change though.
-*)
-operator = (const z1, z2: hwFloat) z : boolean; inline;
-begin
-    z:= (z1.isNegative = z2.isNegative) and (z1.Frac = z2.Frac) and (z1.Round = z2.Round);
-end;
-
-operator <> (const z1, z2: hwFloat) z : boolean; inline;
-begin
-    z:= (z1.isNegative <> z2.isNegative) or (z1.Frac <> z2.Frac) or (z1.Round <> z2.Round);
-end;
-
-operator + (const z1, z2: hwFloat) z : hwFloat; inline;
-begin
-if z1.isNegative = z2.isNegative then
-    begin
-    z:= z1;
-    z.Frac:= z.Frac + z2.Frac;
-    z.Round:= z.Round + z2.Round;
-    if z.Frac<z1.Frac then inc(z.Round)
-    end
-else
-    if (z1.Round > z2.Round) or ((z1.Round = z2.Round) and (z1.Frac > z2.Frac)) then
-        begin
-        z.isNegative:= z1.isNegative;
-        z.Round:= z1.Round - z2.Round;
-        z.Frac:= z1.Frac - z2.Frac;
-        if z2.Frac > z1.Frac then dec(z.Round)
-        end
-    else
-        begin
-        z.isNegative:= z2.isNegative;
-        z.Round:= z2.Round - z1.Round;
-        z.Frac:= z2.Frac-z1.Frac;
-        if z2.Frac < z1.Frac then dec(z.Round)
-        end
-end;
-
-operator - (const z1, z2: hwFloat) z : hwFloat; inline;
-begin
-if z1.isNegative = z2.isNegative then
-    if (z1.Round > z2.Round) or ((z1.Round = z2.Round) and (z1.Frac > z2.Frac)) then
-        begin
-        z.isNegative:= z1.isNegative;
-        z.Round:= z1.Round - z2.Round;
-        z.Frac:= z1.Frac-z2.Frac;
-        if z2.Frac > z1.Frac then dec(z.Round)
-        end
-    else
-        begin
-        z.isNegative:= not z2.isNegative;
-        z.Round:= z2.Round - z1.Round;
-        z.Frac:= z2.Frac-z1.Frac;
-        if z2.Frac < z1.Frac then dec(z.Round)
-        end
-else
-    begin
-    z:= z1;
-    z.Frac:= z.Frac + z2.Frac;
-    z.Round:= z.Round + z2.Round;
-    if z.Frac<z1.Frac then inc(z.Round)
-    end
-end;
-
-operator < (const z1, z2: hwFloat) b : boolean; inline;
-begin
-if z1.isNegative xor z2.isNegative then
-    b:= z1.isNegative
-else
-(*  Not so sure this specialcase is a win w/ Round/Frac. have to do more tests anyway.
-    if (z1.Round = z2.Round and (z1.Frac = z2.Frac)) then
-        b:= false
-    else *)
-        b:= ((z1.Round < z2.Round) or ((z1.Round = z2.Round) and (z1.Frac < z2.Frac))) <> z1.isNegative
-end;
-
-operator > (const z1, z2: hwFloat) b : boolean; inline;
-begin
-if z1.isNegative xor z2.isNegative then
-    b:= z2.isNegative
-else
-(*
-    if z1.QWordValue = z2.QWordValue then
-        b:= false
-    else*)
-        b:= ((z1.Round > z2.Round) or ((z1.Round = z2.Round) and (z1.Frac > z2.Frac))) <> z1.isNegative
-end;
-
-function isZero(const z: hwFloat): boolean; inline; 
-begin
-isZero := (z.Round = 0) and (z.Frac = 0);
-end;
-{$ENDIF}
 
 operator - (const z1: hwFloat) z : hwFloat; inline;
 begin
@@ -418,24 +313,23 @@
 end;
 
 operator / (const z1: hwFloat; z2: hwFloat) z : hwFloat; inline;
-var t: hwFloat;
+var t: QWord;
 begin
 z.isNegative:= z1.isNegative xor z2.isNegative;
 z.Round:= z1.QWordValue div z2.QWordValue;
-t:= z1 - z2 * z.Round;
-if t.QWordValue = 0 then
-    z.Frac:= 0
-else
+t:= z1.QWordValue - z2.QWordValue * z.Round;
+z.Frac:= 0;
+
+if t <> 0 then
     begin
-    while ((t.QWordValue and $8000000000000000) = 0) and ((z2.QWordValue and $8000000000000000) = 0) do
+    while ((t and $FF00000000000000) = 0) and ((z2.QWordValue and $FF00000000000000) = 0) do
         begin
-        t.QWordValue:= t.QWordValue shl 1;
-        z2.QWordValue:= z2.QWordValue shl 1
+        t:= t shl 8;
+        z2.QWordValue:= z2.QWordValue shl 8
         end;
+
     if z2.Round > 0 then
-        z.Frac:= (t.QWordValue) div (z2.Round)
-    else
-        z.Frac:= 0
+        inc(z.QWordValue, t div z2.Round);
     end
 end;
 
@@ -491,14 +385,14 @@
     end
 end;
 
-function hwSqrt(const t: hwFloat): hwFloat;
+function hwSqrt1(const t: hwFloat): hwFloat;
 const pwr = 8; // even value, feel free to adjust
       rThreshold = 1 shl (pwr + 32);
       lThreshold = 1 shl (pwr div 2 + 32);
 var l, r: QWord;
     c: hwFloat;
 begin
-hwSqrt.isNegative:= false;
+hwSqrt1.isNegative:= false;
 
 if t.Round = 0 then
     begin
@@ -531,12 +425,47 @@
         l:= c.QWordValue
 until r - l <= 1;
 
-hwSqrt.QWordValue:= l
+hwSqrt1.QWordValue:= l
 end;
 
-function Distance(const dx, dy: hwFloat): hwFloat;
+function hwSqrt(const x: hwFloat): hwFloat;
+var r, t, s, q: QWord;
+    i: integer;
 begin
-Distance:= hwSqrt(hwSqr(dx) + hwSqr(dy))
+hwSqrt.isNegative:= false;
+
+t:= $4000000000000000;
+r:= 0;
+q:= x.QWordValue;
+
+for i:= 0 to 31 do
+    begin
+    s:= r + t;
+    r:= r shr 1;
+    if s <= q then
+        begin
+        dec(q, s);
+        inc(r, t);
+        end;
+    t:= t shr 2;
+    end;
+
+hwSqrt.QWordValue:= r shl 16
+end;
+
+
+
+function Distance(const dx, dy: hwFloat): hwFloat;
+var r: QWord;
+begin
+r:= dx.QWordValue or dy.QWordValue;
+
+if r < $10000 then
+    begin
+    Distance.QWordValue:= r;
+    Distance.isNegative:= false
+    end else
+    Distance:= hwSqrt(hwSqr(dx) + hwSqr(dy))
 end;
 
 function DistanceI(const dx, dy: LongInt): hwFloat;
--- a/hedgewars/uGame.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGame.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uGears.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGears.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -773,7 +773,8 @@
     begin
     dec(i);
     Gear:= t^.ar[i];
-    if (Ammo^.Kind = gtFlame) and (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.Effects[heFrozen] > 255) then
+    if ((Ammo^.Kind = gtFlame) or (Ammo^.Kind = gtBlowTorch)) and 
+       (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.Effects[heFrozen] > 255) then
         Gear^.Hedgehog^.Effects[heFrozen]:= max(255,Gear^.Hedgehog^.Effects[heFrozen]-10000);
     tmpDmg:= ModifyDamage(Damage, Gear);
     if (Gear^.State and gstNoDamage) = 0 then
--- a/hedgewars/uGearsHandlers.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGearsHandlers.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uGearsHandlersRope.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGearsHandlersRope.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -202,7 +202,7 @@
         begin
         lx := hwRound(nx);
         ly := hwRound(ny);
-        if ((ly and LAND_HEIGHT_MASK) = 0) and ((lx and LAND_WIDTH_MASK) = 0) and ((Land[ly, lx] and $FF00) <> 0) then
+        if ((ly and LAND_HEIGHT_MASK) = 0) and ((lx and LAND_WIDTH_MASK) = 0) and (Land[ly, lx] > lfAllObjMask) then
             begin
             tx := _1 / Distance(ropeDx, ropeDy);
             // old rope pos
@@ -425,7 +425,7 @@
         ty := _0;
         while tt > _20 do
             begin
-            if ((hwRound(Gear^.Y+ty) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X+tx) and LAND_WIDTH_MASK) = 0) and ((Land[hwRound(Gear^.Y+ty), hwRound(Gear^.X+tx)] and $FF00) <> 0) then
+            if ((hwRound(Gear^.Y+ty) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X+tx) and LAND_WIDTH_MASK) = 0) and (Land[hwRound(Gear^.Y+ty), hwRound(Gear^.X+tx)] > lfAllObjMask) then
                 begin
                 Gear^.X := Gear^.X + tx;
                 Gear^.Y := Gear^.Y + ty;
@@ -449,8 +449,8 @@
             end;
         end;
 
-    if Gear^.Elasticity < _20 then Gear^.CollisionMask:= $FF00
-    else Gear^.CollisionMask:= lfCurrentMask;
+    if Gear^.Elasticity < _20 then Gear^.CollisionMask:= lfLandMask
+    else Gear^.CollisionMask:= lfNotCurrentMask;
     CheckCollision(Gear);
 
     if (Gear^.State and gstCollision) <> 0 then
--- a/hedgewars/uGearsHedgehog.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGearsHedgehog.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -23,18 +23,18 @@
 uses uTypes;
 
 procedure doStepHedgehog(Gear: PGear);
-procedure AfterAttack; 
-procedure HedgehogStep(Gear: PGear); 
-procedure doStepHedgehogMoving(Gear: PGear); 
-procedure HedgehogChAngle(HHGear: PGear); 
+procedure AfterAttack;
+procedure HedgehogStep(Gear: PGear);
+procedure doStepHedgehogMoving(Gear: PGear);
+procedure HedgehogChAngle(HHGear: PGear);
 procedure PickUp(HH, Gear: PGear);
 procedure AddPickup(HH: THedgehog; ammo: TAmmoType; cnt, X, Y: LongWord);
 procedure CheckIce(Gear: PGear); inline;
 
 implementation
-uses uConsts, uVariables, uFloat, uAmmos, uSound, uCaptions, 
+uses uConsts, uVariables, uFloat, uAmmos, uSound, uCaptions,
     uCommands, uLocale, uUtils, uVisualGears, uStats, uIO, uScript,
-    uGearsList, uGears, uCollisions, uRandom, uStore, uTeams, 
+    uGearsList, uGears, uCollisions, uRandom, uStore, uTeams,
     uGearsUtils;
 
 var GHStepTicks: LongWord = 0;
@@ -75,7 +75,7 @@
 
     MultiShootAttacks:= 0;
     HHGear^.Message:= HHGear^.Message and (not (gmLJump or gmHJump));
-    
+
     if Ammoz[CurAmmoType].Slot = slot then
         begin
         i:= 0;
@@ -90,8 +90,8 @@
             end;
         until (i = 1) or ((Ammo^[slot, ammoidx].Count > 0)
         and (Team^.Clan^.TurnNumber > Ammoz[Ammo^[slot, ammoidx].AmmoType].SkipTurns))
-        
-        end 
+
+        end
     else
         begin
         i:= 0;
@@ -114,7 +114,7 @@
             LoadHedgehogHat(HHGear^.Hedgehog^, Hat);
         end;
     // Try again in the next slot
-    if CurAmmoType = prevAmmo then 
+    if CurAmmoType = prevAmmo then
         begin
         if slot >= cMaxSlotIndex then slot:= 0 else inc(slot);
         HHGear^.MsgParam:= slot;
@@ -213,7 +213,7 @@
         if ((State and gstHHDriven) <> 0) and ((State and (gstAttacked or gstHHChooseTarget)) = 0) and (((State and gstMoving) = 0)
         or (Power > 0)
         or (CurAmmoType = amTeleport)
-        or 
+        or
         // Allow attacks while moving on ammo with AltAttack
         ((CurAmmoGear <> nil) and ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0))
         or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AttackInMove) <> 0))
@@ -257,8 +257,16 @@
             and ((Gear^.Message and gmLJump) <> 0)
             and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) then
                 begin
-                newDx:= dX; 
-                newDy:= dY;
+                if (CurAmmoGear^.AmmoType = amJetpack) and (Gear^.Message and gmPrecise <> 0) then
+                    begin
+                    newDx:= xx*cMaxPower/cPowerDivisor;
+                    newDy:= yy*cMaxPower/cPowerDivisor
+                    end
+                else
+                    begin
+                    newDx:= dX;
+                    newDy:= dY
+                    end;
                 altUse:= true
                 end
             else
@@ -285,15 +293,15 @@
                          amRope: newGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0);
                          amMine: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000);
                         amSMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
-                        amKnife: begin 
+                        amKnife: begin
                                  newGear:= AddGear(hwRound(lx), hwRound(ly), gtKnife,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
-                                 newGear^.State:= newGear^.State or gstMoving; 
+                                 newGear^.State:= newGear^.State or gstMoving;
                                  newGear^.Radius:= 4 // temporarily shrink so it doesn't instantly embed in the ground
                                  end;
                        amDEagle: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0);
                       amSineGun: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0);
                     amPortalGun: begin
-                                 newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, 
+                                 newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6,
                                  // set selected color
                                  CurWeapon^.Pos);
                                  end;
@@ -353,7 +361,7 @@
                                  cGravity:= cMaxWindSpeed;
                                  cGravityf:= 0.00025
                                  end;
-                  amExtraDamage: begin 
+                  amExtraDamage: begin
                                  PlaySound(sndHellishImpact4);
                                  cDamageModifier:= _1_5
                                  end;
@@ -383,21 +391,22 @@
                                  end;
                     //amStructure: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtStructure, gstWait, SignAs(_0_02, dX), _0, 3000);
                        amTardis: newGear:= AddGear(hwRound(X), hwRound(Y), gtTardis, 0, _0, _0, 5000);
-                       amIceGun: begin
-                       newGear:= AddGear(hwRound(X), hwRound(Y), gtIceGun, 0, _0, _0, 0);
-                       newGear^.radius := 8;
-                       end;
+                       amIceGun: newGear:= AddGear(hwRound(X), hwRound(Y), gtIceGun, 0, _0, _0, 0);
             end;
-            if altUse and (newGear <> nil) then
+            if altUse and (newGear <> nil) and 
+               ((CurAmmoGear = nil) or (CurAmmoGear^.AmmoType <> amJetpack) or (Gear^.Message and gmPrecise = 0)) then
                begin
                newGear^.dX:= newDx / newGear^.Density;
                newGear^.dY:= newDY / newGear^.Density
                end;
-             
+            if (CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack) and
+               (Gear^.Message and gmPrecise <> 0) and (hwRound(Y) > cWaterLine) then
+                newGear^.State:= newGear^.State or gstSubmersible;
+
             case CurAmmoType of
-                     amGrenade, amMolotov, 
-                 amClusterBomb, amGasBomb, 
-                     amBazooka, amSnowball, 
+                     amGrenade, amMolotov,
+                 amClusterBomb, amGasBomb,
+                     amBazooka, amSnowball,
                          amBee, amSMine,
                       amMortar, amWatermelon,
                  amHellishBomb, amDrill: FollowGear:= newGear;
@@ -418,7 +427,7 @@
                       amTardis, amPiano,
                       amIceGun: CurAmmoGear:= newGear;
             end;
-             
+
             if ((CurAmmoType = amMine) or (CurAmmoType = amSMine)) and (GameFlags and gfInfAttack <> 0) then
                 newGear^.FlightTime:= GameTicks + 1000
             else if CurAmmoType = amDrill then
@@ -442,7 +451,7 @@
                     newGear^.Elasticity:= newGear^.Elasticity * elastic
                 else if elastic > _1 then
                     newGear^.Elasticity:= _1 - ((_1-newGear^.Elasticity) / elastic);
-    (* Experimented with friction modifier. Didn't seem helpful 
+    (* Experimented with friction modifier. Didn't seem helpful
                 fric:= int2hwfloat(CurWeapon^.Bounciness) / _250;
                 if fric < _1 then newGear^.Friction:= newGear^.Friction * fric
                 else if fric > _1 then newGear^.Friction:= _1 - ((_1-newGear^.Friction) / fric)*)
@@ -478,7 +487,7 @@
                 AfterAttack;
                 end
             end
-        else 
+        else
             Message:= Message and (not gmAttack);
     end;
     TargetPoint.X := NoPointX;
@@ -498,13 +507,13 @@
     if (Ammoz[a].Ammo.Propz and ammoprop_Effect) = 0 then
         begin
         Inc(MultiShootAttacks);
-        
+
         if (Ammoz[a].Ammo.NumPerTurn >= MultiShootAttacks) then
             begin
             s:= inttostr(Ammoz[a].Ammo.NumPerTurn - MultiShootAttacks + 1);
             AddCaption(format(trmsg[sidRemaining], s), cWhiteColor, capgrpAmmostate);
             end;
-        
+
         if (Ammoz[a].Ammo.NumPerTurn >= MultiShootAttacks)
         or ((GameFlags and gfMultiWeapon) <> 0) then
             begin
@@ -517,9 +526,11 @@
                 begin
                 if TagTurnTimeLeft = 0 then
                     TagTurnTimeLeft:= TurnTimeLeft;
-                TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 100;
+                if (CurAmmoGear <> nil) and (CurAmmoGear^.State and gstSubmersible <> 0) and (hwRound(CurAmmoGear^.Y) > cWaterLine) then
+                     TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 25
+                else TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 100;
                 end;
-            if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (HHGear <> nil) then 
+            if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (HHGear <> nil) then
                 HHGear^.State:= HHGear^.State or gstAttacked;
             if (Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) <> 0 then
                 ApplyAmmoChanges(CurrentHedgehog^)
@@ -547,15 +558,16 @@
     dec(Gear^.Timer);
     if (Gear^.Timer mod frametime) = 0 then
         inc(Gear^.Pos)
-    end 
+    end
 else if Gear^.Timer = 1 then
     begin
+    Gear^.Hedgehog^.Effects[heFrozen]:= 0;
     Gear^.State:= Gear^.State or gstNoDamage;
     doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, CurrentHedgehog, EXPLAutoSound);
     AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
     DeleteGear(Gear);
     SetAllToActive
-    end 
+    end
 else // Gear^.Timer = 0
     begin
     AllInactive:= false;
@@ -608,7 +620,7 @@
     if cnt <> 0 then AddAmmo(HH, ammo, cnt)
     else AddAmmo(HH, ammo);
 
-    if (not (HH.Team^.ExtDriven 
+    if (not (HH.Team^.ExtDriven
     or (HH.BotLevel > 0)))
     or (HH.Team^.Clan^.ClanIndex = LocalClan)
     or (GameType = gmtDemo)  then
@@ -646,7 +658,7 @@
        posCaseUtility,
        posCaseAmmo: begin
                     PlaySound(sndShotgunReload);
-                    if Gear^.AmmoType <> amNothing then 
+                    if Gear^.AmmoType <> amNothing then
                         begin
                         AddPickup(HH^.Hedgehog^, Gear^.AmmoType, Gear^.Power, hwRound(Gear^.X), hwRound(Gear^.Y));
                         end
@@ -654,7 +666,7 @@
                         begin
 // Add spawning here...
                         AddRandomness(GameTicks);
-                        
+
                         gi := GearsList;
                         while gi <> nil do
                             begin
@@ -769,7 +781,7 @@
     if (Gear^.Message and gmLeft  )<>0 then
         Gear^.dX:= -cLittle else
     if (Gear^.Message and gmRight )<>0 then
-        Gear^.dX:=  cLittle 
+        Gear^.dX:=  cLittle
         else exit;
 
     StepSoundTimer:= cHHStepTicks;
@@ -796,12 +808,13 @@
 var da: LongWord;
 begin
 with HHGear^.Hedgehog^ do
-    if ((CurAmmoType = amRope) and ((HHGear^.State and (gstMoving or gstHHJumping)) = gstMoving))
+    if (((CurAmmoType = amRope) or ((CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amRope))) and 
+            ((HHGear^.State and (gstMoving or gstHHJumping)) = gstMoving))
     or ((CurAmmoType = amPortalGun) and ((HHGear^.State and gstMoving) <> 0)) then
         da:= 2
     else da:= 1;
 
-if (((HHGear^.Message and gmPrecise) = 0) or ((GameTicks mod 5) = 1)) then
+if ((HHGear^.Message and gmPrecise = 0) or ((CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack))) or (GameTicks mod 5 = 1) then
     if ((HHGear^.Message and gmUp) <> 0) and (HHGear^.Angle >= CurMinAngle + da) then
         dec(HHGear^.Angle, da)
     else
@@ -836,7 +849,7 @@
         Gear^.dY:= _0;
     Gear^.State:= Gear^.State or gstMoving;
     if (CurrentHedgehog^.Gear = Gear)
-        and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then 
+        and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then
         begin
         // TODO: why so aggressive at setting FollowGear when falling?
         FollowGear:= Gear;
@@ -852,7 +865,7 @@
         or ((Gear^.dY.QWordValue + Gear^.dX.QWordValue) > _0_55.QWordValue))) then
             Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density
         end
-    end 
+    end
 else
     begin
     land:= TestCollisionYwithGear(Gear, 1);
@@ -897,35 +910,40 @@
     if TestCollisionXKick(Gear, hwSign(Gear^.dX)) then
         if not isFalling then
             if hwAbs(Gear^.dX) > _0_01 then
-                if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) then
+                if not (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) or
+                (TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1))) then
                     begin
                     Gear^.X:= Gear^.X + Gear^.dX;
                     Gear^.dX:= Gear^.dX * _0_96;
                     Gear^.Y:= Gear^.Y - _1
                     end
                 else
-                    if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) then
+                    if not (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) or
+                        (TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1))) then
                         begin
                         Gear^.X:= Gear^.X + Gear^.dX;
                         Gear^.dX:= Gear^.dX * _0_93;
                         Gear^.Y:= Gear^.Y - _2
-                        end 
+                        end
                     else
-                        if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) then
+                    if not (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) or
+                        (TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1))) then
                         begin
                         Gear^.X:= Gear^.X + Gear^.dX;
                         Gear^.dX:= Gear^.dX * _0_9 ;
                         Gear^.Y:= Gear^.Y - _3
                         end
                     else
-                        if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -4, hwSign(Gear^.dX)) then
+                        if not (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -4, hwSign(Gear^.dX)) or
+                        (TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1))) then
                             begin
                             Gear^.X:= Gear^.X + Gear^.dX;
                             Gear^.dX:= Gear^.dX * _0_87;
                             Gear^.Y:= Gear^.Y - _4
                             end
                     else
-                        if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -5, hwSign(Gear^.dX)) then
+                        if not (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -5, hwSign(Gear^.dX)) or
+                        (TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1))) then
                             begin
                             Gear^.X:= Gear^.X + Gear^.dX;
                             Gear^.dX:= Gear^.dX * _0_84;
@@ -959,8 +977,11 @@
     begin
     Gear^.State:= Gear^.State and (not gstWinner);
     Gear^.State:= Gear^.State and (not gstMoving);
-    while (TestCollisionYWithGear(Gear,1) = 0) and (not CheckGearDrowning(Gear)) do
-        Gear^.Y:= Gear^.Y+_1;
+    while (TestCollisionYWithGear(Gear,1) = 0) and (not CheckGearDrowning(Gear)) and (Gear <> nil) do
+        Gear^.Y:= Gear^.Y + _1;
+
+    // could become nil in CheckGearDrowning if ai's hog fails to respawn in ai survival
+    if Gear = nil then exit;
     SetLittle(Gear^.dX);
     Gear^.dY:= _0
     end
@@ -973,14 +994,17 @@
 // ARTILLERY but not being moved by explosions
     Gear^.X:= Gear^.X + Gear^.dX;
     Gear^.Y:= Gear^.Y + Gear^.dY;
-    if (not Gear^.dY.isNegative) and (not TestCollisionYKick(Gear, 1)) 
+    if (not Gear^.dY.isNegative) and (not TestCollisionYKick(Gear, 1))
     and TestCollisionYwithXYShift(Gear, 0, 1, 1) then
         begin
         CheckHHDamage(Gear);
         Gear^.dY:= _0;
         Gear^.Y:= Gear^.Y + _1
         end;
+
     CheckGearDrowning(Gear);
+    // could become nil if ai's hog fails to respawn in ai survival
+    if Gear = nil then exit;
     // hide target cursor if current hog is drowning
     if (Gear^.State and gstDrowning) <> 0 then
         if (CurrentHedgehog^.Gear = Gear) then
@@ -1057,7 +1081,7 @@
             HHGear^.Message:= HHGear^.Message or gmAttack;
     // check for case with ammo
     t:= CheckGearNear(HHGear, gtCase, 36, 36);
-    if t <> nil then
+    if (t <> nil) and (t^.State and gstFrozen = 0) then
         PickUp(HHGear, t)
     end;
 
@@ -1066,7 +1090,7 @@
     or ((HHGear^.State and gstAttacking) <> 0)) then
         Attack(HHGear) // should be before others to avoid desync with '/put' msg and changing weapon msgs
     else
-else 
+else
     with Hedgehog^ do
         if ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0)
         and ((HHGear^.Message and gmLJump) <> 0)
@@ -1171,7 +1195,7 @@
                 begin
                 ResurrectHedgehog(Gear);
                 end
-            else 
+            else
                 begin
                 Gear^.State:= (Gear^.State or gstHHDeath) and (not gstAnimation);
                 Gear^.doStep:= @doStepHedgehogDead;
@@ -1215,9 +1239,9 @@
 procedure CheckIce(Gear: PGear); inline;
 (*
 var x,y,tx,ty: LongInt;
-    tdX, tdY, slope: hwFloat; 
+    tdX, tdY, slope: hwFloat;
     land: Word; *)
-var slope: hwFloat; 
+var slope: hwFloat;
 begin
     if (Gear^.Message and (gmAllStoppable or gmLJump or gmHJump) = 0)
     and (Gear^.State and (gstHHJumping or gstHHHJump or gstAttacking) = 0)
@@ -1258,7 +1282,7 @@
     end;
 if GameTicks mod 100 = 0 then CheckIce(Gear);
 (*
-if Gear^.Hedgehog^.Effects[heFrozen] > 0 then 
+if Gear^.Hedgehog^.Effects[heFrozen] > 0 then
     begin
     if (Gear^.Hedgehog^.Effects[heFrozen] > 256) and (CurrentHedgehog^.Team^.Clan <> Gear^.Hedgehog^.Team^.Clan) then
         dec(Gear^.Hedgehog^.Effects[heFrozen])
@@ -1266,7 +1290,7 @@
         dec(Gear^.Hedgehog^.Effects[heFrozen])
     end;
 *)
-if (GameTicks mod 10 = 0) and (Gear^.Hedgehog^.Effects[heFrozen] > 0) and (Gear^.Hedgehog^.Effects[heFrozen] < 256) then 
+if (GameTicks mod 10 = 0) and (Gear^.Hedgehog^.Effects[heFrozen] > 0) and (Gear^.Hedgehog^.Effects[heFrozen] < 256) then
     dec(Gear^.Hedgehog^.Effects[heFrozen]);
 if (Gear^.State and gstHHDriven) = 0 then
     doStepHedgehogFree(Gear)
--- a/hedgewars/uGearsList.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGearsList.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@
     uGearsRender, uGearsUtils, uDebug;
 
 const
-    GearKindAmmoTypeMap : array [TGearType] of TAmmoType = (    
+    GearKindAmmoTypeMap : array [TGearType] of TAmmoType = (
 (*          gtFlame *)   amNothing
 (*       gtHedgehog *) , amNothing
 (*           gtMine *) , amMine
@@ -181,18 +181,18 @@
 gear^.AmmoType:= GearKindAmmoTypeMap[Kind];
 gear^.CollisionMask:= $FFFF;
 
-if CurrentHedgehog <> nil then 
+if CurrentHedgehog <> nil then
     begin
     gear^.Hedgehog:= CurrentHedgehog;
     if (CurrentHedgehog^.Gear <> nil) and (hwRound(CurrentHedgehog^.Gear^.X) = X) and (hwRound(CurrentHedgehog^.Gear^.Y) = Y) then
-        gear^.CollisionMask:= lfCurrentMask
+        gear^.CollisionMask:= lfNotCurrentMask
     end;
 
 if (Ammoz[Gear^.AmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then
     gear^.Z:= cHHZ+1
 else gear^.Z:= cUsualZ;
 
-    
+
 case Kind of
      gtGrenade,
      gtClusterBomb,
@@ -469,7 +469,8 @@
                 end;
      gtJetpack: begin
                 gear^.Health:= 2000;
-                gear^.Damage:= 100
+                gear^.Damage:= 100;
+                gear^.State:= gstSubmersible
                 end;
      gtMolotov: begin
                 gear^.Radius:= 6;
@@ -548,7 +549,10 @@
                 gear^.Pos:= 1;
                 end;
 }
-      gtIceGun: gear^.Health:= 1000;
+      gtIceGun: begin
+                gear^.Health:= 1000;
+                gear^.Radius:= 8;
+                end;
 gtGenericFaller:begin
                 gear^.AdvBounce:= 1;
                 gear^.Radius:= 1;
@@ -645,7 +649,7 @@
         if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Effects[heResurrectable] <> 0)  and
         //(Gear^.Hedgehog^.Effects[heResurrectable] = 0) then
         (Gear^.Hedgehog^.Team^.Clan <> CurrentHedgehog^.Team^.Clan) then
-            with CurrentHedgehog^ do 
+            with CurrentHedgehog^ do
                 begin
                 inc(Team^.stats.AIKills);
                 FreeTexture(Team^.AIKillsTex);
--- a/hedgewars/uGearsRender.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGearsRender.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -352,13 +352,7 @@
                     lx:= lx + ax;
                     ly:= ly + ay;
                     tx:= round(lx);
-                    ty:= round(ly);
-                    if (abs(tx-hx) > 1000) or (abs(hy-ty) > 1000) then
-                        begin
-                        DrawLine(hx, hy, tx, ty, 1.0, $FF, $00, $00, $C0);
-                        hx:= tx;
-                        hy:= ty
-                        end
+                    ty:= round(ly)
                     end;
                 // reached edge of land. assume infinite beam. Extend it way out past camera
                 if ((ty and LAND_HEIGHT_MASK) <> 0) or ((tx and LAND_WIDTH_MASK) <> 0) then
@@ -368,7 +362,6 @@
                     end;
 
                 //if (abs(lx-tx)>8) or (abs(ly-ty)>8) then
-                if (tx <> hx) or (ty <> hy) then
                     begin
                     DrawLine(hx, hy, tx, ty, 1.0, $FF, $00, $00, $C0);
                     end;
@@ -986,6 +979,8 @@
     aAngle: real;
     startX, endX, startY, endY: LongInt;
 begin
+    if Gear^.State and gstFrozen <> 0 then Tint($A0, $A0, $FF, $FF);
+    //if Gear^.State and gstFrozen <> 0 then Tint(IceColor or $FF);
     if Gear^.Target.X <> NoPointX then
         if Gear^.AmmoType = amBee then
             DrawSpriteRotatedF(sprTargetBee, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360)
@@ -1045,11 +1040,13 @@
       gtPickHammer: DrawSprite(sprPHammer, x - 16, y - 50 + LongInt(((GameTicks shr 5) and 1) * 2), 0);
             gtRope: DrawRope(Gear);
 
-            gtMine: if (((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)) and (Gear^.Health <> 0) then
+            gtMine: begin
+                    if (((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)) and (Gear^.Health <> 0) then
                            DrawSpriteRotated(sprMineOff, x, y, 0, Gear^.DirAngle)
-                       else if Gear^.Health <> 0 then
-                           DrawSpriteRotated(sprMineOn, x, y, 0, Gear^.DirAngle)
-                       else DrawSpriteRotated(sprMineDead, x, y, 0, Gear^.DirAngle);
+                    else if Gear^.Health <> 0 then
+                       DrawSpriteRotated(sprMineOn, x, y, 0, Gear^.DirAngle)
+                    else DrawSpriteRotated(sprMineDead, x, y, 0, Gear^.DirAngle);
+                    end;
 
            gtSMine: if (((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)) and (Gear^.Health <> 0) then
                            DrawSpriteRotated(sprSMineOff, x, y, 0, Gear^.DirAngle)
@@ -1063,26 +1060,38 @@
                         begin
                         if ((Gear^.Pos and posCaseAmmo) <> 0) then
                             begin
-                            i:= (GameTicks shr 6) mod 64;
-                            if i > 18 then
-                                i:= 0;
-                            DrawSprite(sprCase, x - 24, y - 24, i);
+                            if Gear^.State and gstFrozen <> 0 then
+                                DrawSprite(sprCase, x - 24, y - 28, 0)
+                            else
+                                begin
+                                i:= (GameTicks shr 6) mod 64;
+                                if i > 18 then i:= 0;
+                                DrawSprite(sprCase, x - 24, y - 24, i)
+                                end
                             end
                         else if ((Gear^.Pos and posCaseHealth) <> 0) then
                             begin
-                            i:= ((GameTicks shr 6) + 38) mod 64;
-                            if i > 13 then
-                                i:= 0;
-                            DrawSprite(sprFAid, x - 24, y - 24, i);
+                            if Gear^.State and gstFrozen <> 0 then
+                                DrawSprite(sprFAid, x - 24, y - 28, 0)
+                            else
+                                begin
+                                i:= ((GameTicks shr 6) + 38) mod 64;
+                                if i > 13 then i:= 0;
+                                DrawSprite(sprFAid, x - 24, y - 24, i)
+                                end
                             end
                         else if ((Gear^.Pos and posCaseUtility) <> 0) then
                             begin
-                            i:= (GameTicks shr 6) mod 70;
-                            if i > 23 then
-                                i:= 0;
-                            i:= i mod 12;
-                            DrawSprite(sprUtility, x - 24, y - 24, i);
-                            end;
+                            if Gear^.State and gstFrozen <> 0 then
+                                DrawSprite(sprUtility, x - 24, y - 28, 0)
+                            else
+                                begin
+                                i:= (GameTicks shr 6) mod 70;
+                                if i > 23 then i:= 0;
+                                i:= i mod 12;
+                                DrawSprite(sprUtility, x - 24, y - 24, i)
+                                end
+                            end
                         end;
                     if Gear^.Timer < 1833 then
                         begin
@@ -1103,7 +1112,7 @@
                     else if Gear^.State and gsttmpFlag = 0 then
                         DrawSpriteRotatedF(sprExplosivesRoll, x, y + 4, 0, 0, Gear^.DirAngle)
                     else
-                        DrawSpriteRotatedF(sprExplosivesRoll, x, y + 4, 1, 0, Gear^.DirAngle);
+                        DrawSpriteRotatedF(sprExplosivesRoll, x, y + 4, 1, 0, Gear^.DirAngle)
                     end;
         gtDynamite: DrawSprite(sprDynamite, x - 16, y - 25, Gear^.Tag and 1, Gear^.Tag shr 1);
      gtClusterBomb: DrawSpriteRotated(sprClusterBomb, x, y, 0, Gear^.DirAngle);
@@ -1292,6 +1301,7 @@
          end;
       if Gear^.RenderTimer and (Gear^.Tex <> nil) then
           DrawTextureCentered(x + 8, y + 8, Gear^.Tex);
+    if Gear^.State and gstFrozen <> 0 then Tint($FF, $FF, $FF, $FF)
 end;
 
 end.
--- a/hedgewars/uGearsUtils.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uGearsUtils.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -31,13 +31,13 @@
 procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource);
 procedure CheckHHDamage(Gear: PGear);
 procedure CalcRotationDirAngle(Gear: PGear);
-procedure ResurrectHedgehog(gear: PGear);
+procedure ResurrectHedgehog(var gear: PGear);
 
 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt); inline;
 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean);
 
 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
-function  CheckGearDrowning(Gear: PGear): boolean;
+function  CheckGearDrowning(var Gear: PGear): boolean;
 procedure CheckCollision(Gear: PGear); inline;
 procedure CheckCollisionWithLand(Gear: PGear); inline;
 
@@ -137,7 +137,7 @@
                                 Gear^.Active:= true;
                                 if Gear^.Kind <> gtFlame then FollowGear:= Gear
                                 end;
-                            if ((Mask and EXPLPoisoned) <> 0) and (Gear^.Kind = gtHedgehog) and (not Gear^.Invulnerable) then
+                            if ((Mask and EXPLPoisoned) <> 0) and (Gear^.Kind = gtHedgehog) and (not Gear^.Invulnerable) and ((Gear^.State and gstHHDeath) = 0) then
                                 Gear^.Hedgehog^.Effects[hePoisoned] := 1;
                             end;
 
@@ -183,9 +183,9 @@
 if (CurrentHedgehog <> nil) and CurrentHedgehog^.King then
     i:= _1_5;
 if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.King or (Gear^.Hedgehog^.Effects[heFrozen] > 0)) then
-    ModifyDamage:= hwRound(_0_01 * cDamageModifier * dmg * i * cDamagePercent * _0_5)
+    ModifyDamage:= hwRound(cDamageModifier * dmg * i * cDamagePercent * _0_5 * _0_01)
 else
-    ModifyDamage:= hwRound(_0_01 * cDamageModifier * dmg * i * cDamagePercent)
+    ModifyDamage:= hwRound(cDamageModifier * dmg * i * cDamagePercent * _0_01)
 end;
 
 procedure ApplyDamage(Gear: PGear; AttackerHog: PHedgehog; Damage: Longword; Source: TDamageSource);
@@ -263,6 +263,7 @@
     
 procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource);
 begin
+if Hedgehog^.Effects[heFrozen] <> 0 then exit;
 if (Source = dsFall) or (Source = dsExplosion) then
     case random(3) of
         0: PlaySoundV(sndOoff1, Hedgehog^.Team^.voicepack);
@@ -289,32 +290,34 @@
     i: LongWord;
     particle: PVisualGear;
 begin
-    if _0_4 < Gear^.dY then
-        begin
-        dmg := ModifyDamage(1 + hwRound((hwAbs(Gear^.dY) - _0_4) * 70), Gear);
-        PlaySound(sndBump);
-        if dmg < 1 then
-            exit;
+if _0_4 < Gear^.dY then
+    begin
+    dmg := ModifyDamage(1 + hwRound((Gear^.dY - _0_4) * 70), Gear);
+    if Gear^.Hedgehog^.Effects[heFrozen] = 0 then
+         PlaySound(sndBump)
+    else PlaySound(sndFrozenHogImpact);
+    if dmg < 1 then
+        exit;
 
-        for i:= min(12, (3 + dmg div 10)) downto 0 do
-            begin
-            particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
-            if particle <> nil then
-                particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480);
-            end;
+    for i:= min(12, (3 + dmg div 10)) downto 0 do
+        begin
+        particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
+        if particle <> nil then
+            particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480);
+        end;
 
-        if (Gear^.Invulnerable) then
-            exit;
+    if (Gear^.Invulnerable) then
+        exit;
 
-        //if _0_6 < Gear^.dY then
-        //    PlaySound(sndOw4, Gear^.Hedgehog^.Team^.voicepack)
-        //else
-        //    PlaySound(sndOw1, Gear^.Hedgehog^.Team^.voicepack);
+    //if _0_6 < Gear^.dY then
+    //    PlaySound(sndOw4, Gear^.Hedgehog^.Team^.voicepack)
+    //else
+    //    PlaySound(sndOw1, Gear^.Hedgehog^.Team^.voicepack);
 
-        if Gear^.LastDamage <> nil then
-            ApplyDamage(Gear, Gear^.LastDamage, dmg, dsFall)
-        else
-            ApplyDamage(Gear, CurrentHedgehog, dmg, dsFall);
+    if Gear^.LastDamage <> nil then
+        ApplyDamage(Gear, Gear^.LastDamage, dmg, dsFall)
+    else
+        ApplyDamage(Gear, CurrentHedgehog, dmg, dsFall);
     end
 end;
 
@@ -337,7 +340,7 @@
         Gear^.DirAngle := Gear^.DirAngle - 360
 end;
 
-function CheckGearDrowning(Gear: PGear): boolean;
+function CheckGearDrowning(var Gear: PGear): boolean;
 var 
     skipSpeed, skipAngle, skipDecay: hwFloat;
     i, maxDrops, X, Y: LongInt;
@@ -361,7 +364,7 @@
             else DeleteGear(Gear);
             exit
             end;
-        isSubmersible:= (Gear = CurrentHedgehog^.Gear) and (CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack);
+        isSubmersible:= ((Gear = CurrentHedgehog^.Gear) and (CurAmmoGear <> nil) and (CurAmmoGear^.State and gstSubmersible <> 0)) or (Gear^.State and gstSubmersible <> 0);
         skipSpeed := _0_25;
         skipAngle := _1_9;
         skipDecay := _0_87;
@@ -369,7 +372,7 @@
         vdX:= hwFloat2Float(Gear^.dX);
         vdY:= hwFloat2Float(Gear^.dY);
         // this could perhaps be a tiny bit higher.
-        if  (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > skipSpeed)
+        if  (cWaterLine + 64 + Gear^.Radius > Y) and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > skipSpeed) 
         and (hwAbs(Gear^.dX) > skipAngle * hwAbs(Gear^.dY)) then
             begin
             Gear^.dY.isNegative := true;
@@ -390,7 +393,11 @@
                     if Gear^.Kind = gtHedgehog then
                         begin
                         if Gear^.Hedgehog^.Effects[heResurrectable] <> 0 then
-                            ResurrectHedgehog(Gear)
+                            begin
+                            // Gear could become nil after this, just exit to skip splashes
+                            ResurrectHedgehog(Gear);
+                            exit
+                            end
                         else
                             begin
                             Gear^.doStep := @doStepDrowningGear;
@@ -402,9 +409,12 @@
                         Gear^.doStep := @doStepDrowningGear;
                         if Gear^.Kind = gtFlake then
                             exit // skip splashes 
-                end;
+                end
+            else if (Y > cWaterLine + cVisibleWater*4) and 
+                    ((Gear <> CurrentHedgehog^.Gear) or (CurAmmoGear = nil) or (CurAmmoGear^.State and gstSubmersible = 0)) then
+                Gear^.doStep:= @doStepDrowningGear;
             if ((not isSubmersible) and (Y < cWaterLine + 64 + Gear^.Radius))
-            or (isSubmersible and (Y < cWaterLine + 2 + Gear^.Radius) and ((CurAmmoGear^.Pos = 0)
+            or (isSubmersible and (Y < cWaterLine + 2 + Gear^.Radius) and (Gear = CurAmmoGear) and ((CurAmmoGear^.Pos = 0)
             and (CurAmmoGear^.dY < _0_01))) then
                 if Gear^.Density * Gear^.dY > _1 then
                     PlaySound(sndSplash)
@@ -416,7 +426,7 @@
 
         if ((cReducedQuality and rqPlainSplash) = 0)
         and (((not isSubmersible) and (Y < cWaterLine + 64 + Gear^.Radius))
-        or (isSubmersible and (Y < cWaterLine + 2 + Gear^.Radius) and ((CurAmmoGear^.Pos = 0)
+        or (isSubmersible and (Y < cWaterLine + 2 + Gear^.Radius) and (Gear = CurAmmoGear) and ((CurAmmoGear^.Pos = 0)
         and (CurAmmoGear^.dY < _0_01)))) then
             begin
             splash:= AddVisualGear(X, cWaterLine, vgtSplash);
@@ -457,7 +467,7 @@
                         end
                 end
             end;
-        if isSubmersible and (CurAmmoGear^.Pos = 0) then
+        if isSubmersible and (Gear = CurAmmoGear) and (CurAmmoGear^.Pos = 0) then
             CurAmmoGear^.Pos := 1000
         end
     else
@@ -465,7 +475,7 @@
 end;
 
 
-procedure ResurrectHedgehog(gear: PGear);
+procedure ResurrectHedgehog(var gear: PGear);
 var tempTeam : PTeam;
     sparkles: PVisualGear;
     gX, gY: LongInt;
@@ -507,7 +517,7 @@
         RenderHealth(gear^.Hedgehog^);
         ScriptCall('onGearResurrect', gear^.uid);
         gear^.State := gstWait;
-    end;
+        end;
     RecountTeamHealth(tempTeam);
 end;
 
@@ -580,7 +590,7 @@
                     inc(y, 2);
                 until (y >= cWaterLine) or
                         (not ignoreOverlap and (CountNonZeroz(x, y, Gear^.Radius - 1, 1, $FFFF) = 0)) or 
-                        (ignoreOverlap and (CountNonZeroz(x, y, Gear^.Radius - 1, 1, $FF00) = 0));
+                        (ignoreOverlap and (CountNonZeroz(x, y, Gear^.Radius - 1, 1, lfLandMask) = 0));
 
                 sy:= y;
 
@@ -588,7 +598,7 @@
                     inc(y);
                 until (y >= cWaterLine) or
                         (not ignoreOverlap and (CountNonZeroz(x, y, Gear^.Radius - 1, 1, $FFFF) <> 0)) or 
-                        (ignoreOverlap and (CountNonZeroz(x, y, Gear^.Radius - 1, 1, $FF00) <> 0)); 
+                        (ignoreOverlap and (CountNonZeroz(x, y, Gear^.Radius - 1, 1, lfLandMask) <> 0)); 
 
                 if (y - sy > Gear^.Radius * 2)
                     and (((Gear^.Kind = gtExplosives)
--- a/hedgewars/uIO.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uIO.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -212,7 +212,7 @@
 end;
 
 procedure SendStat(sit: TStatInfoType; s: shortstring);
-const stc: array [TStatInfoType] of char = ('r', 'D', 'k', 'K', 'H', 'T', 'P', 's', 'S', 'B');
+const stc: array [TStatInfoType] of char = ('r', 'D', 'k', 'K', 'H', 'T', 'P', 's', 'S', 'B', 'c', 'g', 'p');
 var buf: shortstring;
 begin
 buf:= 'i' + stc[sit] + s;
--- a/hedgewars/uInputHandler.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uInputHandler.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -289,8 +289,8 @@
 DefaultBinds[KeyNameToCode(_S'y')]:= 'confirm';
 
 DefaultBinds[KeyNameToCode('mousem')]:= 'zoomreset';
-DefaultBinds[KeyNameToCode('wheelup')]:= 'zoomout';
-DefaultBinds[KeyNameToCode('wheeldown')]:= 'zoomin';
+DefaultBinds[KeyNameToCode('wheelup')]:= 'zoomin';
+DefaultBinds[KeyNameToCode('wheeldown')]:= 'zoomout';
 
 DefaultBinds[KeyNameToCode('f12')]:= 'fullscr';
 
--- a/hedgewars/uLand.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLand.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -483,28 +483,11 @@
 
         p:= tmpsurf^.pixels;
         for y:= 0 to Pred(tmpsurf^.h) do
-        begin
+            begin
             for x:= 0 to Pred(tmpsurf^.w) do
-            begin
-                // this an if instead of masking colours to avoid confusing map creators
-                if ((AMask and p^[x]) = 0) then 
-                    Land[cpY + y, cpX + x]:= 0
-                else if p^[x] = $FFFFFFFF then                  // white
-                    Land[cpY + y, cpX + x]:= lfObject
-                else if p^[x] = AMask then                      // black
-                    begin
-                    Land[cpY + y, cpX + x]:= lfBasic;
-                    disableLandBack:= false
-                    end
-                else if p^[x] = (AMask or RMask) then           // red
-                    Land[cpY + y, cpX + x]:= lfIndestructible
-                else if p^[x] = (AMask or BMask) then           // blue
-                    Land[cpY + y, cpX + x]:= lfObject or lfIce
-                else if p^[x] = (AMask or GMask) then           // green
-                    Land[cpY + y, cpX + x]:= lfObject or lfBouncy
+                SetLand(Land[cpY + y, cpX + x], p^[x]);
+            p:= @(p^[tmpsurf^.pitch div 4]);
             end;
-            p:= @(p^[tmpsurf^.pitch div 4]);
-        end;
 
     if SDL_MustLock(tmpsurf) then
         SDL_UnlockSurface(tmpsurf);
--- a/hedgewars/uLandGenMaze.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLandGenMaze.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,3 +1,5 @@
+{$INCLUDE "options.inc"}
+
 unit uLandGenMaze;
 
 interface
--- a/hedgewars/uLandGraphics.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLandGraphics.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,10 +22,14 @@
 interface
 uses uFloat, uConsts, uTypes;
 
+type
+    fillType = (nullPixel, backgroundPixel, ebcPixel, icePixel, setNotCurrentMask, changePixelSetNotCurrent, setCurrentHog, changePixelNotSetNotCurrent);
+
 type TRangeArray = array[0..31] of record
                                    Left, Right: LongInt;
                                    end;
      PRangeArray = ^TRangeArray;
+TLandCircleProcedure = procedure (landX, landY, pixelX, pixelY: Longint);
 
 function  addBgColor(OldColor, NewColor: LongWord): LongWord;
 function  SweepDirty: boolean;
@@ -36,7 +40,7 @@
 procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte);
 procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt);
 procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword);
-procedure FillRoundInLandWithIce(X, Y, Radius: LongInt);
+function FillRoundInLand(X, Y, Radius: LongInt; fill: fillType): LongWord;
 procedure ChangeRoundInLand(X, Y, Radius: LongInt; doSet, isCurrent: boolean);
 function  LandBackPixel(x, y: LongInt): LongWord;
 procedure DrawLine(X1, Y1, X2, Y2: LongInt; Color: Longword);
@@ -48,6 +52,218 @@
 implementation
 uses SDLh, uLandTexture, uVariables, uUtils, uDebug;
 
+
+procedure calculatePixelsCoordinates(landX, landY: Longint; var pixelX, pixelY: Longint); inline;
+begin
+if (cReducedQuality and rqBlurryLand) = 0 then
+    begin
+    pixelX := landX;
+    pixelY := landY;
+    end
+else
+    begin
+    pixelX := LandX div 2;
+    pixelY := LandY div 2;
+    end;
+end;
+
+function drawPixelBG(landX, landY, pixelX, pixelY: Longint): Longword; inline;
+begin
+drawPixelBG := 0;
+if (Land[LandY, landX] and lfIndestructible) = 0 then
+    begin
+        if ((Land[landY, landX] and lfBasic) <> 0) and (((LandPixels[pixelY, pixelX] and AMask) shr AShift) = 255) and (not disableLandBack) then
+        begin
+            LandPixels[pixelY, pixelX]:= LandBackPixel(landX, landY);
+            inc(drawPixelBG);
+        end
+        else if ((Land[landY, landX] and lfObject) <> 0) or (((LandPixels[pixelY, pixelX] and AMask) shr AShift) < 255) then
+            LandPixels[pixelY, pixelX]:= 0
+    end;
+end;
+
+procedure drawPixelEBC(landX, landY, pixelX, pixelY: Longint); inline;
+begin
+if ((Land[landY, landX] and lfBasic) <> 0) or ((Land[landY, landX] and lfObject) <> 0) then
+    begin
+    LandPixels[pixelY, pixelX]:= ExplosionBorderColor;
+    Land[landY, landX]:= (Land[landY, landX] or lfDamaged) and not lfIce;
+    LandDirty[landY div 32, landX div 32]:= 1;
+    end;
+end;
+
+function isLandscapeEdge(weight:Longint):boolean; inline;
+begin
+result := (weight < 8) and (weight >= 2);
+end;
+
+function getPixelWeight(x, y:Longint): Longint;
+var
+    i, j:Longint;
+begin
+result := 0;
+for i := x - 1 to x + 1 do
+    for j := y - 1 to y + 1 do
+    begin
+    if (i < 0) or
+       (i > LAND_WIDTH - 1) or
+       (j < 0) or
+       (j > LAND_HEIGHT -1) then
+       begin
+       result := 9;
+       exit;
+       end;
+    if Land[j, i] and lfLandMask and not lfIce = 0 then
+       result := result + 1;
+    end;
+end;
+
+
+procedure fillPixelFromIceSprite(pixelX, pixelY:Longint); inline;
+var
+    iceSurface: PSDL_Surface;
+    icePixels: PLongwordArray;
+    w: LongWord;
+begin
+    // So. 3 parameters here. Ice colour, Ice opacity, and a bias on the greyscaled pixel towards lightness
+    iceSurface:= SpritesData[sprIceTexture].Surface;
+    icePixels := iceSurface^.pixels;
+    w:= LandPixels[pixelY, pixelX];
+    if w > 0 then
+        begin
+        w:= round(((w shr RShift and $FF) * RGB_LUMINANCE_RED +
+              (w shr BShift and $FF) * RGB_LUMINANCE_GREEN +
+              (w shr GShift and $FF) * RGB_LUMINANCE_BLUE));
+        if w < 128 then w:= w+128;
+        if w > 255 then w:= 255;
+        w:= (w shl RShift) or (w shl BShift) or (w shl GShift) or (LandPixels[pixelY, pixelX] and AMask);
+        LandPixels[pixelY, pixelX]:= addBgColor(w, IceColor);
+        LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)])
+        end
+    else
+        begin
+        LandPixels[pixelY, pixelX]:= IceColor and not AMask or $E8 shl AShift;
+        LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)]);
+        // silly workaround to avoid having to make background erasure a tadb it smarter about sea ice
+        if LandPixels[pixelY, pixelX] and AMask shr AShift = 255 then
+            LandPixels[pixelY, pixelX]:= LandPixels[pixelY, pixelX] and not AMask or 254 shl AShift;
+        end;
+end;
+
+
+procedure DrawPixelIce(landX, landY, pixelX, pixelY: Longint); inline;
+begin
+if ((Land[landY, landX] and lfIce) <> 0) then exit;
+if isLandscapeEdge(getPixelWeight(landX, landY)) then
+    begin
+    if (LandPixels[pixelY, pixelX] and AMask < 255) and (LandPixels[pixelY, pixelX] and AMask > 0) then
+        LandPixels[pixelY, pixelX] := (IceEdgeColor and not AMask) or (LandPixels[pixelY, pixelX] and AMask)
+    else if (LandPixels[pixelY, pixelX] and AMask < 255) or (Land[landY, landX] > 255) then
+        LandPixels[pixelY, pixelX] := IceEdgeColor
+    end
+else if Land[landY, landX] > 255 then
+    begin
+        fillPixelFromIceSprite(pixelX, pixelY);
+    end;
+if Land[landY, landX] > 255 then Land[landY, landX] := Land[landY, landX] or lfIce and not lfDamaged;
+end;
+
+
+function FillLandCircleLine(y, fromPix, toPix: LongInt; fill : fillType): Longword;
+var px, py, i: LongInt;
+begin
+//get rid of compiler warning
+    px := 0;
+    py := 0;
+    FillLandCircleLine := 0;
+    case fill of
+    backgroundPixel:
+    for i:= fromPix to toPix do
+        begin
+        calculatePixelsCoordinates(i, y, px, py);
+        inc(FillLandCircleLine, drawPixelBG(i, y, px, py));
+        end;
+    ebcPixel:
+    for i:= fromPix to toPix do
+        begin
+        calculatePixelsCoordinates(i, y, px, py);
+        drawPixelEBC(i, y, px, py);
+        end;
+    nullPixel:
+    for i:= fromPix to toPix do
+        begin
+        calculatePixelsCoordinates(i, y, px, py);
+        if ((Land[y, i] and lfIndestructible) = 0) and (not disableLandBack or (Land[y, i] > 255))  then
+            LandPixels[py, px]:= 0
+        end;
+    icePixel:
+    for i:= fromPix to toPix do
+        begin
+        calculatePixelsCoordinates(i, y, px, py);
+        DrawPixelIce(i, y, px, py);
+        end;
+    setNotCurrentMask:
+    for i:= fromPix to toPix do
+        begin
+        Land[y, i]:= Land[y, i] and lfNotCurrentMask;
+        end;
+    changePixelSetNotCurrent:
+    for i:= fromPix to toPix do
+        begin
+        if Land[y, i] and lfObjMask > 0 then
+            Land[y, i]:= (Land[y, i] and lfNotObjMask) or ((Land[y, i] and lfObjMask) - 1);
+        end;
+    setCurrentHog:
+    for i:= fromPix to toPix do
+        begin
+        Land[y, i]:= Land[y, i] or lfCurrentHog
+        end;
+    changePixelNotSetNotCurrent:
+    for i:= fromPix to toPix do
+        begin
+        if Land[y, i] and lfObjMask < lfObjMask then
+            Land[y, i]:= (Land[y, i] and lfNotObjMask) or ((Land[y, i] and lfObjMask) + 1)
+        end;
+    end;
+end;
+
+function FillLandCircleSegment(x, y, dx, dy: LongInt; fill : fillType): Longword; inline;
+begin
+    FillLandCircleSegment := 0;
+if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
+    inc(FillLandCircleSegment, FillLandCircleLine(y + dy, Max(x - dx, 0), Min(x + dx, LAND_WIDTH - 1), fill));
+if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
+    inc(FillLandCircleSegment, FillLandCircleLine(y - dy, Max(x - dx, 0), Min(x + dx, LAND_WIDTH - 1), fill));
+if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
+    inc(FillLandCircleSegment, FillLandCircleLine(y + dx, Max(x - dy, 0), Min(x + dy, LAND_WIDTH - 1), fill));
+if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
+    inc(FillLandCircleSegment, FillLandCircleLine(y - dx, Max(x - dy, 0), Min(x + dy, LAND_WIDTH - 1), fill));
+end;
+
+function FillRoundInLand(X, Y, Radius: LongInt; fill: fillType): Longword; inline;
+var dx, dy, d: LongInt;
+begin
+dx:= 0;
+dy:= Radius;
+d:= 3 - 2 * Radius;
+FillRoundInLand := 0;
+while (dx < dy) do
+    begin
+    inc(FillRoundInLand, FillLandCircleSegment(x, y, dx, dy, fill));
+    if (d < 0) then
+        d:= d + 4 * dx + 6
+    else
+        begin
+        d:= d + 4 * (dx - dy) + 10;
+        dec(dy)
+        end;
+    inc(dx)
+    end;
+if (dx = dy) then
+    inc (FillRoundInLand, FillLandCircleSegment(x, y, dx, dy, fill));
+end;
+
+
 function addBgColor(OldColor, NewColor: LongWord): LongWord;
 // Factor ranges from 0 to 100% NewColor
 var
@@ -100,67 +316,6 @@
             Land[y - dx, i]:= Value;
 end;
 
-procedure ChangeCircleLines(x, y, dx, dy: LongInt; doSet, isCurrent: boolean);
-var i: LongInt;
-begin
-if not doSet then
-    begin
-    if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y + dy, i]:= Land[y + dy, i] and lfCurrentMask
-            else if Land[y + dy, i] and lfObjMask > 0 then
-                Land[y + dy, i]:= (Land[y + dy, i] and lfNotObjMask) or ((Land[y + dy, i] and lfObjMask) - 1);
-    if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y - dy, i]:= Land[y - dy, i] and lfCurrentMask
-            else if Land[y - dy, i] and lfObjMask > 0 then
-                Land[y - dy, i]:= (Land[y - dy, i] and lfNotObjMask) or ((Land[y - dy, i] and lfObjMask) - 1);
-    if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y + dx, i]:= Land[y + dx, i] and lfCurrentMask
-            else if Land[y + dx, i] and lfObjMask > 0 then
-                Land[y + dx, i]:= (Land[y + dx, i] and lfNotObjMask) or ((Land[y + dx, i] and lfObjMask) - 1);
-    if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y - dx, i]:= Land[y - dx, i] and lfCurrentMask
-            else if Land[y - dx, i] and lfObjMask > 0 then
-                Land[y - dx, i]:= (Land[y - dx, i] and lfNotObjMask) or ((Land[y - dx, i] and lfObjMask) - 1)
-    end
-else
-    begin
-    if ((y + dy) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y + dy, i]:= Land[y + dy, i] or lfCurrentHog
-            else if Land[y + dy, i] and lfObjMask < lfObjMask then
-                Land[y + dy, i]:= (Land[y + dy, i] and lfNotObjMask) or ((Land[y + dy, i] and lfObjMask) + 1);
-    if ((y - dy) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y - dy, i]:= Land[y - dy, i] or lfCurrentHog
-            else if Land[y - dy, i] and lfObjMask < lfObjMask then
-                Land[y - dy, i]:= (Land[y - dy, i] and lfNotObjMask) or ((Land[y - dy, i] and lfObjMask) + 1);
-    if ((y + dx) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y + dx, i]:= Land[y + dx, i] or lfCurrentHog
-            else if Land[y + dx, i] and lfObjMask < lfObjMask then
-                Land[y + dx, i]:= (Land[y + dx, i] and lfNotObjMask) or ((Land[y + dx, i] and lfObjMask) + 1);
-    if ((y - dx) and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-            if isCurrent then
-                Land[y - dx, i]:= Land[y - dx, i] or lfCurrentHog
-            else if Land[y - dx, i] and lfObjMask < lfObjMask then
-                Land[y - dx, i]:= (Land[y - dx, i] and lfNotObjMask) or ((Land[y - dx, i] and lfObjMask) + 1)
-    end
-end;
-
-
-
 procedure FillRoundInLand(X, Y, Radius: LongInt; Value: Longword);
 var dx, dy, d: LongInt;
 begin
@@ -184,206 +339,17 @@
 end;
 
 procedure ChangeRoundInLand(X, Y, Radius: LongInt; doSet, isCurrent: boolean);
-var dx, dy, d: LongInt;
 begin
-dx:= 0;
-dy:= Radius;
-d:= 3 - 2 * Radius;
-while (dx < dy) do
-    begin
-    ChangeCircleLines(x, y, dx, dy, doSet, isCurrent);
-    if (d < 0) then
-        d:= d + 4 * dx + 6
-    else
-        begin
-        d:= d + 4 * (dx - dy) + 10;
-        dec(dy)
-        end;
-    inc(dx)
-    end;
-if (dx = dy) then
-    ChangeCircleLines(x, y, dx, dy, doSet, isCurrent)
-end;
-
-procedure FillLandCircleLines0(x, y, dx, dy: LongInt);
-var i, t: LongInt;
-begin
-t:= y + dy;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfIndestructible) = 0) and (not disableLandBack or (Land[t, i] > 255))  then
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= 0
-            else
-                LandPixels[t div 2, i div 2]:= 0;
-
-t:= y - dy;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfIndestructible) = 0) and (not disableLandBack or (Land[t, i] > 255))  then
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= 0
-            else
-                LandPixels[t div 2, i div 2]:= 0;
-
-t:= y + dx;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfIndestructible) = 0) and (not disableLandBack or (Land[t, i] > 255))  then
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= 0
-            else
-                LandPixels[t div 2, i div 2]:= 0;
-
-t:= y - dx;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfIndestructible) = 0) and (not disableLandBack or (Land[t, i] > 255))  then
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= 0
-            else
-                LandPixels[t div 2, i div 2]:= 0;
-
-end;
-
-
-function isLandscapeEdge(weight:Longint):boolean; inline;
-begin
-    result := (weight < 8) and (weight >= 2);
-end;
-
-function getPixelWeight(x, y:Longint): Longint;
-var
-    i, j:Longint;
-begin
-    result := 0;
-    for i := x - 1 to x + 1 do
-        for j := y - 1 to y + 1 do
-        begin
-        if (i < 0) or
-           (i > LAND_WIDTH - 1) or
-           (j < 0) or
-           (j > LAND_HEIGHT -1) then
-           begin               
-           result := 9;
-           exit;
-           end;
-
-        if Land[j, i] and $FF00 and not lfIce = 0 then
-           result := result + 1;
-        end;
+if not doSet and isCurrent then
+    FillRoundInLand(X, Y, Radius, setNotCurrentMask)
+else if not doSet and not IsCurrent then
+    FillRoundInLand(X, Y, Radius, changePixelSetNotCurrent)
+else if doSet and IsCurrent then
+    FillRoundInLand(X, Y, Radius, setCurrentHog)
+else if doSet and not IsCurrent then
+    FillRoundInLand(X, Y, Radius, changePixelNotSetNotCurrent);
 end;
 
-procedure drawIcePixel(y, x:Longint);
-var
-    iceSurface: PSDL_Surface;
-    icePixels: PLongwordArray;
-    pictureX, pictureY: LongInt;
-    w, c: LongWord;
-    weight: Longint;
-begin
-    // So. 3 parameters here. Ice colour, Ice opacity, and a bias on the greyscaled pixel towards lightness
-    iceSurface:= SpritesData[sprIceTexture].Surface;
-    icePixels := iceSurface^.pixels;
-    w:= LandPixels[y, x];
-    if w > 0 then
-        begin
-        w:= round(((w shr RShift and $FF) * RGB_LUMINANCE_RED +
-              (w shr BShift and $FF) * RGB_LUMINANCE_GREEN +
-              (w shr GShift and $FF) * RGB_LUMINANCE_BLUE));
-        if w < 128 then w:= w+128;
-        if w > 255 then w:= 255;
-        w:= (w shl RShift) or (w shl BShift) or (w shl GShift) or (LandPixels[y,x] and AMask);
-        LandPixels[y, x]:= addBgColor(w, IceColor);
-        LandPixels[y, x]:= addBgColor(LandPixels[y, x], icePixels^[iceSurface^.w * (y mod iceSurface^.h) + (x mod iceSurface^.w)])
-        end
-    else 
-        begin
-        LandPixels[y, x]:= IceColor and not AMask or $E8 shl AShift;
-        LandPixels[y, x]:= addBgColor(LandPixels[y, x], icePixels^[iceSurface^.w * (y mod iceSurface^.h) + (x mod iceSurface^.w)]);
-        // silly workaround to avoid having to make background erasure a tadb it smarter about sea ice
-        if LandPixels[y, x] and AMask shr AShift = 255 then 
-            LandPixels[y, x]:= LandPixels[y, x] and not AMask or 254 shl AShift;
-        end;
-end;
-
-function getIncrementInquarter(dx, dy, quarter: Longint): Longint; inline;
-const directionX : array [0..3] of Longint = (0, 0, 1, -1);
-const directionY : array [0..3] of Longint = (1, -1, 0, 0);
-begin
-    getIncrementInquarter := directionX[quarter] * dx + directionY[quarter] * dy;
-end;
-
-function getIncrementInquarter2(dx, dy, quarter: Longint): Longint; inline;
-const directionY : array [0..3] of Longint = (0, 0, 1, 1);
-const directionX : array [0..3] of Longint = (1, 1, 0, 0);
-begin
-    getIncrementInquarter2 := directionX[quarter] * dx + directionY[quarter] * dy;
-end;
-
-procedure FillLandCircleLinesIce(x, y, dx, dy: LongInt);
-var q, i, t, px, py: LongInt;
-begin
-for q := 0 to 3 do
-    begin
-    t:= y + getIncrementInquarter(dx, dy, q);
-    if (t and LAND_HEIGHT_MASK) = 0 then
-        for i:= Max(x - getIncrementInquarter2(dx, dy, q), 0) to Min(x + getIncrementInquarter2(dx, dy, q), LAND_WIDTH - 1) do
-            if Land[t, i] and lfIce = 0 then
-                begin
-                if (cReducedQuality and rqBlurryLand) = 0 then
-                    begin
-                    px:= i; py:= t
-                    end
-                else
-                    begin
-                    px:= i div 2; py:= t div 2
-                    end;
-                if isLandscapeEdge(getPixelWeight(i, t)) then
-                    begin
-                    if (LandPixels[py, px] and AMask < 255) and (LandPixels[py, px] and AMask > 0) then
-                        LandPixels[py, px] := (IceEdgeColor and not AMask) or (LandPixels[py, px] and AMask)
-                    else if (LandPixels[py, px] and AMask < 255) or (Land[t, i] > 255) then
-                        LandPixels[py, px] := IceEdgeColor
-                    end
-                else if Land[t, i] > 255 then
-                    begin
-                    drawIcePixel(py, px)
-                    end;
-                if Land[t, i] > 255 then Land[t, i] := Land[t, i] or lfIce and not lfDamaged;
-                end;
-    end
-end;
-
-procedure FillRoundInLandWithIce(X, Y, Radius: LongInt);
-var dx, dy, d: LongInt;
-    landRect: TSDL_Rect;
-begin
-dx:= 0;
-dy:= Radius;
-d:= 3 - 2 * Radius;
-while (dx < dy) do
-    begin
-    FillLandCircleLinesIce(x, y, dx, dy);
-    if (d < 0) then
-        d:= d + 4 * dx + 6
-    else
-        begin
-        d:= d + 4 * (dx - dy) + 10;
-        dec(dy)
-        end;
-    inc(dx)
-    end;
-if (dx = dy) then
-    FillLandCircleLinesIce(x, y, dx, dy);
-landRect.x := min(max(x - Radius, 0), LAND_WIDTH - 1);
-landRect.y := min(max(y - Radius, 0), LAND_HEIGHT - 1);
-landRect.w := min(2*Radius, LAND_WIDTH - landRect.x - 1);
-landRect.h := min(2*Radius, LAND_HEIGHT - landRect.y - 1);
-UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true);        
-end;
-
-
 procedure DrawIceBreak(x, y, iceRadius, iceHeight: Longint);
 var
     i, j: integer;
@@ -395,259 +361,32 @@
         begin
         if Land[j, i] = 0 then
             begin
-            Land[j, i] := lfIce;                
-            drawIcePixel(j, i);
+            Land[j, i] := lfIce;
+            fillPixelFromIceSprite(i, j);
             end;
-        end;        
+        end;
     end;
 landRect.x := min(max(x - iceRadius, 0), LAND_WIDTH - 1);
 landRect.y := min(max(y, 0), LAND_HEIGHT - 1);
 landRect.w := min(2*iceRadius, LAND_WIDTH - landRect.x - 1);
 landRect.h := min(iceHeight, LAND_HEIGHT - landRect.y - 1);
-UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true);        
-end;
-
-
-
-function FillLandCircleLinesBG(x, y, dx, dy: LongInt): Longword;
-var i, t, by, bx: LongInt;
-    cnt: Longword;
-begin
-cnt:= 0;
-t:= y + dy;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-        if (Land[t, i] and lfIndestructible) = 0 then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                begin
-                by:= t; bx:= i;
-                end
-            else
-                begin
-                by:= t div 2; bx:= i div 2;
-                end;
-            if ((Land[t, i] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then
-                begin
-                inc(cnt);
-                LandPixels[by, bx]:= LandBackPixel(i, t)
-                end
-            else if ((Land[t, i] and lfObject) <> 0) or (((LandPixels[by,bx] and AMask) shr AShift) < 255) then
-                LandPixels[by, bx]:= 0
-            end;
-
-t:= y - dy;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-        if (Land[t, i] and lfIndestructible) = 0 then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                begin
-                by:= t; bx:= i;
-                end
-            else
-                begin
-                by:= t div 2; bx:= i div 2;
-                end;
-            if ((Land[t, i] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then
-                begin
-                inc(cnt);
-                LandPixels[by, bx]:= LandBackPixel(i, t)
-                end
-            else if ((Land[t, i] and lfObject) <> 0) or (((LandPixels[by,bx] and AMask) shr AShift) < 255) then
-                LandPixels[by, bx]:= 0
-            end;
-
-t:= y + dx;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-        if (Land[t, i] and lfIndestructible) = 0 then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                begin
-                by:= t; bx:= i;
-                end
-            else
-                begin
-                by:= t div 2; bx:= i div 2;
-                end;
-            if ((Land[t, i] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then
-                begin
-                inc(cnt);
-                LandPixels[by, bx]:= LandBackPixel(i, t)
-                end
-            else if ((Land[t, i] and lfObject) <> 0) or (((LandPixels[by,bx] and AMask) shr AShift) < 255) then
-                LandPixels[by, bx]:= 0
-            end;
-t:= y - dx;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-        if (Land[t, i] and lfIndestructible) = 0 then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                begin
-                by:= t; bx:= i;
-                end
-            else
-                begin
-                by:= t div 2; bx:= i div 2;
-                end;
-            if ((Land[t, i] and lfBasic) <> 0) and (((LandPixels[by,bx] and AMask) shr AShift) = 255) and (not disableLandBack) then
-                begin
-                inc(cnt);
-                LandPixels[by, bx]:= LandBackPixel(i, t)
-                end
-            else if ((Land[t, i] and lfObject) <> 0) or (((LandPixels[by,bx] and AMask) shr AShift) < 255) then
-                LandPixels[by, bx]:= 0
-            end;
-FillLandCircleLinesBG:= cnt;
-end;
-
-procedure FillLandCircleLinesEBC(x, y, dx, dy: LongInt);
-var i, t: LongInt;
-begin
-t:= y + dy;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= ExplosionBorderColor
-            else
-                LandPixels[t div 2, i div 2]:= ExplosionBorderColor;
-
-            Land[t, i]:= (Land[t, i] or lfDamaged) and not lfIce;
-            //Despeckle(i, t);
-            LandDirty[t div 32, i div 32]:= 1;
-            end;
-
-t:= y - dy;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= ExplosionBorderColor
-            else
-                LandPixels[t div 2, i div 2]:= ExplosionBorderColor;
-            Land[t, i]:= (Land[t, i] or lfDamaged) and not lfIce;
-            //Despeckle(i, t);
-            LandDirty[t div 32, i div 32]:= 1;
-            end;
-
-t:= y + dx;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= ExplosionBorderColor
-            else
-               LandPixels[t div 2, i div 2]:= ExplosionBorderColor;
-
-            Land[t, i]:= (Land[t, i] or lfDamaged) and not lfIce;
-            //Despeckle(i, t);
-            LandDirty[t div 32, i div 32]:= 1;
-            end;
-
-t:= y - dx;
-if (t and LAND_HEIGHT_MASK) = 0 then
-    for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do
-        if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then
-            begin
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[t, i]:= ExplosionBorderColor
-            else
-                LandPixels[t div 2, i div 2]:= ExplosionBorderColor;
-
-            Land[t, i]:= (Land[t, i] or lfDamaged) and not lfIce;
-            //Despeckle(i, y - dy);
-            LandDirty[t div 32, i div 32]:= 1;
-            end;
+UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true);
 end;
 
 function DrawExplosion(X, Y, Radius: LongInt): Longword;
-var dx, dy, ty, tx, d: LongInt;
-    cnt: Longword;
+var
+    tx, ty, dx, dy: Longint;
 begin
-
-// draw background land texture
-    begin
-    cnt:= 0;
-    dx:= 0;
-    dy:= Radius;
-    d:= 3 - 2 * Radius;
-
-    while (dx < dy) do
-        begin
-        inc(cnt, FillLandCircleLinesBG(x, y, dx, dy));
-        if (d < 0) then
-            d:= d + 4 * dx + 6
-        else
-            begin
-            d:= d + 4 * (dx - dy) + 10;
-            dec(dy)
-            end;
-        inc(dx)
-        end;
-    if (dx = dy) then
-        inc(cnt, FillLandCircleLinesBG(x, y, dx, dy));
-    end;
-
-// draw a hole in land
-if Radius > 20 then
-    begin
-    dx:= 0;
-    dy:= Radius - 15;
-    d:= 3 - 2 * dy;
-
-    while (dx < dy) do
-        begin
-        FillLandCircleLines0(x, y, dx, dy);
-        if (d < 0) then
-            d:= d + 4 * dx + 6
-        else
-            begin
-            d:= d + 4 * (dx - dy) + 10;
-            dec(dy)
-            end;
-        inc(dx)
-        end;
-    if (dx = dy) then
-        FillLandCircleLines0(x, y, dx, dy);
-    end;
-
-  // FillRoundInLand after erasing land pixels to allow Land 0 check for mask.png to function
+    DrawExplosion := FillRoundInLand(x, y, Radius, backgroundPixel);
+    if Radius > 20 then
+        FillRoundInLand(x, y, Radius - 15, nullPixel);
     FillRoundInLand(X, Y, Radius, 0);
-
-// draw explosion border
-    begin
-    inc(Radius, 4);
-    dx:= 0;
-    dy:= Radius;
-    d:= 3 - 2 * Radius;
-    while (dx < dy) do
-        begin
-        FillLandCircleLinesEBC(x, y, dx, dy);
-        if (d < 0) then
-            d:= d + 4 * dx + 6
-        else
-            begin
-            d:= d + 4 * (dx - dy) + 10;
-            dec(dy)
-            end;
-        inc(dx)
-        end;
-    if (dx = dy) then
-        FillLandCircleLinesEBC(x, y, dx, dy);
-    end;
-
-tx:= Max(X - Radius - 1, 0);
-dx:= Min(X + Radius + 1, LAND_WIDTH) - tx;
-ty:= Max(Y - Radius - 1, 0);
-dy:= Min(Y + Radius + 1, LAND_HEIGHT) - ty;
-UpdateLandTexture(tx, dx, ty, dy, false);
-DrawExplosion:= cnt
+    FillRoundInLand(x, y, Radius + 4, ebcPixel);
+    tx:= Max(X - Radius - 5, 0);
+    dx:= Min(X + Radius + 5, LAND_WIDTH) - tx;
+    ty:= Max(Y - Radius - 5, 0);
+    dy:= Min(Y + Radius + 5, LAND_HEIGHT) - ty;
+    UpdateLandTexture(tx, dx, ty, dy, false);
 end;
 
 procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte);
@@ -701,6 +440,33 @@
 UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false)
 end;
 
+
+
+procedure DrawExplosionBorder(X, Y, dx, dy:hwFloat;  despeckle : Boolean);
+var
+    t, tx, ty :Longint;
+begin
+for t:= 0 to 7 do
+    begin
+    X:= X + dX;
+    Y:= Y + dY;
+    tx:= hwRound(X);
+    ty:= hwRound(Y);
+    if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and (((Land[ty, tx] and lfBasic) <> 0)
+    or ((Land[ty, tx] and lfObject) <> 0)) then
+        begin
+        Land[ty, tx]:= (Land[ty, tx] or lfDamaged) and not lfIce;
+        if despeckle then
+            LandDirty[ty div 32, tx div 32]:= 1;
+        if (cReducedQuality and rqBlurryLand) = 0 then
+            LandPixels[ty, tx]:= ExplosionBorderColor
+        else
+            LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor
+        end
+    end;
+end;
+
+
 //
 //  - (dX, dY) - direction, vector of length = 0.5
 //
@@ -753,24 +519,7 @@
     begin
     X:= nx - dX8;
     Y:= ny - dY8;
-    for t:= 0 to 7 do
-        begin
-        X:= X + dX;
-        Y:= Y + dY;
-        tx:= hwRound(X);
-        ty:= hwRound(Y);
-        if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and (((Land[ty, tx] and lfBasic) <> 0)
-        or ((Land[ty, tx] and lfObject) <> 0)) then
-            begin
-            Land[ty, tx]:= (Land[ty, tx] or lfDamaged) and not lfIce;
-            if despeckle then
-                LandDirty[ty div 32, tx div 32]:= 1;
-            if (cReducedQuality and rqBlurryLand) = 0 then
-                LandPixels[ty, tx]:= ExplosionBorderColor
-            else
-                LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor
-            end
-        end;
+    DrawExplosionBorder(X, Y, dx, dy, despeckle);
     X:= nx;
     Y:= ny;
     for t:= 0 to ticks do
@@ -796,24 +545,7 @@
             Land[ty, tx]:= 0;
             end
         end;
-    for t:= 0 to 7 do
-    begin
-    X:= X + dX;
-    Y:= Y + dY;
-    tx:= hwRound(X);
-    ty:= hwRound(Y);
-    if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and (((Land[ty, tx] and lfBasic) <> 0)
-    or ((Land[ty, tx] and lfObject) <> 0)) then
-        begin
-        Land[ty, tx]:=( Land[ty, tx] or lfDamaged) and not lfIce;
-        if despeckle then
-            LandDirty[ty div 32, tx div 32]:= 1;
-        if (cReducedQuality and rqBlurryLand) = 0 then
-            LandPixels[ty, tx]:= ExplosionBorderColor
-        else
-            LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor
-        end
-        end;
+    DrawExplosionBorder(X, Y, dx, dy, despeckle);
     nx:= nx - dY;
     ny:= ny + dX;
     end;
@@ -957,7 +689,7 @@
         yy:= Y div 2;
     end;
 
-    pixelsweep:= ((Land[Y, X] and $FF00) = 0) and (LandPixels[yy, xx] <> 0);
+    pixelsweep:= (Land[Y, X] <= lfAllObjMask) and (LandPixels[yy, xx] <> 0);
     if (((Land[Y, X] and lfDamaged) <> 0) and ((Land[Y, X] and lfIndestructible) = 0)) or pixelsweep then
     begin
         c:= 0;
--- a/hedgewars/uLandObjects.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLandObjects.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,7 +27,9 @@
 procedure LoadThemeConfig;
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline;
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; extraFlags: Word);
+procedure BlitImageUsingMask(cpX, cpY: Longword;  Image, Mask: PSDL_Surface);
 procedure AddOnLandObjects(Surface: PSDL_Surface);
+procedure SetLand(var LandWord: Word; Pixel: LongWord); inline;
 
 implementation
 uses uStore, uConsts, uConsole, uRandom, uSound, GLunit
@@ -42,7 +44,7 @@
 type TRectsArray = array[0..MaxRects] of TSDL_Rect;
      PRectArray = ^TRectsArray;
      TThemeObject = record
-                     Surf: PSDL_Surface;
+                     Surf, Mask: PSDL_Surface;
                      inland: TSDL_Rect;
                      outland: array[0..Pred(MAXOBJECTRECTS)] of TSDL_Rect;
                      rectcnt: Longword;
@@ -68,6 +70,26 @@
     ThemeObjects: TThemeObjects;
     SprayObjects: TSprayObjects;
 
+procedure SetLand(var LandWord: Word; Pixel: LongWord); inline;
+begin
+    // this an if instead of masking colours to avoid confusing map creators
+    if ((AMask and Pixel) = 0) then
+        LandWord:= 0
+    else if Pixel = $FFFFFFFF then                  // white
+        LandWord:= lfObject
+    else if Pixel = AMask then                      // black
+        begin
+        LandWord:= lfBasic;
+        disableLandBack:= false
+        end
+    else if Pixel = (AMask or RMask) then           // red
+        LandWord:= lfIndestructible
+    else if Pixel = (AMask or BMask) then           // blue
+        LandWord:= lfObject or lfIce
+    else if Pixel = (AMask or GMask) then           // green
+        LandWord:= lfObject or lfBouncy
+end;
+
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline;
 begin
     BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, 0);
@@ -105,7 +127,7 @@
                 if LandPixels[(cpY + y) div 2, (cpX + x) div 2] = 0 then 
                     LandPixels[(cpY + y) div 2, (cpX + x) div 2]:= p^[x];
 
-            if ((Land[cpY + y, cpX + x] and $FF00) = 0) and ((p^[x] and AMask) <> 0) then
+            if (Land[cpY + y, cpX + x] <= lfAllObjMask) and ((p^[x] and AMask) <> 0) then
                 begin
                 Land[cpY + y, cpX + x]:= lfObject;
                 Land[cpY + y, cpX + x]:= Land[cpY + y, cpX + x] or extraFlags
@@ -119,6 +141,47 @@
 WriteLnToConsole(msgOK)
 end;
 
+procedure BlitImageUsingMask(cpX, cpY: Longword;  Image, Mask: PSDL_Surface);
+var p, mp: PLongwordArray;
+    x, y: Longword;
+    bpp: LongInt;
+begin
+WriteToConsole('Generating collision info... ');
+
+if SDL_MustLock(Image) then
+    SDLTry(SDL_LockSurface(Image) >= 0, true);
+
+bpp:= Image^.format^.BytesPerPixel;
+TryDo(bpp = 4, 'Land object should be 32bit', true);
+
+p:= Image^.pixels;
+mp:= Mask^.pixels;
+for y:= 0 to Pred(Image^.h) do
+    begin
+    for x:= 0 to Pred(Image^.w) do
+        begin
+        if (cReducedQuality and rqBlurryLand) = 0 then
+            begin
+            if (LandPixels[cpY + y, cpX + x] = 0)
+            or (((p^[x] and AMask) <> 0) and (((LandPixels[cpY + y, cpX + x] and AMask) shr AShift) < 255)) then
+                LandPixels[cpY + y, cpX + x]:= p^[x];
+            end
+        else
+            if LandPixels[(cpY + y) div 2, (cpX + x) div 2] = 0 then 
+                LandPixels[(cpY + y) div 2, (cpX + x) div 2]:= p^[x];
+
+        if (Land[cpY + y, cpX + x] <= lfAllObjMask) or (Land[cpY + y, cpX + x] and lfObject <> 0)  then
+            SetLand(Land[cpY + y, cpX + x], mp^[x]);
+        end;
+    p:= @(p^[Image^.pitch shr 2]);
+    mp:= @(mp^[Mask^.pitch shr 2])
+    end;
+
+if SDL_MustLock(Image) then
+    SDL_UnlockSurface(Image);
+WriteLnToConsole(msgOK)
+end;
+
 procedure AddRect(x1, y1, w1, h1: LongInt);
 begin
 with Rects^[RectCount] do
@@ -326,7 +389,9 @@
     if bRes then
         begin
         i:= getrandom(cnt);
-        BlitImageAndGenerateCollisionInfo(ar[i].x, ar[i].y, 0, Obj.Surf);
+        if Obj.Mask <> nil then
+             BlitImageUsingMask(ar[i].x, ar[i].y, Obj.Surf, Obj.Mask)
+        else BlitImageAndGenerateCollisionInfo(ar[i].x, ar[i].y, 0, Obj.Surf);
         AddRect(ar[i].x, ar[i].y, Width, Height);
         dec(Maxcnt)
         end
@@ -555,9 +620,10 @@
         with ThemeObjects.objs[Pred(ThemeObjects.Count)] do
             begin
             i:= Pos(',', s);
-            Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifTransparent or ifIgnoreCaps);
+            Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifTransparent or ifIgnoreCaps or ifCritical);
             Width:= Surf^.w;
             Height:= Surf^.h;
+            Mask:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i)))+'_mask', ifTransparent or ifIgnoreCaps);
             Delete(s, 1, i);
             i:= Pos(',', s);
             Maxcnt:= StrToInt(Trim(Copy(s, 1, Pred(i))));
--- a/hedgewars/uLandPainted.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLandPainted.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uLandTemplates.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLandTemplates.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -1815,7 +1815,7 @@
         FillPointsCount: Succ(High(Template0FPoints));
         BezierizeCount: 3;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1826,7 +1826,7 @@
         FillPointsCount: Succ(High(Template1FPoints));
         BezierizeCount: 3;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1837,7 +1837,7 @@
         FillPointsCount: Succ(High(Template2FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1848,7 +1848,7 @@
         FillPointsCount: Succ(High(Template3FPoints));
         BezierizeCount: 3;
         RandPassesCount: 4;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1859,7 +1859,7 @@
         FillPointsCount: Succ(High(Template4FPoints));
         BezierizeCount: 3;
         RandPassesCount: 4;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1870,7 +1870,7 @@
         FillPointsCount: Succ(High(Template5FPoints));
         BezierizeCount: 2;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1881,7 +1881,7 @@
         FillPointsCount: Succ(High(Template6FPoints));
         BezierizeCount: 2;
         RandPassesCount: 5;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1892,7 +1892,7 @@
         FillPointsCount: Succ(High(Template7FPoints));
         BezierizeCount: 4;
         RandPassesCount: 4;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1903,7 +1903,7 @@
         FillPointsCount: Succ(High(Template8FPoints));
         BezierizeCount: 2;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1914,7 +1914,7 @@
         FillPointsCount: Succ(High(Template9FPoints));
         BezierizeCount: 1;
         RandPassesCount: 5;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1925,7 +1925,7 @@
         FillPointsCount: Succ(High(Template10FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1936,7 +1936,7 @@
         FillPointsCount: Succ(High(Template11FPoints));
         BezierizeCount: 1;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1947,7 +1947,7 @@
         FillPointsCount: Succ(High(Template12FPoints));
         BezierizeCount: 3;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1958,7 +1958,7 @@
         FillPointsCount: Succ(High(Template13FPoints));
         BezierizeCount: 3;
         RandPassesCount: 5;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1969,7 +1969,7 @@
         FillPointsCount: Succ(High(Template14FPoints));
         BezierizeCount: 3;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1980,7 +1980,7 @@
         FillPointsCount: Succ(High(Template15FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -1991,7 +1991,7 @@
         FillPointsCount: Succ(High(Template16FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -2002,7 +2002,7 @@
         FillPointsCount: Succ(High(Template17FPoints));
         BezierizeCount: 3;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 2848;
+        TemplateHeight: 1424; TemplateWidth: 3072;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 18;
@@ -2013,7 +2013,7 @@
         FillPointsCount: Succ(High(Template18FPoints));
         BezierizeCount: 3;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2024,7 +2024,7 @@
         FillPointsCount: Succ(High(Template19FPoints));
         BezierizeCount: 3;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2035,7 +2035,7 @@
         FillPointsCount: Succ(High(Template20FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2046,7 +2046,7 @@
         FillPointsCount: Succ(High(Template21FPoints));
         BezierizeCount: 3;
         RandPassesCount: 4;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2057,7 +2057,7 @@
         FillPointsCount: Succ(High(Template22FPoints));
         BezierizeCount: 3;
         RandPassesCount: 4;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2068,7 +2068,7 @@
         FillPointsCount: Succ(High(Template23FPoints));
         BezierizeCount: 2;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2079,7 +2079,7 @@
         FillPointsCount: Succ(High(Template24FPoints));
         BezierizeCount: 2;
         RandPassesCount: 5;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2090,7 +2090,7 @@
         FillPointsCount: Succ(High(Template25FPoints));
         BezierizeCount: 4;
         RandPassesCount: 4;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2101,7 +2101,7 @@
         FillPointsCount: Succ(High(Template26FPoints));
         BezierizeCount: 2;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2112,7 +2112,7 @@
         FillPointsCount: Succ(High(Template27FPoints));
         BezierizeCount: 1;
         RandPassesCount: 5;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2123,7 +2123,7 @@
         FillPointsCount: Succ(High(Template28FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2134,7 +2134,7 @@
         FillPointsCount: Succ(High(Template29FPoints));
         BezierizeCount: 1;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2145,7 +2145,7 @@
         FillPointsCount: Succ(High(Template30FPoints));
         BezierizeCount: 3;
         RandPassesCount: 8;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2156,7 +2156,7 @@
         FillPointsCount: Succ(High(Template31FPoints));
         BezierizeCount: 3;
         RandPassesCount: 5;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2167,7 +2167,7 @@
         FillPointsCount: Succ(High(Template32FPoints));
         BezierizeCount: 3;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2178,7 +2178,7 @@
         FillPointsCount: Succ(High(Template33FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2189,7 +2189,7 @@
         FillPointsCount: Succ(High(Template34FPoints));
         BezierizeCount: 2;
         RandPassesCount: 6;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
@@ -2200,7 +2200,7 @@
         FillPointsCount: Succ(High(Template35FPoints));
         BezierizeCount: 3;
         RandPassesCount: 7;
-        TemplateHeight: 1424; TemplateWidth: 3900;
+        TemplateHeight: 1424; TemplateWidth: 4096;
         canMirror: true; canFlip: false; isNegative: false; canInvert: false;
         hasGirders: true;
         MaxHedgeHogs: 36;
--- a/hedgewars/uLandTexture.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLandTexture.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uLocale.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uLocale.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uMisc.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uMisc.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -38,8 +38,7 @@
 
 implementation
 uses SysUtils, uVariables, uUtils
-     {$IFDEF PNG_SCREENSHOTS}, PNGh, png {$ENDIF}
-     {$IFNDEF USE_SDLTHREADS} {$IFDEF UNIX}, cthreads{$ENDIF} {$ENDIF};
+     {$IFDEF PNG_SCREENSHOTS}, PNGh, png {$ENDIF};
 
 type PScreenshot = ^TScreenshot;
      TScreenshot = record
@@ -64,7 +63,7 @@
 
 {$IFDEF PNG_SCREENSHOTS}
 // this funtion will be executed in separate thread
-function SaveScreenshot(screenshot: pointer): PtrInt;
+function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export;
 var i: LongInt;
     png_ptr: ^png_struct;
     info_ptr: ^png_info;
@@ -119,7 +118,7 @@
 {$ELSE} // no PNG_SCREENSHOTS
 
 // this funtion will be executed in separate thread
-function SaveScreenshot(screenshot: pointer): PtrInt;
+function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export;
 var f: file;
     // Windows Bitmap Header
     head: array[0..53] of Byte = (
@@ -262,11 +261,7 @@
 image^.size:= size;
 image^.buffer:= p;
 
-{$IFDEF USE_SDLTHREADS}
-SDL_CreateThread(@SaveScreenshot{$IFDEF SDL13}, nil{$ENDIF}, image);
-{$ELSE}
-BeginThread(@SaveScreenshot, image);
-{$ENDIF}
+SDL_CreateThread(@SaveScreenshot{$IFDEF SDL13}, 'snapshot'{$ENDIF}, image);
 MakeScreenshot:= true; // possibly it is not true but we will not wait for thread to terminate
 end;
 
--- a/hedgewars/uPhysFSLayer.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uPhysFSLayer.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -3,24 +3,12 @@
 interface
 uses SDLh, LuaPas;
 
-const PhysfsLibName = {$IFDEF PHYSFS_INTERNAL}'libhw_physfs'{$ELSE}'libphysfs'{$ENDIF};
+const PhysfsLibName = {$IFDEF PHYSFS_INTERNAL}'libhwphysfs'{$ELSE}'libphysfs'{$ENDIF};
 const PhyslayerLibName = 'libphyslayer';
 
 {$IFNDEF WIN32}
     {$linklib physfs}
     {$linklib physlayer}
-
-    {statically linking physfs brings IOKit dependency on OSX and
-     stdc++ under linux 32 bit because divdi3 is not defined}
-    {$IFDEF PHYSFS_INTERNAL}
-        {$IFDEF DARWIN}
-            {$linkframework IOKit}
-        {$ELSE}
-            {$IFDEF CPU32}
-                {$linklib stdc++}
-            {$ENDIF}
-        {$ENDIF}
-    {$ENDIF}
 {$ENDIF}
 
 procedure initModule;
@@ -43,6 +31,7 @@
 
 function  physfsReader(L: Plua_State; f: PFSFile; sz: Psize_t) : PChar; cdecl; external PhyslayerLibName;
 procedure physfsReaderSetBuffer(buf: pointer); cdecl; external PhyslayerLibName;
+procedure hedgewarsMountPackage(filename: PChar); cdecl; external PhyslayerLibName;
 
 implementation
 uses uUtils, uVariables, sysutils;
--- a/hedgewars/uRandom.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uRandom.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@
 interface
 uses uFloat;
 
-procedure SetRandomSeed(Seed: shortstring); // Sets the seed that should be used for generating pseudo-random values.
+procedure SetRandomSeed(Seed: shortstring; dropAdditionalPart: boolean); // Sets the seed that should be used for generating pseudo-random values.
 function  GetRandomf: hwFloat; overload; // Returns a pseudo-random hwFloat.
 function  GetRandom(m: LongWord): LongWord; overload; inline; // Returns a positive pseudo-random integer smaller than m.
 procedure AddRandomness(r: LongWord); inline;
@@ -59,18 +59,24 @@
 GetNext:= cirbuf[n]
 end;
 
-procedure SetRandomSeed(Seed: shortstring);
-var i: Longword;
+procedure SetRandomSeed(Seed: shortstring; dropAdditionalPart: boolean);
+var i, t, l: Longword;
 begin
 n:= 54;
 
 if Length(Seed) > 54 then
     Seed:= copy(Seed, 1, 54); // not 55 to ensure we have odd numbers in cirbuf
 
-for i:= 0 to Pred(Length(Seed)) do
-    cirbuf[i]:= byte(Seed[i + 1]);
+t:= 0;
+l:= Length(Seed);
 
-for i:= Length(Seed) to 54 do
+while (t < l) and ((not dropAdditionalPart) or (Seed[t + 1] <> '|')) do
+    begin
+    cirbuf[t]:= byte(Seed[t + 1]);
+    inc(t)
+    end;
+
+for i:= t to 54 do
     cirbuf[i]:= $A98765 + 68; // odd number
 
 for i:= 0 to 1023 do
--- a/hedgewars/uRender.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uRender.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uRenderUtils.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uRenderUtils.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uScript.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uScript.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -54,6 +54,7 @@
 
 implementation
 {$IFDEF USE_LUA_SCRIPT}
+
 uses LuaPas,
     uConsole,
     uConsts,
@@ -83,7 +84,8 @@
     SDLh,
     SysUtils, 
     uIO,
-    uPhysFSLayer
+    uPhysFSLayer,
+    typinfo
     ;
 
 var luaState : Plua_State;
@@ -1285,6 +1287,64 @@
     lc_endgame:= 0
 end;
 
+function lc_sendstat(L : Plua_State) : LongInt; Cdecl;
+var statInfo : TStatInfoType;
+var i : LongInt;
+var color : shortstring;
+begin
+	statInfo := TStatInfoType(GetEnumValue(TypeInfo(TStatInfoType),lua_tostring(L, 1)));
+	if (lua_gettop(L) <> 2) and ((statInfo <> siPlayerKills) 
+			and (statInfo <> siClanHealth)) then
+        begin
+        LuaError('Lua: Wrong number of parameters passed to SendStat! Expected 2 parameters.');
+        end
+    else if (lua_gettop(L) <> 3) and ((statInfo = siPlayerKills) 
+			or (statInfo = siClanHealth)) then
+		begin
+        LuaError('Lua: Wrong number of parameters passed to SendStat! Expected 3 parameters.');
+        end
+    else
+		begin
+		if ((statInfo = siPlayerKills) or (statInfo = siClanHealth)) then
+			begin
+			// 3: team name
+			for i:= 0 to Pred(TeamsCount) do
+				begin
+				with TeamsArray[i]^ do
+					begin
+						if TeamName = lua_tostring(L, 3) then
+							begin
+							color := uUtils.IntToStr(Clan^.Color);
+							Break;
+							end
+					end				
+				end;
+			if (statInfo = siPlayerKills) then
+				begin
+					SendStat(siPlayerKills, color + ' ' +
+						lua_tostring(L, 2) + ' ' + TeamsArray[i]^.TeamName);
+				end
+			else if (statInfo = siClanHealth) then
+				begin
+					SendStat(siClanHealth, color + ' ' +
+						lua_tostring(L, 2));
+				end
+			end
+		else
+			begin
+			SendStat(statInfo,lua_tostring(L, 2));
+			end;
+		end;
+    lc_sendstat:= 0
+end;
+
+function lc_sendhealthstatsoff(L : Plua_State) : LongInt; Cdecl;
+begin
+    L:= L; // avoid compiler hint
+    uStats.SendHealthStatsOn := false;
+    lc_sendhealthstatsoff:= 0
+end;
+
 function lc_findplace(L : Plua_State) : LongInt; Cdecl;
 var gear: PGear;
     fall: boolean;
@@ -2039,7 +2099,8 @@
     // call the script file
     lua_pcall(luaState, 0, 0, 0);
     ScriptLoaded:= true
-    end
+    end;
+    hedgewarsMountPackage(Str2PChar(copy(s, 1, length(s)-4)+'.hwp'));
 end;
 
 procedure SetGlobals;
@@ -2261,6 +2322,7 @@
 ScriptSetInteger('gfMultiWeapon', gfMultiWeapon);
 ScriptSetInteger('gfSolidLand', gfSolidLand);
 ScriptSetInteger('gfBorder', gfBorder);
+ScriptSetInteger('gfBottomBorder', gfBottomBorder);
 ScriptSetInteger('gfDivideTeams', gfDivideTeams);
 ScriptSetInteger('gfLowGravity', gfLowGravity);
 ScriptSetInteger('gfLaserSight', gfLaserSight);
@@ -2380,6 +2442,8 @@
 lua_register(luaState, _P'WriteLnToConsole', @lc_writelntoconsole);
 lua_register(luaState, _P'GetGearType', @lc_getgeartype);
 lua_register(luaState, _P'EndGame', @lc_endgame);
+lua_register(luaState, _P'SendStat', @lc_sendstat);
+lua_register(luaState, _P'SendHealthStatsOff', @lc_sendhealthstatsoff);
 lua_register(luaState, _P'FindPlace', @lc_findplace);
 lua_register(luaState, _P'SetGearPosition', @lc_setgearposition);
 lua_register(luaState, _P'GetGearPosition', @lc_getgearposition);
--- a/hedgewars/uSinTable.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uSinTable.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uSound.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uSound.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -155,7 +155,7 @@
             (FileName:               'Yessir.ogg'; Path: ptVoices),// sndYesSir
             (FileName:                'Laugh.ogg'; Path: ptVoices),// sndLaugh
             (FileName:            'Illgetyou.ogg'; Path: ptVoices),// sndIllGetYou
-            (FileName:          'JustYouWait.ogg'; Path: ptVoices),// sndJustYouWait
+            (FileName:          'Justyouwait.ogg'; Path: ptVoices),// sndJustyouwait
             (FileName:             'Incoming.ogg'; Path: ptVoices),// sndIncoming
             (FileName:               'Missed.ogg'; Path: ptVoices),// sndMissed
             (FileName:               'Stupid.ogg'; Path: ptVoices),// sndStupid
@@ -248,7 +248,10 @@
             (FileName:                 'bump.ogg'; Path: ptSounds),// sndBump
             (FileName:            'hogchant3.ogg'; Path: ptSounds),// sndResurrector
             (FileName:                'plane.ogg'; Path: ptSounds),// sndPlane
-            (FileName:               'TARDIS.ogg'; Path: ptSounds) // sndTardis
+            (FileName:               'TARDIS.ogg'; Path: ptSounds),// sndTardis
+            (FileName:    'frozen_hog_impact.ogg'; Path: ptSounds),// sndFrozenHogImpact
+            (FileName:             'ice_beam.ogg'; Path: ptSounds),// sndIceBeam
+            (FileName:           'hog_freeze.ogg'; Path: ptSounds) // sndHogFreeze
             );
 
 
--- a/hedgewars/uStats.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uStats.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -24,7 +24,8 @@
 
 var TotalRounds: LongInt;
     FinishedTurnsTotal: LongInt;
-
+    SendHealthStatsOn : boolean = true;
+    
 procedure initModule;
 procedure freeModule;
 
@@ -162,12 +163,13 @@
                 StepDamageRecv:= 0;
                 StepDamageGiven:= 0
                 end;
-
-for t:= 0 to Pred(ClansCount) do
-    with ClansArray[t]^ do
-        begin
-        SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
-        end;
+                
+if SendHealthStatsOn then
+	for t:= 0 to Pred(ClansCount) do
+		with ClansArray[t]^ do
+			begin
+			SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
+			end;
 
 Kills:= 0;
 KillsClan:= 0;
@@ -207,103 +209,104 @@
     maxTeamDamageName : shortstring;
     winnersClan : PClan;
 begin
-msd:= 0; msdhh:= nil;
-msk:= 0; mskhh:= nil;
-mskcnt:= 0;
-maxTeamKills := 0;
-maxTurnSkips := 0;
-maxTeamDamage := 0;
-winnersClan:= nil;
+if SendHealthStatsOn then
+	msd:= 0; msdhh:= nil;
+	msk:= 0; mskhh:= nil;
+	mskcnt:= 0;
+	maxTeamKills := 0;
+	maxTurnSkips := 0;
+	maxTeamDamage := 0;
+	winnersClan:= nil;
 
-for t:= 0 to Pred(TeamsCount) do
-    with TeamsArray[t]^ do
-    begin
-        if not ExtDriven then
-            SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
-        for i:= 0 to cMaxHHIndex do
-            begin
-            if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
-                begin
-                msdhh:= @Hedgehogs[i];
-                msd:= Hedgehogs[i].stats.MaxStepDamageGiven
-                end;
-            if Hedgehogs[i].stats.MaxStepKills >= msk then
-                if Hedgehogs[i].stats.MaxStepKills = msk then
-                    inc(mskcnt)
-                else
-                    begin
-                    mskcnt:= 1;
-                    mskhh:= @Hedgehogs[i];
-                    msk:= Hedgehogs[i].stats.MaxStepKills
-                    end;
-        end;
+	for t:= 0 to Pred(TeamsCount) do
+		with TeamsArray[t]^ do
+		begin
+			if not ExtDriven then
+				SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
+			for i:= 0 to cMaxHHIndex do
+				begin
+				if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
+					begin
+					msdhh:= @Hedgehogs[i];
+					msd:= Hedgehogs[i].stats.MaxStepDamageGiven
+					end;
+				if Hedgehogs[i].stats.MaxStepKills >= msk then
+					if Hedgehogs[i].stats.MaxStepKills = msk then
+						inc(mskcnt)
+					else
+						begin
+						mskcnt:= 1;
+						mskhh:= @Hedgehogs[i];
+						msk:= Hedgehogs[i].stats.MaxStepKills
+						end;
+			end;
 
-        { send player stats for winner teams }
-        if Clan^.ClanHealth > 0 then
-            begin
-            winnersClan:= Clan;
-            SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
-                IntToStr(stats.Kills) + ' ' + TeamName);
-        end;
+			{ send player stats for winner teams }
+			if Clan^.ClanHealth > 0 then
+				begin
+				winnersClan:= Clan;
+				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
+					IntToStr(stats.Kills) + ' ' + TeamName);
+			end;
 
-        { determine maximum values of TeamKills, TurnSkips, TeamDamage }
-        if stats.TeamKills > maxTeamKills then
-            begin
-            maxTeamKills := stats.TeamKills;
-            maxTeamKillsName := TeamName;
-        end;
-        if stats.TurnSkips > maxTurnSkips then
-            begin
-            maxTurnSkips := stats.TurnSkips;
-            maxTurnSkipsName := TeamName;
-        end;
-        if stats.TeamDamage > maxTeamDamage then
-            begin
-            maxTeamDamage := stats.TeamDamage;
-            maxTeamDamageName := TeamName;
-        end;
+			{ determine maximum values of TeamKills, TurnSkips, TeamDamage }
+			if stats.TeamKills > maxTeamKills then
+				begin
+				maxTeamKills := stats.TeamKills;
+				maxTeamKillsName := TeamName;
+			end;
+			if stats.TurnSkips > maxTurnSkips then
+				begin
+				maxTurnSkips := stats.TurnSkips;
+				maxTurnSkipsName := TeamName;
+			end;
+			if stats.TeamDamage > maxTeamDamage then
+				begin
+				maxTeamDamage := stats.TeamDamage;
+				maxTeamDamageName := TeamName;
+			end;
 
-    end;
+		end;
 
-{ now send player stats for loser teams }
-for t:= 0 to Pred(TeamsCount) do
-    begin
-    with TeamsArray[t]^ do
-        begin
-        if Clan^.ClanHealth = 0 then
-            begin
-            SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
-                IntToStr(stats.Kills) + ' ' + TeamName);
-        end;
-    end;
-end;
+	{ now send player stats for loser teams }
+	for t:= 0 to Pred(TeamsCount) do
+		begin
+		with TeamsArray[t]^ do
+			begin
+			if Clan^.ClanHealth = 0 then
+				begin
+				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
+					IntToStr(stats.Kills) + ' ' + TeamName);
+			end;
+		end;
+	end;
 
-if msdhh <> nil then
-    SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
-if mskcnt = 1 then
-    SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
+	if msdhh <> nil then
+		SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
+	if mskcnt = 1 then
+		SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
 
-if maxTeamKills > 1 then
-    SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
-if maxTurnSkips > 2 then
-    SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
-if maxTeamDamage > 30 then
-    SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
+	if maxTeamKills > 1 then
+		SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
+	if maxTurnSkips > 2 then
+		SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
+	if maxTeamDamage > 30 then
+		SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
 
-if KilledHHs > 0 then
-    SendStat(siKilledHHs, IntToStr(KilledHHs));
+	if KilledHHs > 0 then
+		SendStat(siKilledHHs, IntToStr(KilledHHs));
 
-// now to console
-if winnersClan <> nil then 
-    begin
-    WriteLnToConsole('WINNERS');
-    for t:= 0 to winnersClan^.TeamsNumber - 1 do
-        WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
-    end
-else
-    WriteLnToConsole('DRAW');
+	// now to console
+	if winnersClan <> nil then 
+		begin
+		WriteLnToConsole('WINNERS');
+		for t:= 0 to winnersClan^.TeamsNumber - 1 do
+			WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
+		end
+	else
+		WriteLnToConsole('DRAW');
 
-WriteLnToConsole('');
+	WriteLnToConsole('');
 end;
 
 procedure initModule;
--- a/hedgewars/uStore.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uStore.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
 
 unit uStore;
 interface
-uses {$IFNDEF PAS2C} StrUtils, {$ENDIF}SysUtils, uConsts, SDLh, GLunit, uTypes, uLandTexture, uCaptions, uChat;
+uses StrUtils, SysUtils, uConsts, SDLh, GLunit, uTypes, uLandTexture, uCaptions, uChat;
 
 procedure initModule;
 procedure freeModule;
@@ -575,19 +575,19 @@
     tmpsurf:= IMG_Load_RW(rwopsOpenRead(s), true);
 
     if tmpsurf = nil then
-    begin
+        begin
         OutError(msgFailed, (imageFlags and ifCritical) <> 0);
         exit;
-    end;
+        end;
 
     if ((imageFlags and ifIgnoreCaps) = 0) and ((tmpsurf^.w > MaxTextureSize) or (tmpsurf^.h > MaxTextureSize)) then
-    begin
+        begin
         SDL_FreeSurface(tmpsurf);
         OutError(msgFailedSize, ((not cOnlyStats) and ((imageFlags and ifCritical) <> 0)));
         // dummy surface to replace non-critical textures that failed to load due to their size
         LoadImage:= SDL_CreateRGBSurface(SDL_SWSURFACE, 2, 2, 32, RMask, GMask, BMask, AMask);
         exit;
-    end;
+        end;
 
     tmpsurf:= doSurfaceConversion(tmpsurf);
 
@@ -765,7 +765,7 @@
     AddFileLog('  |----- Number of auxiliary buffers: ' + inttostr(AuxBufNum));
 {$ENDIF}
     AddFileLog('  \----- Extensions: ');
-{$IFNDEF PAS2C}
+
     // fetch extentions and store them in string
     tmpstr := StrPas(PChar(glGetString(GL_EXTENSIONS)));
     tmpn := WordCount(tmpstr, [' ']);
@@ -783,10 +783,6 @@
         tmpint := tmpint + 3;
     end;
     until (tmpint > tmpn);
-{$ELSE}
-    // doesn't seem to print >256 chars
-    AddFileLogRaw(PChar(glGetString(GL_EXTENSIONS)));
-{$ENDIF}
     AddFileLog('');
 
     defaultFrame:= 0;
--- a/hedgewars/uTeams.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uTeams.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -98,7 +98,7 @@
                             if (Gear <> nil) then
                                 Gear^.State:= gstWinner;
             if Flawless then
-                AddVoice(sndFlawless, Teams[0]^.voicepack) 
+                AddVoice(sndFlawless, Teams[0]^.voicepack)
             else
                 AddVoice(sndVictory, Teams[0]^.voicepack);
 
@@ -112,7 +112,7 @@
 end;
 
 procedure SwitchHedgehog;
-var c, i, j: LongWord;
+var c, i, t: LongWord;
     PrevHH, PrevTeam : LongWord;
 begin
 TargetPoint.X:= NoPointX;
@@ -175,15 +175,7 @@
     if c = ClansCount then
         begin
         if not PlacingHogs then
-            begin
             inc(TotalRounds);
-            for i:= 0 to Pred(TeamsCount) do
-                with TeamsArray[i]^ do
-                    for j:= 0 to Pred(HedgehogsNumber) do
-                        with Hedgehogs[j] do
-                            if Effects[heFrozen] > 255 then
-                                Effects[heFrozen]:= max(255,Effects[heFrozen]-50000)
-            end;
         c:= 0
         end;
 
@@ -198,11 +190,26 @@
                 PrevHH:= CurrHedgehog mod HedgehogsNumber; // prevent infinite loop when CurrHedgehog = 7, but HedgehogsNumber < 8 (team is destroyed before its first turn)
                 repeat
                     CurrHedgehog:= Succ(CurrHedgehog) mod HedgehogsNumber;
-                until ((Hedgehogs[CurrHedgehog].Gear <> nil) and (Hedgehogs[CurrHedgehog].Effects[heFrozen] = 0)) or (CurrHedgehog = PrevHH)
+                until ((Hedgehogs[CurrHedgehog].Gear <> nil) and (Hedgehogs[CurrHedgehog].Effects[heFrozen] < 256)) or (CurrHedgehog = PrevHH)
                 end
-        until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) or (PrevTeam = CurrTeam) or ((CurrTeam = TagTeamIndex) and ((GameFlags and gfTagTeam) <> 0));
-        end
-until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] = 0);
+        until ((CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] < 256)) or (PrevTeam = CurrTeam) or ((CurrTeam = TagTeamIndex) and ((GameFlags and gfTagTeam) <> 0))
+        end;
+        if (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear = nil) or (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] > 255) then
+            begin
+            with CurrentTeam^.Clan^ do
+                for t:= 0 to Pred(TeamsNumber) do
+                    with Teams[t]^ do
+                        for i:= 0 to Pred(HedgehogsNumber) do
+                            with Hedgehogs[i] do
+                                begin
+                                if Effects[heFrozen] > 255 then Effects[heFrozen]:= max(255,Effects[heFrozen]-50000);
+                                if (Gear <> nil) and (Effects[heFrozen] < 256) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] > 255) then
+                                    CurrHedgehog:= i
+                                end;
+            if (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear = nil) or (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] > 255) then
+                inc(CurrentTeam^.Clan^.TurnNumber);
+            end
+until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen] < 256);
 
 SwitchCurrentHedgehog(@(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]));
 {$IFDEF USE_TOUCH_INTERFACE}
@@ -249,6 +256,13 @@
     end;
 
 inc(CurrentTeam^.Clan^.TurnNumber);
+with CurrentTeam^.Clan^ do
+    for t:= 0 to Pred(TeamsNumber) do
+        with Teams[t]^ do
+            for i:= 0 to Pred(HedgehogsNumber) do
+                with Hedgehogs[i] do
+                    if Effects[heFrozen] > 255 then
+                        Effects[heFrozen]:= max(255,Effects[heFrozen]-50000);
 
 CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^);
 if CurWeapon^.Count = 0 then
--- a/hedgewars/uTextures.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uTextures.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uTypes.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uTypes.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -140,7 +140,8 @@
             sndPoisonCough, sndPoisonMoan, sndBirdyLay, sndWhistle, sndBeeWater,
             sndPiano0, sndPiano1, sndPiano2, sndPiano3, sndPiano4, sndPiano5, sndPiano6, sndPiano7, sndPiano8,
             sndSkip, sndSineGun, sndOoff1, sndOoff2, sndOoff3, sndWhack,
-            sndComeonthen, sndParachute, sndBump, sndResurrector, sndPlane, sndTardis);
+            sndComeonthen, sndParachute, sndBump, sndResurrector, sndPlane, sndTardis, sndFrozenHogImpact, sndIceBeam, sndHogFreeze
+            );
 
     // Available ammo types to be used by hedgehogs
     TAmmoType  = (amNothing, amGrenade, amClusterBomb, amBazooka, amBee, amShotgun, amPickHammer, // 6
@@ -163,7 +164,8 @@
 
     TStatInfoType = (siGameResult, siMaxStepDamage, siMaxStepKills, siKilledHHs,
             siClanHealth, siTeamStats, siPlayerKills, siMaxTeamDamage,
-            siMaxTeamKills, siMaxTurnSkips );
+            siMaxTeamKills, siMaxTurnSkips, siCustomAchievement, siGraphTitle,
+            siPointType);
 
     // Various "emote" animations a hedgehog can do
     TWave = (waveRollup, waveSad, waveWave, waveHurrah, waveLemonade, waveShrug, waveJuggle);
@@ -220,48 +222,56 @@
     PClan     = ^TClan;
 
     TGearStepProcedure = procedure (Gear: PGear);
+// So, you're here looking for variables you can (ab)use to store some gear state?
+// Not all members of this structure are created equal. Comments below are my take on what can be used for what in the gear structure.
     TGear = record
-            NextGear, PrevGear: PGear;
-            Active: Boolean;
-            AdvBounce: Longword;
-            Invulnerable: Boolean;
-            RenderTimer: Boolean;
-            AmmoType : TAmmoType;
-            State : Longword;
-            X : hwFloat;
+// Don't ever override these.
+            NextGear, PrevGear: PGear;  // Linked list
+            Z: Longword;                // Z index. For rendering. Sets order in list
+            Active: Boolean;            // Is gear Active (running step code)
+            Kind: TGearType;
+            doStep: TGearStepProcedure; // Code the gear is running
+            AmmoType : TAmmoType;       // Ammo type associated with this kind of gear
+            RenderTimer: Boolean;       // Will visually display Timer if true
+            Target : TPoint;            // Gear target. Will render in uGearsRender unless a special case is added
+            AIHints: LongWord;          // hints for ai.
+            LastDamage: PHedgehog;      // Used to track damage source for stats
+            CollisionIndex: LongInt;    // Position in collision array
+            Message: LongWord;          // Game messages are stored here. See gm bitmasks in uConsts
+            uid: Longword;              // Lua use this to reference gears
+// Strongly recommended not to override these.  Will mess up generic operations like portaling
+            X : hwFloat;              // X/Y/dX/dY are position/velocity. People count on these having semi-normal values
             Y : hwFloat;
             dX: hwFloat;
             dY: hwFloat;
-            Target : TPoint;
-            Kind: TGearType;
-            Pos: Longword;
-            doStep: TGearStepProcedure;
-            Radius: LongInt;
-            Angle, Power : Longword;
-            DirAngle: real;
-            Timer : LongWord;
+            State : Longword;        // See gst bitmask values in uConsts
+            PortalCounter: LongWord; // Necessary to interrupt portal loops.  Not possible to avoid infinite loops without it.
+// Don't use these if you're using generic movement like doStepFallingGear and explosion shoves. Generally recommended not to use.
+            Radius: LongInt;     // Radius. If not using uCollisions, is usually used to indicate area of effect
+            CollisionMask: Word; // Masking off Land impact  FF7F for example ignores current hog and crates
+            AdvBounce: Longword; // Triggers 45° bounces. Is a counter to avoid edge cases
             Elasticity: hwFloat;
             Friction  : hwFloat;
-            Density   : hwFloat;
-            Message, MsgParam : Longword;
-            Hedgehog: PHedgehog;
+            Density   : hwFloat; // Density is kind of a mix of size and density. Impacts distance thrown, wind.
+            ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
+            nImpactSounds: Word; // count of ImpactSounds.
+// Don't use these if you want to take damage normally, otherwise health/damage are commonly used for other purposes
+            Invulnerable: Boolean;
             Health, Damage, Karma: LongInt;
-            CollisionIndex: LongInt;
-            Tag: LongInt;
-            Tex: PTexture;
-            Z: Longword;
-            CollisionMask: Word;
-            LinkedGear: PGear;
-            FlightTime: Longword;
-            uid: Longword;
-            ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
-            nImpactSounds: Word; // count of ImpactSounds
-            SoundChannel: LongInt;
-            PortalCounter: LongWord;  // Hopefully temporary, but avoids infinite portal loops in a guaranteed fashion.
-            AIHints: LongWord; // hints for ai. haha ^^^^^^ temporary, sure
-            IceTime: Longint; //time of ice beam with object some interaction  temporary
-            IceState: Longint; //state of ice gun temporary
-            LastDamage: PHedgehog;
+// DirAngle is a "real" - if you don't need it for rotation of sprite in uGearsRender, you can use it for any visual-only value
+            DirAngle: real;
+// These are frequently overridden to serve some other purpose
+            Pos: Longword;           // Commonly overridden.  Example use is posCase values in uConsts.
+            Angle, Power : Longword; // Used for hog aiming/firing.  Angle is rarely used as an Angle otherwise.
+            Timer : LongWord;        // Typically used for some sort of gear timer. Time to explosion, remaining fuel...
+            Tag: LongInt;            // Quite generic. Variety of uses.
+            FlightTime: Longword;    // Initially added for batting of hogs to determine homerun. Used for some firing delays
+            MsgParam: LongWord;      // Initially stored a set of messages. So usually gm values like Message. Frequently overriden
+// These are not used generically, but should probably be used for purpose intended. Definitely shouldn't override pointer type
+            Tex: PTexture;          // A texture created by the gear. Shouldn't use for anything but textures
+            LinkedGear: PGear;      // Used to track a related gear. Portal pairs for example.
+            Hedgehog: PHedgehog;    // set to CurrentHedgehog on gear creation
+            SoundChannel: LongInt;  // Used to track a sound the gear started
             end;
     TPGearArray = array of PGear;
     PGearArrayS = record
@@ -429,7 +439,7 @@
 
     TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
             sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync,
-            sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD, sidReady, 
+            sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD, sidReady,
             sidBounce1, sidBounce2, sidBounce3, sidBounce4, sidBounce5, sidBounce,
             sidMute);
 
@@ -440,8 +450,8 @@
 
     TGoalStrId = (gidCaption, gidSubCaption, gidForts, gidLowGravity, gidInvulnerable,
             gidVampiric, gidKarma, gidKing, gidPlaceHog, gidArtillery,
-            gidSolidLand, gidSharedAmmo, gidMineTimer, gidNoMineTimer, 
-            gidRandomMineTimer, gidDamageModifier, gidResetHealth, gidAISurvival, 
+            gidSolidLand, gidSharedAmmo, gidMineTimer, gidNoMineTimer,
+            gidRandomMineTimer, gidDamageModifier, gidResetHealth, gidAISurvival,
             gidInfAttack, gidResetWeps, gidPerHogAmmo, gidTagTeam);
 
     TLandArray = packed array of array of LongWord;
--- a/hedgewars/uUtils.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uUtils.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,14 +27,12 @@
 procedure SplitByChar(var a, b: shortstring; c: char);
 procedure SplitByChar(var a, b: ansistring; c: char);
 
-{$IFNDEF PAS2C}
 function  EnumToStr(const en : TGearType) : shortstring; overload;
 function  EnumToStr(const en : TVisualGearType) : shortstring; overload;
 function  EnumToStr(const en : TSound) : shortstring; overload;
 function  EnumToStr(const en : TAmmoType) : shortstring; overload;
 function  EnumToStr(const en : THogEffect) : shortstring; overload;
 function  EnumToStr(const en : TCapGroup) : shortstring; overload;
-{$ENDIF}
 
 function  Min(a, b: LongInt): LongInt; inline;
 function  Max(a, b: LongInt): LongInt; inline;
@@ -68,10 +66,8 @@
 function  GetLaunchX(at: TAmmoType; dir: LongInt; angle: LongInt): LongInt;
 function  GetLaunchY(at: TAmmoType; angle: LongInt): LongInt;
 
-{$IFNDEF PAS2C}
 procedure Write(var f: textfile; s: shortstring);
 procedure WriteLn(var f: textfile; s: shortstring);
-{$ENDIF}
 
 function  isPhone: Boolean; inline;
 function  getScreenDPI: Double; inline; //cdecl; external;
@@ -92,7 +88,7 @@
 
 
 implementation
-uses {$IFNDEF PAS2C}typinfo, {$ENDIF}Math, uConsts, uVariables, SysUtils;
+uses typinfo, Math, uConsts, uVariables, SysUtils;
 
 {$IFDEF DEBUGFILE}
 var f: textfile;
@@ -135,11 +131,11 @@
     end else b:= '';
 end;
 
-{$IFNDEF PAS2C}
 function EnumToStr(const en : TGearType) : shortstring; overload;
 begin
 EnumToStr:= GetEnumName(TypeInfo(TGearType), ord(en))
 end;
+
 function EnumToStr(const en : TVisualGearType) : shortstring; overload;
 begin
 EnumToStr:= GetEnumName(TypeInfo(TVisualGearType), ord(en))
@@ -164,7 +160,7 @@
 begin
 EnumToStr := GetEnumName(TypeInfo(TCapGroup), ord(en))
 end;
-{$ENDIF}
+
 
 function Min(a, b: LongInt): LongInt;
 begin
@@ -407,7 +403,6 @@
 CheckNoTeamOrHH:= (CurrentTeam = nil) or (CurrentHedgehog^.Gear = nil);
 end;
 
-{$IFNDEF PAS2C}
 procedure Write(var f: textfile; s: shortstring);
 begin
 system.write(f, s)
@@ -417,7 +412,7 @@
 begin
 system.writeln(f, s)
 end;
-{$ENDIF}
+
 
 // this function is just to determine whether we are running on a limited screen device
 function isPhone: Boolean; inline;
--- a/hedgewars/uVariables.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uVariables.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -1765,7 +1765,6 @@
             Ammo: (Propz: ammoprop_NoRoundEnd or
                           ammoprop_ForwMsgs or
                           ammoprop_AttackInMove or
-                          ammoprop_NoCrosshair or
                           ammoprop_DontHold or
                           ammoprop_Utility or
                           ammoprop_NeedUpDown or
@@ -2100,7 +2099,7 @@
             TimeAfterTurn: 3000;
             minAngle: 0;
             maxAngle: 0;
-            isDamaging: true;
+            isDamaging: false;
             SkipTurns: 0;
             PosCount: 1;
             PosSprite: sprWater;
@@ -2177,7 +2176,7 @@
                 AmmoType: amLandGun;
                 AttackVoice: sndNone;
                 Bounciness: 1000);
-            Slot: 2;
+            Slot: 6;
             TimeAfterTurn: 0;
             minAngle: 0;
             maxAngle: 0;
@@ -2202,11 +2201,11 @@
                 AmmoType: amIceGun;
                 AttackVoice: sndNone;
                 Bounciness: 1000);
-            Slot: 9;
+            Slot: 2;
             TimeAfterTurn: 0;
             minAngle: 0;
             maxAngle: 0;
-            isDamaging: true;
+            isDamaging: false;
             SkipTurns: 0;
             PosCount: 1;
             PosSprite: sprWater;
--- a/hedgewars/uVideoRec.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uVideoRec.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,9 +28,6 @@
 {$ELSE}
 
 {$IFNDEF WIN32}
-    {$linklib avcodec}
-    {$linklib avformat}
-    {$linklib avutil}
     {$linklib avwrapper}
 {$ENDIF}
 
--- a/hedgewars/uVisualGears.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uVisualGears.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uWorld.pas	Tue Apr 30 01:47:30 2013 +0200
+++ b/hedgewars/uWorld.pas	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -74,7 +74,7 @@
     timeTexture: PTexture;
     FPS: Longword;
     CountTicks: Longword;
-    prevPoint, prevTargetPoint: TPoint;
+    prevPoint{, prevTargetPoint}: TPoint;
     amSel: TAmmoType = amNothing;
     missionTex: PTexture;
     missionTimer: LongInt;
@@ -221,8 +221,8 @@
 uCursor.init();
 prevPoint.X:= 0;
 prevPoint.Y:= cScreenHeight div 2;
-prevTargetPoint.X:= 0;
-prevTargetPoint.Y:= 0;
+//prevTargetPoint.X:= 0;
+//prevTargetPoint.Y:= 0;
 WorldDx:=  -(LAND_WIDTH div 2) + cScreenWidth div 2;
 WorldDy:=  -(LAND_HEIGHT - (playHeight div 2)) + (cScreenHeight div 2);
 
@@ -642,7 +642,7 @@
             AMShiftX:= AMShiftTargetX;
             AMShiftY:= AMShiftTargetY;
             prevPoint:= CursorPoint;
-            prevTargetPoint:= TargetCursorPoint;
+            //prevTargetPoint:= TargetCursorPoint;
             AMState:= AMHidden;
             end;
     end;
@@ -1320,7 +1320,7 @@
         // draw health bars right border
         inc(r.x, cTeamHealthWidth + 2);
         r.w:= 3;
-        DrawTextureFromRect(TeamHealthBarWidth + 16, cScreenHeight + DrawHealthY + smallScreenOffset, @r, HealthTex);
+        DrawTextureFromRect(TeamHealthBarWidth + 15, cScreenHeight + DrawHealthY + smallScreenOffset, @r, HealthTex);
 
         if not highlight and (not hasGone) then
             for i:= 0 to cMaxHHIndex do
@@ -1357,7 +1357,7 @@
             // draw health bar
             r.w:= TeamHealthBarWidth + 1;
             r.h:= HealthTex^.h - 4;
-            DrawTextureFromRect(16, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, HealthTex);
+            DrawTextureFromRect(15, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, HealthTex);
             if not hasGone and (TeamHealth > 1) then
                 begin
                 Tint(Clan^.Color shl 8 or $FF);
--- a/misc/hedgewars.desktop	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-[Desktop Entry]
-Type=Application
-Version=1.0
-Encoding=UTF-8
-Name=Hedgewars
-GenericName=Fighting Hedgehogs
-GenericName[de]=Kämpfende Igel
-GenericName[es]=Batallas entre erizos
-GenericName[fr]=Bataille de hérissons
-GenericName[ko]=고슴도치 싸우기
-GenericName[ja]=ファイチングハリネズミ
-GenericName[it]=Ricci combattenti
-GenericName[pl]=Walczące jeże
-GenericName[pt]=Batalhas entre ouriços
-GenericName[ru]=Битвы ежей
-GenericName[sk]=Bojujúci ježkovia
-GenericName[cs]=Bojující ježci
-GenericName[sv]=Stridande igelkottar
-Icon=hedgewars.png
-Exec=hedgewars
-Terminal=false
-StartupNotify=false
-Categories=Application;Game;StrategyGame;
--- a/misc/liblua/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/misc/liblua/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -4,17 +4,23 @@
 
 if(WIN32)
     add_definitions(-DLUA_BUILD_AS_DLL)
-    add_library(lua SHARED ${lua_src})
-
-    set(LUA_LIBRARY lua.dll)
-
-    set_target_properties(lua PROPERTIES PREFIX "")
-    install(TARGETS lua RUNTIME DESTINATION ${target_library_install_dir})
 else(WIN32)
     add_definitions(-DLUA_USE_LINUX)
-    add_library(lua STATIC ${lua_src})
-    set(LUA_LIBRARY lua)
+    add_definitions(-fvisibility=default) #TODO: fixme
 endif(WIN32)
 
+add_library(lua ${lua_src})
+
+set_target_properties(lua PROPERTIES
+                          VERSION "5.1.4"
+                          SOVERSION 1
+                          OUTPUT_NAME ${lua_output_name})
+install(TARGETS lua RUNTIME DESTINATION ${target_binary_install_dir}
+                    LIBRARY DESTINATION ${target_library_install_dir}
+                    ARCHIVE DESTINATION ${target_library_install_dir})
+get_target_property(lua_fullpath lua LOCATION)
+
+set(LUA_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "Lua include dir" FORCE)
+set(LUA_LIBRARY ${lua_fullpath} CACHE STRING "Lua library" FORCE)
 
 
--- a/misc/libphysfs/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/misc/libphysfs/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -39,42 +39,21 @@
     # Fallback to older OS X on PowerPC to support wider range of systems...
     if(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
         add_definitions(-DMAC_OS_X_VERSION_MIN_REQUIRED=1020)
-        set(OTHER_LDFLAGS ${OTHER_LDFLAGS} " -mmacosx-version-min=10.2")
+        list(APPEND OTHER_LDFLAGS "-mmacosx-version-min=10.2")
     endif(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
 
     # Need these everywhere...
     add_definitions(-fno-common)
+    find_library(foundation_framework NAMES Foundation)
+    list(APPEND OTHER_LDFLAGS ${foundation_framework})
     find_library(iokit_framework NAMES IOKit)
     list(APPEND OTHER_LDFLAGS ${iokit_framework})
 endif(MACOSX)
 
 # Add some gcc-specific command lines.
 if(CMAKE_COMPILER_IS_GNUCC)
-    # Always build with debug symbols...you can strip it later.
-    add_definitions(-g -pipe -fsigned-char)
-
-    # Stupid BeOS generates warnings in the system headers.
-    if(NOT BEOS)
-        add_definitions(-Wall)
-    endif(NOT BEOS)
-
-    CHECK_C_SOURCE_COMPILES("
-        #if ((defined(__GNUC__)) && (__GNUC__ >= 4))
-        int main(int argc, char **argv) { int is_gcc4 = 1; return 0; }
-        #else
-        #error This is not gcc4.
-        #endif
-    " PHYSFS_IS_GCC4)
-
-    if(PHYSFS_IS_GCC4)
-        # Not supported on several operating systems at this time.
-        if(NOT SOLARIS AND NOT WINDOWS)
-            add_definitions(-fvisibility=hidden)
-        endif(NOT SOLARIS AND NOT WINDOWS)
-    endif(PHYSFS_IS_GCC4)
-
-    # Don't use -rpath.
-    set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE)
+    # Always build with debug symbols... you can strip it later.
+    add_definitions(-g -fsigned-char)
 endif(CMAKE_COMPILER_IS_GNUCC)
 
 if(CMAKE_C_COMPILER_ID STREQUAL "SunPro")
@@ -169,6 +148,7 @@
 if(WINDOWS)
     set(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
     set(PHYSFS_HAVE_THREAD_SUPPORT TRUE)
+    list(APPEND OTHER_LDFLAGS ${SDL_LIBRARY})
 endif(WINDOWS)
 
 if(NOT PHYSFS_HAVE_CDROM_SUPPORT)
@@ -241,50 +221,26 @@
 #endif(PHYSFS_ARCHIVE_ISO9660)
 
 
-##as needed by Hedgewars configuration
-if(WINDOWS)
-    option(PHYSFS_BUILD_STATIC "Build static library" FALSE)
-    option(PHYSFS_BUILD_SHARED "Build shared library" TRUE)
-    list(APPEND OTHER_LDFLAGS ${SDL_LIBRARY})
-else(WINDOWS)
-    option(PHYSFS_BUILD_STATIC "Build static library" TRUE)
-    option(PHYSFS_BUILD_SHARED "Build shared library" FALSE)
-endif(WINDOWS)
-
-if(PHYSFS_BUILD_STATIC)
-    add_library(physfs STATIC ${PHYSFS_SRCS})
-    set_target_properties(physfs PROPERTIES OUTPUT_NAME ${physfs_output_name}) ##
-    set(lib_prefix ${CMAKE_STATIC_LIBRARY_PREFIX}) ##
-    set(lib_suffix ${CMAKE_STATIC_LIBRARY_SUFFIX}) ##
-endif(PHYSFS_BUILD_STATIC)
-
-if(PHYSFS_BUILD_SHARED)
-    add_library(physfs SHARED ${PHYSFS_SRCS})
-    set_target_properties(physfs PROPERTIES VERSION ${PHYSFS_VERSION})
-    set_target_properties(physfs PROPERTIES SOVERSION ${PHYSFS_SOVERSION})
-    set_target_properties(physfs PROPERTIES OUTPUT_NAME ${physfs_output_name}) ##
-    target_link_libraries(physfs ${optional_library_libs} ${OTHER_LDFLAGS})
-    install(TARGETS physfs RUNTIME DESTINATION ${target_library_install_dir}) ##
-    set(lib_prefix ${CMAKE_SHARED_LIBRARY_PREFIX}) ##
-    set(lib_suffix ${CMAKE_SHARED_LIBRARY_SUFFIX}) ##
-endif(PHYSFS_BUILD_SHARED)
-
-if(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
-    message(FATAL "Both shared and static libraries are disabled!")
-endif(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC)
-
-# CMake FAQ says I need this...
-if(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
-    set_target_properties(physfs PROPERTIES CLEAN_DIRECT_OUTPUT 1)
-endif(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC)
+##Hedgewars modifications
+add_library(physfs ${PHYSFS_SRCS})
+set_target_properties(physfs PROPERTIES
+                          VERSION ${PHYSFS_VERSION}
+                          SOVERSION ${PHYSFS_SOVERSION}
+                          OUTPUT_NAME ${physfs_output_name})
+target_link_libraries(physfs ${optional_library_libs} ${OTHER_LDFLAGS})
+install(TARGETS physfs RUNTIME DESTINATION ${target_binary_install_dir}
+                       LIBRARY DESTINATION ${target_library_install_dir}
+                       ARCHIVE DESTINATION ${target_library_install_dir})
+get_target_property(physfs_fullpath physfs LOCATION)
 
 ## added standard variables emulating the FindPhysFS.cmake ones (FORCE or cmake won't pick 'em)
-set(PHYSFS_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/misc/libphysfs/ CACHE STRING "" FORCE)
-set(PHYSFS_LIBRARY ${LIBRARY_OUTPUT_PATH}/${lib_prefix}${physfs_output_name}${lib_suffix} CACHE STRING "" FORCE)
+set(PHYSFS_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "Physfs include dir" FORCE)
+set(PHYSFS_LIBRARY ${physfs_fullpath} CACHE STRING "Physfs library path" FORCE)
 
 
-## removed install, language bindings and test program
+## removed language bindings and test program
 ## simplified configuration output
+## merged shared and static library building
 
 #message(STATUS "PhysFS will be built with ${PHYSFS_FEATURES} support")
 
--- a/misc/libphysfs/platform_macosx.c	Tue Apr 30 01:47:30 2013 +0200
+++ b/misc/libphysfs/platform_macosx.c	Thu Jun 13 22:27:23 2013 +0200
@@ -29,6 +29,50 @@
 #include "physfs_internal.h"
 
 
+#if defined(__APPLE__)
+#if defined(TARGET_OS_MAC) && MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
+/* __eprintf shouldn't have been made visible from libstdc++, or anywhere, but
+   on Mac OS X 10.4 it was defined in libstdc++.6.0.3.dylib; so on that platform
+   we have to keep defining it to keep binary compatibility.
+   We can't just put the libgcc version in the export list, because that
+   doesn't work; once a symbol is marked as hidden, it stays that way.  */
+
+void __eprintf (const char *string, const char *expression,
+	        unsigned int line, const char *filename)
+{
+    fprintf(stderr, string, expression, line, filename);
+    fflush(stderr);
+    abort();
+}
+
+
+/* apparently libssp is missing from 10.4 SDK
+   code from http://wiki.osdev.org/GCC_Stack_Smashing_Protector */
+void * __stack_chk_guard = NULL;
+
+void __stack_chk_guard_setup()
+{
+    unsigned char * p;
+    p = (unsigned char *) &__stack_chk_guard;
+
+    /* If you have the ability to generate random numbers in your kernel then use them,
+       otherwise for 32-bit code: *p = 0x00000aff; */
+    *p = random();
+}
+
+void __attribute__((noreturn)) __stack_chk_fail()
+{
+    /* put your panic function or similar in here */
+    unsigned char * vid = (unsigned char *)0xB8000;
+    vid[1] = 7;
+    for(;;)
+    vid[0]++;
+}
+
+#endif
+#endif /* __APPLE__ */
+
+
 /* Wrap PHYSFS_Allocator in a CFAllocator... */
 static CFAllocatorRef cfallocator = NULL;
 
--- a/misc/libphyslayer/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/misc/libphyslayer/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -12,25 +12,17 @@
     hwpacksmounter.c
 )
 
-set(build_type STATIC)
-set(lib_prefix ${CMAKE_STATIC_LIBRARY_PREFIX})
-set(lib_suffix ${CMAKE_STATIC_LIBRARY_SUFFIX})
+#compiles and links actual library
+add_library (physlayer ${PHYSLAYER_SRCS})
+#TODO: find good VERSION and SOVERSION values
+target_link_libraries(physlayer ${SDL_LIBRARY} ${LUA_LIBRARY} ${PHYSFS_LIBRARY})
+install(TARGETS physlayer RUNTIME DESTINATION ${target_binary_install_dir}
+                          LIBRARY DESTINATION ${target_library_install_dir}
+                          ARCHIVE DESTINATION ${target_library_install_dir})
+get_target_property(physlayer_fullpath physlayer LOCATION)
 
-if(WIN32)
-    set(build_type SHARED)
-    set(lib_prefix ${CMAKE_SHARED_LIBRARY_PREFIX})
-    set(lib_suffix ${CMAKE_SHARED_LIBRARY_SUFFIX})
-endif(WIN32)
-
-#compiles and links actual library
-add_library (physlayer ${build_type} ${PHYSLAYER_SRCS})
-
-if(WIN32)
-    target_link_libraries(physlayer ${SDL_LIBRARY} ${LUA_LIBRARY} ${PHYSFS_LIBRARY})
-    install(TARGETS physlayer RUNTIME DESTINATION ${target_library_install_dir})
-endif()
 
 ## added standard variables (FORCE or cmake won't pick 'em)
-set(PHYSLAYER_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/misc/libphyslayer/ CACHE STRING "" FORCE)
-set(PHYSLAYER_LIBRARY ${LIBRARY_OUTPUT_PATH}/${lib_prefix}physlayer${lib_suffix} CACHE STRING "" FORCE)
+set(PHYSLAYER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "Physlayer include dir" FORCE)
+set(PHYSLAYER_LIBRARY ${physlayer_fullpath} CACHE STRING "Physlayer library" FORCE)
 
--- a/misc/libphyslayer/hwpacksmounter.c	Tue Apr 30 01:47:30 2013 +0200
+++ b/misc/libphyslayer/hwpacksmounter.c	Thu Jun 13 22:27:23 2013 +0200
@@ -33,3 +33,24 @@
 
     PHYSFS_freeList(filesList);
 }
+
+PHYSFS_DECL void hedgewarsMountPackage(char * fileName)
+{
+    int fileNameLength = strlen(fileName);
+    if (fileNameLength > 4)
+        if (strcmp(fileName + fileNameLength - 4, ".hwp") == 0)
+        {
+            const char * dir = PHYSFS_getRealDir(fileName);
+            if(dir)
+            {
+                char * fullPath = (char *)malloc(strlen(dir) + fileNameLength + 2);
+                strcpy(fullPath, dir);
+                strcat(fullPath, "/");
+                strcat(fullPath, fileName);
+
+                PHYSFS_mount(fullPath, NULL, 0);
+
+                free(fullPath);
+            }
+        }
+}
--- a/misc/libphyslayer/hwpacksmounter.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/misc/libphyslayer/hwpacksmounter.h	Thu Jun 13 22:27:23 2013 +0200
@@ -8,7 +8,7 @@
 #endif
 
 PHYSFS_DECL void hedgewarsMountPackages();
-
+PHYSFS_DECL void hedgewarsMountPackage(char * fileName);
 
 #ifdef __cplusplus
 }
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SDLActivity.java	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SDLActivity.java	Thu Jun 13 22:27:23 2013 +0200
@@ -2,7 +2,7 @@
  * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
  * Copyright (c) 2011-2012 Richard Deurwaarder <xeli@xelification.com>
  * Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
--- a/project_files/HedgewarsMobile/Classes/CreationChamber.m	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/HedgewarsMobile/Classes/CreationChamber.m	Thu Jun 13 22:27:23 2013 +0200
@@ -18,7 +18,7 @@
 
 
 #import "CreationChamber.h"
-
+#import "weapons.h"
 
 @implementation CreationChamber
 
--- a/project_files/HedgewarsMobile/Classes/HWUtils.m	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.m	Thu Jun 13 22:27:23 2013 +0200
@@ -22,7 +22,7 @@
 #import <sys/sysctl.h>
 #import <netinet/in.h>
 #import <SystemConfiguration/SCNetworkReachability.h>
-
+#import "hwconsts.h"
 
 static NSString *cachedModel = nil;
 static NSArray *cachedColors = nil;
--- a/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Thu Jun 13 22:27:23 2013 +0200
@@ -18,7 +18,7 @@
 
 
 #import "ServerProtocolNetwork.h"
-
+#import "hwconsts.h"
 
 #define BUFFER_SIZE 256
 
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Thu Jun 13 22:27:23 2013 +0200
@@ -11,7 +11,8 @@
 			isa = PBXAggregateTarget;
 			buildConfigurationList = 61799290114AE0CD00BA94A9 /* Build configuration list for PBXAggregateTarget "UpdateDataFolder" */;
 			buildPhases = (
-				6179928A114AE0C800BA94A9 /* ShellScript */,
+				61806B78170B83EA00C601BC /* config.inc */,
+				6179928A114AE0C800BA94A9 /* data */,
 			);
 			dependencies = (
 			);
@@ -629,6 +630,8 @@
 		617BC23A1490211F00E1C294 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Locale/Italian.lproj/Scheme.strings; sourceTree = "<group>"; };
 		617D78D816D932310091D4D6 /* Physfs.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Physfs.xcodeproj; path = ../../misc/libphysfs/Xcode/Physfs.xcodeproj; sourceTree = SOURCE_ROOT; };
 		617D794316D933B00091D4D6 /* Physlayer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Physlayer.xcodeproj; path = ../../misc/libphyslayer/Xcode/Physlayer.xcodeproj; sourceTree = SOURCE_ROOT; };
+		61806BDA170B963800C601BC /* weapons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weapons.h; path = ../../QTfrontend/weapons.h; sourceTree = SOURCE_ROOT; };
+		61806BE0170B969D00C601BC /* hwconsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hwconsts.h; path = ../../QTfrontend/hwconsts.h; sourceTree = SOURCE_ROOT; };
 		6183D83C11E2BCE200A88903 /* Default-ipad-Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-ipad-Landscape.png"; path = "Resources/Icons/Default-ipad-Landscape.png"; sourceTree = "<group>"; };
 		6183D83D11E2BCE200A88903 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = Resources/Icons/Default.png; sourceTree = "<group>"; };
 		618899811299516000D55FD6 /* title@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "title@2x~iphone.png"; path = "Resources/Frontend/title@2x~iphone.png"; sourceTree = "<group>"; };
@@ -672,7 +675,6 @@
 		61A4A39312A5CCC2004D81E6 /* uVariables.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uVariables.pas; path = ../../hedgewars/uVariables.pas; sourceTree = SOURCE_ROOT; };
 		61A4A3A112A5CD56004D81E6 /* uCaptions.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uCaptions.pas; path = ../../hedgewars/uCaptions.pas; sourceTree = SOURCE_ROOT; };
 		61A976B2136F668500DD9878 /* uCursor.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uCursor.pas; path = ../../hedgewars/uCursor.pas; sourceTree = SOURCE_ROOT; };
-		61A97F0E136F675A00DD9878 /* hwconsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hwconsts.h; path = ../../QTfrontend/hwconsts.h; sourceTree = SOURCE_ROOT; };
 		61AC067212B2E32D000B52A2 /* Appirater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Appirater.h; path = Classes/Appirater.h; sourceTree = "<group>"; };
 		61AC067312B2E32D000B52A2 /* Appirater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Appirater.m; path = Classes/Appirater.m; sourceTree = "<group>"; };
 		61B7A33612CC21080086B604 /* StatsPageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StatsPageViewController.h; sourceTree = "<group>"; };
@@ -1023,9 +1025,10 @@
 		61641FE21437CD8F006E049C /* Headers */ = {
 			isa = PBXGroup;
 			children = (
+				61806BE0170B969D00C601BC /* hwconsts.h */,
+				61806BDA170B963800C601BC /* weapons.h */,
 				61641FE31437CDAA006E049C /* DefinesAndMacros.h */,
 				32CA4F630368D1EE00C91783 /* Hedgewars_Prefix.pch */,
-				61A97F0E136F675A00DD9878 /* hwconsts.h */,
 				6165922911CA9BD500D6E256 /* PascalImports.h */,
 			);
 			name = Headers;
@@ -1629,19 +1632,34 @@
 			shellPath = /bin/sh;
 			shellScript = "HEDGEWARS_REVISION=`/usr/local/bin/hg identify -n ${SOURCE_DIR}|sed -e 's/\\+//'`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $HEDGEWARS_REVISION\" \"${TARGET_BUILD_DIR}\"/\"${INFOPLIST_PATH}\"";
 		};
-		6179928A114AE0C800BA94A9 /* ShellScript */ = {
+		6179928A114AE0C800BA94A9 /* data */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			inputPaths = (
 			);
+			name = data;
 			outputPaths = (
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\n#create config.inc\necho \"Updating config file...\"\nPROTO=`cat ${SOURCE_DIR}/CMakeLists.txt | grep HEDGEWARS_PROTO_VER | cut -d ' ' -f 2 | cut -d ')' -f 1`\nMAJN=`cat ${SOURCE_DIR}/CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MAJOR | xargs | cut -d ' ' -f 2 |cut -d ')' -f 1`\nMINN=`cat ${SOURCE_DIR}/CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MINOR | xargs | cut -d ' ' -f 2 |cut -d ')' -f 1`\nPATN=`cat ${SOURCE_DIR}/CMakeLists.txt | grep CPACK_PACKAGE_VERSION_PATCH | xargs | cut -d ' ' -f 2 |cut -d '$' -f 1`\nREVN=-`/usr/local/bin/hg id -n ${SOURCE_DIR}`\necho \"const cNetProtoVersion = $PROTO; const cVersionString = '${MAJN}.${MINN}.${PATN}${REVN}'; const cLuaLibrary = '';\" > ${PROJECT_DIR}/config.inc\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{Cheese,FlightJoust}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#copy mono audio\ncp -R ${SOURCE_DIR}/project_files/AudioMono/* ${PROJECT_DIR}/Data/\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Justyouwait,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
-			showEnvVarsInLog = 0;
+			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{Cheese,FlightJoust}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#copy mono audio\ncp -R ${SOURCE_DIR}/project_files/AudioMono/* ${PROJECT_DIR}/Data/\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Justyouwait,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
+		};
+		61806B78170B83EA00C601BC /* config.inc */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = config.inc;
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/myfile",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "HG=/usr/local/bin/hg\nSOURCE_DIR=${PROJECT_DIR}/../../\n\n#create config.inc\necho \"Updating config file...\"\nPRON=`grep HEDGEWARS_PROTO_VER ${SOURCE_DIR}/CMakeLists.txt | grep -o -E [0-9]+`\nMAJN=`grep CPACK_PACKAGE_VERSION_MAJOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nMINN=`grep CPACK_PACKAGE_VERSION_MINOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nPATN=`grep CPACK_PACKAGE_VERSION_PATCH ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nREVN=`$HG id -n ${SOURCE_DIR}`\nHASH=`$HG id -i ${SOURCE_DIR}`\n\necho \"{Do not change this file, use the project target to regenerate}\" > ${PROJECT_DIR}/config.inc\necho \"const cNetProtoVersion = $PRON;\" >> ${PROJECT_DIR}/config.inc\necho \"const cVersionString = '$MAJN.$MINN.$PATN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cRevisionString = '$REVN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cHashString = '$HASH';\" >> ${PROJECT_DIR}/config.inc\necho \"const cLuaLibrary = '';\" >> ${PROJECT_DIR}/config.inc";
 		};
 		9283011B0F10CB2D00CC5A3C /* Build libfpc.a */ = {
 			isa = PBXShellScriptBuildPhase;
--- a/project_files/HedgewarsMobile/Hedgewars_Prefix.pch	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/HedgewarsMobile/Hedgewars_Prefix.pch	Thu Jun 13 22:27:23 2013 +0200
@@ -30,6 +30,5 @@
 #import "EditableCellView.h"
 #import "CreationChamber.h"
 #import "HWUtils.h"
-#import "hwconsts.h"
 #endif
 
--- a/project_files/frontlib/hwconsts.h	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/frontlib/hwconsts.h	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  * Copyright (c) 2012 Simeon Maxein <smaxein@googlemail.com>
  *
  * This program is free software; you can redistribute it and/or modify
--- a/project_files/frontlib/net/netconn.c	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/frontlib/net/netconn.c	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
  * Copyright (c) 2012 Simeon Maxein <smaxein@googlemail.com>
  *
  * This program is free software; you can redistribute it and/or modify
--- a/project_files/hedgewars.pro	Tue Apr 30 01:47:30 2013 +0200
+++ b/project_files/hedgewars.pro	Thu Jun 13 22:27:23 2013 +0200
@@ -44,7 +44,6 @@
     ../QTfrontend/ui/page/pagenetserver.h \
     ../QTfrontend/ui/page/pagegamestats.h \
     ../QTfrontend/ui/dialog/input_ip.h \
-    ../QTfrontend/ui/qaspectratiolayout.h \
     ../QTfrontend/ui/widget/bgwidget.h \
     ../QTfrontend/ui/widget/fpsedit.h \
     ../QTfrontend/ui/widget/FreqSpinBox.h \
@@ -123,7 +122,6 @@
     ../QTfrontend/model/MapModel.cpp \
     ../QTfrontend/model/ThemeModel.cpp \
     ../QTfrontend/model/netserverslist.cpp \
-    ../QTfrontend/ui/qaspectratiolayout.cpp \
     ../QTfrontend/ui/page/pagemain.cpp \
     ../QTfrontend/ui/page/pagetraining.cpp \
     ../QTfrontend/ui/page/pageroomslist.cpp \
@@ -250,7 +248,7 @@
 
 RESOURCES += ../QTfrontend/hedgewars.qrc
 
-LIBS += -L../bin -lphysfs
+LIBS += -L../bin -lhwphysfs -lphyslayer
 
 macx {
     QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
Binary file share/hedgewars/Data/Forts/SteelTower-icon.png has changed
Binary file share/hedgewars/Data/Forts/SteelTower-icon@2x.png has changed
Binary file share/hedgewars/Data/Forts/SteelTower-preview.png has changed
Binary file share/hedgewars/Data/Forts/SteelTower-preview@2x.png has changed
Binary file share/hedgewars/Data/Forts/SteelTowerL.png has changed
Binary file share/hedgewars/Data/Forts/SteelTowerR.png has changed
Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed
Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/Dan.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/Dauber.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/DayAndNight.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/Evil.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/Joker.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/Meteorhelmet.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/Moustache.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/Moustache_glasses.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/SunWukong.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/TeamWheatley.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/bubble.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/cap_thinking.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/car.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/flag_french.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/flag_germany.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/flag_italy.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/flag_usa.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/footballhelmet.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/lamp.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/mechanicaltoy.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/noface.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/war_UNPeacekeeper01.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/war_UNPeacekeeper02.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/war_airwarden02.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/war_airwarden03.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/war_americanww2helmet.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/war_trenchfrench01.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/war_trenchfrench02.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/zoo_chicken.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/zoo_elephant.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/zoo_fish.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/zoo_frog.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/zoo_snail.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/zoo_turtle.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Nobody_Laugh.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Nobody_Laugh@2x.png has changed
--- a/share/hedgewars/Data/Graphics/hedgehog.svg	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Graphics/hedgehog.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -9,11 +9,11 @@
    xmlns="http://www.w3.org/2000/svg"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="800"
+   width="1600"
    height="800"
    id="svg2902"
    version="1.1"
-   inkscape:version="0.47 r22583"
+   inkscape:version="0.48.3.1 r9886"
    sodipodi:docname="hedgehog.svg">
   <title
      id="title3631">Hedgehog</title>
@@ -76,17 +76,17 @@
      borderopacity="1.0"
      inkscape:pageopacity="0"
      inkscape:pageshadow="2"
-     inkscape:zoom="0.49497475"
-     inkscape:cx="523.00419"
-     inkscape:cy="282.86638"
+     inkscape:zoom="0.45185547"
+     inkscape:cx="842.9141"
+     inkscape:cy="306.27016"
      inkscape:document-units="px"
-     inkscape:current-layer="g3598"
+     inkscape:current-layer="layer3"
      showgrid="false"
-     inkscape:window-width="1280"
-     inkscape:window-height="946"
-     inkscape:window-x="-4"
-     inkscape:window-y="-3"
-     inkscape:window-maximized="1" />
+     inkscape:window-width="1250"
+     inkscape:window-height="852"
+     inkscape:window-x="170"
+     inkscape:window-y="184"
+     inkscape:window-maximized="0" />
   <metadata
      id="metadata2907">
     <rdf:RDF>
@@ -112,17 +112,20 @@
          style="color:#000000;fill:#2c78d2;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="M 539.75014,184.97991 289.94272,20.934533 c -10.12171,-6.646795 -18.53237,-1.405552 -18.77514,8.934515 l -6.50762,277.176512"
          id="path3847"
-         sodipodi:nodetypes="cccc" />
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0" />
       <path
          style="color:#000000;fill:#54a2fa;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="M 480.10727,181.8052 317.21732,74.837421 c -12.48356,-8.197799 -12.24256,-8.157389 -12.24256,5.825858 l -4.24337,180.736311"
          id="path3821"
-         sodipodi:nodetypes="cccc" />
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0" />
       <path
          sodipodi:nodetypes="cccc"
          id="path3790"
          d="M 539.75014,184.97991 289.94272,20.934533 c -10.12171,-6.646795 -18.53237,-1.405552 -18.77514,8.934515 l -6.50762,277.176512"
-         style="color:#000000;fill:none;stroke:#9f086e;stroke-width:22;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+         style="color:#000000;fill:none;stroke:#9f086e;stroke-width:22;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         inkscape:connector-curvature="0" />
     </g>
     <g
        id="g3839"
@@ -131,16 +134,19 @@
          sodipodi:nodetypes="cccc"
          id="path3823"
          d="M 394.49409,176.74515 96.356601,156.04088 C 84.276653,155.202 79.509956,163.89039 84.36166,173.02478 l 130.05508,244.85679"
-         style="color:#000000;fill:#54a2fa;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+         style="color:#000000;fill:#54a2fa;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         inkscape:connector-curvature="0" />
       <path
          style="color:#000000;fill:#2c78d2;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="m 94.1875,156 c -10.459488,0.29677 -14.360973,8.46776 -9.8125,17.03125 L 102.0625,206.3125 359.09375,224.15625 394.5,176.75 96.34375,156.03125 c -0.754997,-0.0524 -1.458951,-0.051 -2.15625,-0.0313 z"
-         id="path3849" />
+         id="path3849"
+         inkscape:connector-curvature="0" />
       <path
          style="color:#000000;fill:none;stroke:#9f086e;stroke-width:22;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="M 394.49409,176.74515 96.356601,156.04088 C 84.276653,155.202 79.509956,163.89039 84.36166,173.02478 l 130.05508,244.85679"
          id="path3813"
-         sodipodi:nodetypes="cccc" />
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0" />
     </g>
     <g
        id="g3835">
@@ -148,16 +154,19 @@
          style="color:#000000;fill:#54a2fa;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="M 305.99695,247.38296 28.159159,357.4774 c -11.257429,4.46082 -11.804016,14.3558 -3.482965,20.49879 L 247.73076,542.64501"
          id="path3827"
-         sodipodi:nodetypes="cccc" />
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0" />
       <path
          style="color:#000000;fill:#2c78d2;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="M 306,247.375 28.15625,357.46875 c -11.257429,4.46082 -11.789801,14.35701 -3.46875,20.5 l 37.5,27.6875 230.625,-91.375 L 306,247.375 z"
-         id="path3854" />
+         id="path3854"
+         inkscape:connector-curvature="0" />
       <path
          sodipodi:nodetypes="cccc"
          id="path3815"
          d="M 305.99695,247.38296 28.159159,357.4774 c -11.257429,4.46082 -11.804016,14.3558 -3.482965,20.49879 L 247.73076,542.64501"
-         style="color:#000000;fill:none;stroke:#9f086e;stroke-width:22;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+         style="color:#000000;fill:none;stroke:#9f086e;stroke-width:22;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         inkscape:connector-curvature="0" />
     </g>
     <g
        id="g3831">
@@ -165,16 +174,19 @@
          sodipodi:nodetypes="cccc"
          id="path3829"
          d="M 228.84636,338.65556 53.568239,580.71384 c -7.101908,9.80772 -2.250103,18.44887 8.068116,19.16343 l 276.590465,19.15401"
-         style="color:#000000;fill:#54a2fa;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+         style="color:#000000;fill:#54a2fa;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         inkscape:connector-curvature="0" />
       <path
          style="color:#000000;fill:#2c78d2;fill-opacity:1;stroke:none;stroke-width:22;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="M 228.84375,338.65625 53.5625,580.71875 c -7.101908,9.80772 -2.255719,18.44169 8.0625,19.15625 l 41.84375,2.90625 148.4375,-205 -23.0625,-59.125 z"
-         id="path3859" />
+         id="path3859"
+         inkscape:connector-curvature="0" />
       <path
          style="color:#000000;fill:none;stroke:#9f086e;stroke-width:22;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="M 228.84636,338.65556 53.568239,580.71384 c -7.101908,9.80772 -2.250103,18.44887 8.068116,19.16343 l 276.590465,19.15401"
          id="path3817"
-         sodipodi:nodetypes="cccc" />
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0" />
     </g>
     <g
        id="g3775"
@@ -182,7 +194,7 @@
        style="display:inline">
       <path
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          sodipodi:ry="237.38585"
          sodipodi:rx="237.38585"
          sodipodi:cy="441.39584"
@@ -194,7 +206,8 @@
          style="color:#000000;fill:#d66bcc;fill-opacity:1;stroke:none;stroke-width:19.6906414;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="m 508.09375,637.78125 c -23.96329,13.08576 -40.0625,37.31152 -40.0625,65.0625 0,41.63359 36.22695,75.40625 80.90625,75.40625 42.42516,0 77.22179,-30.44094 80.625,-69.15625 -12.12099,21.1102 -36.01048,35.46875 -63.5,35.46875 -39.74819,0 -71.96875,-30.02388 -71.96875,-67.0625 0,-14.86821 5.21282,-28.59929 14,-39.71875 z"
          transform="matrix(3.2784936,0,0,3.518332,-1352.2438,-1958.1729)"
-         id="path3783" />
+         id="path3783"
+         inkscape:connector-curvature="0" />
       <path
          sodipodi:type="arc"
          style="color:#000000;fill:none;stroke:#9f086e;stroke-width:66.8752594;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
@@ -203,7 +216,7 @@
          sodipodi:cy="441.39584"
          sodipodi:rx="237.38585"
          sodipodi:ry="237.38585"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)" />
     </g>
     <g
@@ -218,16 +231,17 @@
          sodipodi:cy="441.39584"
          sodipodi:rx="237.38585"
          sodipodi:ry="237.38585"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)" />
       <path
          style="color:#000000;fill:#d66bcc;fill-opacity:1;stroke:none;stroke-width:19.6906414;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="m 370.4375,624.5 c -25.06339,13.93043 -42.0625,40.92272 -42.0625,71.9375 0,45.28185 36.22695,81.96875 80.90625,81.96875 39.38878,0 72.18745,-28.53029 79.40625,-66.3125 -13.43862,16.95561 -34.05861,27.84375 -57.1875,27.84375 -40.49511,0 -73.3125,-33.27127 -73.3125,-74.3125 0,-15.20419 4.51856,-29.35023 12.25,-41.125 z"
          transform="matrix(3.2784936,0,0,3.234868,-894.42536,-1738.1438)"
-         id="path3762" />
+         id="path3762"
+         inkscape:connector-curvature="0" />
       <path
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          sodipodi:ry="237.38585"
          sodipodi:rx="237.38585"
          sodipodi:cy="441.39584"
@@ -247,16 +261,17 @@
          sodipodi:cy="441.39584"
          sodipodi:rx="237.38585"
          sodipodi:ry="237.38585"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)" />
       <path
          style="color:#000000;fill:#d66bcc;fill-opacity:1;stroke:none;stroke-width:19.6906414;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="m 625.15625,428.34375 c -18.64041,15.11242 -30.4375,37.36149 -30.4375,62.21875 0,45.5224 39.51787,82.4375 88.28125,82.4375 43.93405,0 80.36954,-29.96153 87.15625,-69.1875 C 754.65821,516.38108 734.45365,524 712.3125,524 663.54912,524 624,487.0849 624,441.5625 c 0,-4.5054 0.4112,-8.90962 1.15625,-13.21875 z"
          transform="matrix(3.0039103,0,0,3.2177742,-1604.2803,-1063.8187)"
-         id="path3749" />
+         id="path3749"
+         inkscape:connector-curvature="0" />
       <path
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          sodipodi:ry="237.38585"
          sodipodi:rx="237.38585"
          sodipodi:cy="441.39584"
@@ -276,16 +291,17 @@
          sodipodi:cy="441.39584"
          sodipodi:rx="237.38585"
          sodipodi:ry="237.38585"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)" />
       <path
          style="color:#000000;fill:#d66bcc;fill-opacity:1;stroke:none;stroke-width:19.6906414;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="m 300.8125,211.5625 c -68.32219,47.97926 -113,127.39175 -113,217.21875 0,146.48081 118.76919,265.21875 265.25,265.21875 109.76155,0 203.92541,-66.69307 244.25,-161.75 -46.77743,53.90709 -115.77378,88 -192.75,88 -140.90189,0 -255.125,-114.22311 -255.125,-255.125 0,-57.6502 19.12817,-110.84078 51.375,-153.5625 z"
          id="path3688"
-         transform="translate(-5.6478893,85.928699)" />
+         transform="translate(-5.6478893,85.928699)"
+         inkscape:connector-curvature="0" />
       <path
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          sodipodi:ry="237.38585"
          sodipodi:rx="237.38585"
          sodipodi:cy="441.39584"
@@ -301,11 +317,11 @@
          sodipodi:cy="356.07144"
          sodipodi:rx="63.676994"
          sodipodi:ry="82.367821"
-         d="m 597.60558,356.07144 c 0,45.49049 -28.50916,82.36782 -63.67699,82.36782 -35.16783,0 -63.677,-36.87733 -63.677,-82.36782 0,-45.49049 28.50917,-82.36782 63.677,-82.36782 35.16783,0 63.67699,36.87733 63.67699,82.36782 z"
+         d="m 597.60558,356.07144 a 63.676994,82.367821 0 1 1 -127.35399,0 63.676994,82.367821 0 1 1 127.35399,0 z"
          transform="matrix(1.2137522,-0.32948394,0.32948394,1.2137522,-228.90683,201.80994)" />
       <path
          transform="matrix(1.0305506,-0.24075443,0.24075443,1.0305506,-13.067694,205.73896)"
-         d="m 589.43368,356.07144 c 0,45.49049 -24.85047,82.36782 -55.50509,82.36782 -30.65462,0 -55.50509,-36.87733 -55.50509,-82.36782 0,-45.49049 24.85047,-82.36782 55.50509,-82.36782 30.65462,0 55.50509,36.87733 55.50509,82.36782 z"
+         d="m 589.43368,356.07144 a 55.505093,82.367821 0 1 1 -111.01018,0 55.505093,82.367821 0 1 1 111.01018,0 z"
          sodipodi:ry="82.367821"
          sodipodi:rx="55.505093"
          sodipodi:cy="356.07144"
@@ -315,7 +331,7 @@
          sodipodi:type="arc" />
       <path
          transform="matrix(0.46703901,-0.01512391,0.01512391,0.46703901,296.71933,307.7045)"
-         d="m 597.60558,356.07144 c 0,45.49049 -28.50916,82.36782 -63.67699,82.36782 -35.16783,0 -63.677,-36.87733 -63.677,-82.36782 0,-45.49049 28.50917,-82.36782 63.677,-82.36782 35.16783,0 63.67699,36.87733 63.67699,82.36782 z"
+         d="m 597.60558,356.07144 a 63.676994,82.367821 0 1 1 -127.35399,0 63.676994,82.367821 0 1 1 127.35399,0 z"
          sodipodi:ry="82.367821"
          sodipodi:rx="63.676994"
          sodipodi:cy="356.07144"
@@ -331,7 +347,7 @@
          sodipodi:cy="356.07144"
          sodipodi:rx="63.676994"
          sodipodi:ry="82.367821"
-         d="m 597.60558,356.07144 c 0,45.49049 -28.50916,82.36782 -63.67699,82.36782 -35.16783,0 -63.677,-36.87733 -63.677,-82.36782 0,-45.49049 28.50917,-82.36782 63.677,-82.36782 35.16783,0 63.67699,36.87733 63.67699,82.36782 z"
+         d="m 597.60558,356.07144 a 63.676994,82.367821 0 1 1 -127.35399,0 63.676994,82.367821 0 1 1 127.35399,0 z"
          transform="matrix(0.43341707,-0.01403515,0.01403515,0.43341707,401.4873,306.23785)" />
     </g>
     <g
@@ -339,7 +355,7 @@
        transform="matrix(0.33724075,0,0,0.29575944,129.84878,456.31455)">
       <path
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          sodipodi:ry="237.38585"
          sodipodi:rx="237.38585"
          sodipodi:cy="441.39584"
@@ -351,7 +367,8 @@
          style="color:#000000;fill:#d66bcc;fill-opacity:1;stroke:none;stroke-width:19.6906414;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
          d="m 234.03125,541.65625 c -25.63909,13.79302 -42.75,38.56291 -42.75,66.875 0,43.32308 40.0382,78.46875 89.4375,78.46875 45.82189,0 83.61297,-30.23476 88.84375,-69.1875 -13.96723,21.00047 -39.90418,35.125 -69.625,35.125 -44.50072,0 -80.59375,-31.62921 -80.59375,-70.65625 0,-15.13034 5.45433,-29.1289 14.6875,-40.625 z"
          transform="matrix(2.9652407,0,0,3.3811262,-385.03289,-1542.8571)"
-         id="path3736" />
+         id="path3736"
+         inkscape:connector-curvature="0" />
       <path
          sodipodi:type="arc"
          style="color:#000000;fill:none;stroke:#9f086e;stroke-width:62.34770966;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
@@ -360,13 +377,354 @@
          sodipodi:cy="441.39584"
          sodipodi:rx="237.38585"
          sodipodi:ry="237.38585"
-         d="m 738.42152,441.39584 c 0,131.10459 -106.28126,237.38585 -237.38584,237.38585 -131.10459,0 -237.38585,-106.28126 -237.38585,-237.38585 0,-131.10458 106.28126,-237.38585 237.38585,-237.38585 131.10458,0 237.38584,106.28127 237.38584,237.38585 z"
+         d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
          transform="matrix(1.1172821,0,0,1.1172821,-112.39265,21.533965)" />
     </g>
     <path
        style="fill:#9f086e;fill-opacity:1;stroke:none;display:inline"
        d="m 561.23109,498.93811 c -8.0798,4.38775 -2.8235,17.08495 9.0914,18.56155 31.062,3.84947 81.3892,-18.32936 94.3319,-49.03093 3.2596,-7.73202 -2.8605,-10.93033 -5.4385,-7.79015 -5.4066,6.58563 -15.6937,16.18387 -30.9805,25.24132 -24.5934,14.57155 -58.397,8.344 -67.0043,13.01821 z"
        id="path3864"
-       sodipodi:nodetypes="csssss" />
+       sodipodi:nodetypes="csssss"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;fill:#5297ec;fill-opacity:1;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1297.4937,158.66282 -238.971,-141.536508 -21.5382,12.30752 4.1025,145.639008 -178.45904,2.05126 -6.15376,21.53816 83.07579,128.20334 -130.25464,63.58886 0,14.35878 127.17776,83.07576 -79.99891,131.28025 6.15376,16.41002 214.35604,-5.12814 z"
+       id="path3828"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccc" />
+    <path
+       style="color:#000000;fill:#4586d7;fill-opacity:1;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 996.0713,579.34584 c 88.6762,-140.43932 171.6697,-293.0426 260.3459,-433.48193 -48.9448,-13.62653 -96.3579,-8.12687 -123.6124,20.4849 -39.7553,15.44224 -86.2567,43.76314 -109.4128,70.97281 -8.7505,10.67062 -9.8093,35.12327 -41.01216,70.63462 -7.24253,14.08935 -18.95382,78.81319 -18.03713,115.99556 0.77233,31.32786 3.1183,60.37332 9.75985,84.02789 7.15158,25.4711 16.67826,52.05789 21.96874,71.36615 z"
+       id="path3968"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccssc" />
+    <path
+       style="color:#000000;fill:#63a0e7;fill-opacity:1;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1053.4726,169.57961 -13.9695,-149.111506 17.1836,-5.091476 209.6592,134.737182 C 1108.4783,109.28175 1069.954,-0.417003 1053.4726,169.57961 z"
+       id="path3936"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path3938"
+       d="m 1049.9214,88.575018 -6.3681,-72.094187 7.9698,-2.454287 99.3272,64.731386 c -71.9635,-22.811108 -95.9442,-66.873331 -100.9289,9.817088 z"
+       style="color:#000000;fill:#85b0e5;fill-opacity:1;stroke:none;stroke-width:0.99999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="opacity:0.31512607;color:#000000;fill:#ffffff;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1075.694,36.381658 c 59.6468,39.147935 114.2708,70.794462 170.5596,104.405892 -16.3851,9.62444 -100.1489,-45.926375 -166.0593,-89.150263 -4.2868,-5.995922 -4.3503,-11.80543 -4.5003,-15.255629 z"
+       id="path3945"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path3948"
+       d="m 944.79988,307.20064 -88.74005,-120.64243 12.11049,-13.21124 249.10568,7.57657 C 960.9147,227.18955 871.41374,152.97689 944.79988,307.20064 z"
+       style="color:#000000;fill:#63a0e7;fill-opacity:1;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="color:#000000;fill:#85b0e5;fill-opacity:1;stroke:none;stroke-width:0.99999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 900.05353,239.58317 -42.57405,-58.52837 5.56899,-6.20699 118.47801,4.36082 C 908.08845,196.7 864.84596,171.27073 900.05351,239.58395 z"
+       id="path3950"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path3952"
+       d="m 895.27893,181.5696 c 71.28915,2.85496 134.41057,1.86473 199.97067,1.70214 -9.0923,16.68627 -109.50142,12.18461 -188.25886,9.05983 -6.76185,-2.93349 -9.80702,-7.88134 -11.71181,-10.76197 z"
+       style="opacity:0.31512607;color:#000000;fill:#ffffff;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="color:#000000;fill:#63a0e7;fill-opacity:1;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 940.67934,476.3477 807.0374,408.75169 811.88047,391.49638 1037.5841,285.81319 C 918.94276,397.67761 805.57981,371.85556 940.67934,476.3477 z"
+       id="path3954"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path3956"
+       d="M 870.22916,436.20893 805.82,403.20005 l 2.16759,-8.05247 107.6895,-49.58857 c -57.63527,48.75723 -107.7002,45.58532 -45.44764,90.65062 z"
+       style="color:#000000;fill:#85b0e5;fill-opacity:1;stroke:none;stroke-width:0.99999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="opacity:0.31512607;color:#000000;fill:#ffffff;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 819.86604,395.50715 c 64.45185,-32.78186 115.82948,-56.30755 179.20746,-88.74602 -0.5805,18.9938 -90.41093,67.05092 -163.89883,93.0626 -7.35793,0.43447 -12.30865,-2.60591 -15.30863,-4.31658 z"
+       id="path3958"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path3960"
+       d="m 1012.1539,619.00845 -149.53856,8.22179 -4.42659,-17.36685 75.84074,-91.26068 c 11.77007,-12.26421 18.232,-3.18375 8.73964,11.00107 -32.19367,54.76267 -40.53362,74.45962 69.38477,89.40467 z"
+       style="color:#000000;fill:#63a0e7;fill-opacity:1;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="color:#000000;fill:#85b0e5;fill-opacity:1;stroke:none;stroke-width:0.99999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 931.07268,619.44017 -72.28579,3.58935 -2.14586,-8.05826 68.50599,-96.76255 c -25.56323,71.03251 -70.51551,93.30016 5.92627,101.23192 z"
+       id="path3962"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="color:#000000;fill:none;stroke:#920a6b;stroke-width:19.72619247;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1044.924,174.04722 -7.1794,-147.177445 c -0.4653,-9.538716 14.473,-12.270939 21.5381,-8.205023 l 234.3558,134.869928 -44.102,21.53816 -372.30252,-3.07686 c -25.29878,0.51283 -22.39285,14.35876 -17.43566,22.56378 l 80.5117,127.17772"
+       id="path3834"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cssccccc" />
+    <path
+       style="color:#000000;fill:none;stroke:#920a6b;stroke-width:19.72619247;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 934.66909,482.76089 820.31168,409.94142 c -19.49946,-11.24579 -9.07588,-24.45921 9.74346,-32.8201 L 1025.437,282.76366 987.48887,404.30045 859.2855,606.86173 c -4.21618,6.73156 -3.18413,21.66812 7.29892,21.73313 l 231.67218,-0.19494"
+       id="path3836"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       transform="matrix(1.0031723,0,0,0.89280342,1164.6215,42.540495)"
+       d="m 427.53431,473.53146 a 98.586678,98.586678 0 1 1 -197.17336,0 98.586678,98.586678 0 1 1 197.17336,0 z"
+       sodipodi:ry="98.586678"
+       sodipodi:rx="98.586678"
+       sodipodi:cy="473.53146"
+       sodipodi:cx="328.94763"
+       id="path3872"
+       style="color:#000000;fill:#dd8fd8;fill-opacity:1;stroke:none;stroke-width:0.52631909;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <path
+       style="color:#000000;fill:#dda4db;fill-opacity:0.98431582;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1480.2231,380.35651 -51.0504,23.41165 c -50.2007,85.10898 -6.3297,46.41727 30.579,25.3517 17.0773,-9.74689 36.2525,-8.81552 70.2334,8.4997 17.2558,-1.2852 6.4051,-28.22108 -7.0597,-38.64965 z"
+       id="path3874"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccc" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path3876"
+       d="m 1491.0248,557.20287 c -83.498,8.84305 -97.248,-67.54086 -87.8199,-72.25438 6.4431,-6.9755 38.8646,-40.54988 80.4085,-17.71203 24.3903,14.96397 41.1247,50.99615 88.6614,14.23773 13.1708,28.37108 -46.6663,74.93238 -81.25,75.72868 z"
+       style="color:#000000;fill:#cb65c3;fill-opacity:0.98431444;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       sodipodi:nodetypes="ccsccc"
+       inkscape:connector-curvature="0"
+       id="path3878"
+       d="m 1471.1409,382.81375 -41.6831,16.29741 c -37.165,54.32695 -2.488,28.86438 27.3933,14.52808 13.8258,-6.63329 30.0815,-6.75547 59.8535,2.69134 14.4978,-1.41985 3.6726,-17.64203 -8.3443,-23.58605 z"
+       style="color:#000000;fill:#e0b0e0;fill-opacity:1;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="color:#000000;fill:#c251b8;fill-opacity:1;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1486.6388,557.20287 c -64.6242,5.47558 -73.7439,-33.87811 -66.9543,-42.00055 1.4755,-8.10961 26.9162,-29.61879 59.1885,-15.34935 26.331,3.94312 63.4983,15.97221 87.2465,-5.80162 10.1937,17.56719 -52.7143,62.65842 -79.4807,63.15152 z"
+       id="path3880"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:nodetypes="sssss"
+       inkscape:connector-curvature="0"
+       id="path3882"
+       d="m 1585.0046,469.44365 c 0,47.18453 -49.5837,95.26254 -104.5013,88.7218 -52.2238,-6.21996 -85.2198,-38.52447 -88.0105,-85.70903 -2.7851,-47.08863 43.2921,-88.44787 96.3827,-88.44787 53.0906,0 96.1291,38.25057 96.1291,85.4351 z"
+       style="color:#000000;fill:none;stroke:#920a6b;stroke-width:20.88655663;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:#dd8fd8;fill-opacity:1;stroke:none;stroke-width:58.48065567;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3777-1"
+       sodipodi:cx="501.03568"
+       sodipodi:cy="441.39584"
+       sodipodi:rx="237.38585"
+       sodipodi:ry="237.38585"
+       d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
+       transform="matrix(0.3703166,0,0,0.33518837,1197.9319,545.75332)" />
+    <path
+       id="path3783-2"
+       d="m 1339.1042,619.21816 c -26.0394,13.81216 -43.5334,39.38274 -43.5334,68.67422 0,43.9447 39.3656,79.59214 87.9158,79.59214 46.1007,0 83.9121,-32.13075 87.6101,-72.99521 -13.1711,22.28207 -39.1303,37.43767 -69.0015,37.43767 -43.1919,0 -78.2039,-31.69056 -78.2039,-70.78523 0,-15.69355 5.6644,-30.18688 15.2129,-41.92359 z"
+       style="color:#000000;fill:#dc7ad5;fill-opacity:1;stroke:none;stroke-width:19.2384243;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       style="color:#000000;fill:#d368cb;fill-opacity:1;stroke:none;stroke-width:19.2384243;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1339.1042,630.8218 c -26.0394,13.81217 -43.5334,39.38274 -43.5334,68.67422 0,43.94471 39.3656,79.59214 87.9158,79.59214 46.1007,0 83.9121,-32.13075 87.6101,-72.99521 -13.1711,22.28207 -39.1303,37.43768 -69.0015,37.43768 -43.1919,0 -78.2039,-31.69057 -78.2039,-70.78524 0,-15.69355 5.6644,-30.18688 15.2129,-41.92359 z"
+       id="path3934" />
+    <path
+       transform="matrix(0.3703166,0,0,0.33518837,1197.9319,545.75332)"
+       d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
+       sodipodi:ry="237.38585"
+       sodipodi:rx="237.38585"
+       sodipodi:cy="441.39584"
+       sodipodi:cx="501.03568"
+       id="path3781-1"
+       style="color:#000000;fill:none;stroke:#9f086e;stroke-width:57.63699341;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.3703166,0,0,0.36456015,1046.1907,531.80511)"
+       d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
+       sodipodi:ry="237.38585"
+       sodipodi:rx="237.38585"
+       sodipodi:cy="441.39584"
+       sodipodi:cx="501.03568"
+       id="path3756-3"
+       style="color:#000000;fill:#dd8fd8;fill-opacity:1;stroke:none;stroke-width:56.07536697;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <path
+       id="path3762-8"
+       d="m 1189.5218,611.00145 c -27.2348,14.70373 -45.7067,43.19441 -45.7067,75.93084 0,47.79552 39.3656,86.51897 87.9158,86.51897 42.8013,0 78.4416,-30.11407 86.2858,-69.99361 -14.6029,17.89685 -37.0094,29.38939 -62.1421,29.38939 -44.0035,0 -79.6641,-35.1182 -79.6641,-78.43767 0,-16.04822 4.91,-30.97952 13.3113,-43.40792 z"
+       style="color:#000000;fill:#dc7ad5;fill-opacity:1;stroke:none;stroke-width:19.2384243;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       style="color:#000000;fill:#d368cb;fill-opacity:1;stroke:none;stroke-width:19.2384243;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1189.5218,622.60509 c -27.2348,14.70373 -45.7067,43.19442 -45.7067,75.93084 0,47.79553 39.3656,86.51897 87.9158,86.51897 42.8013,0 78.4416,-30.11406 86.2858,-69.99361 -14.6029,17.89685 -37.0094,29.38939 -62.1421,29.38939 -44.0035,0 -79.6641,-35.11819 -79.6641,-78.43767 0,-16.04821 4.91,-30.97952 13.3113,-43.40792 z"
+       id="path3921" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:none;stroke:#9f086e;stroke-width:55.26640701;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3760-6"
+       sodipodi:cx="501.03568"
+       sodipodi:cy="441.39584"
+       sodipodi:rx="237.38585"
+       sodipodi:ry="237.38585"
+       d="m 738.42152,441.39584 a 237.38585,237.38585 0 1 1 -474.77169,0 237.38585,237.38585 0 1 1 474.77169,0 z"
+       transform="matrix(0.3703166,0,0,0.36456015,1046.1907,531.80511)" />
+    <path
+       transform="matrix(2.7477273,0,0,2.7477273,350.43501,-875.30896)"
+       d="m 427.53431,473.53146 a 98.586678,98.586678 0 1 1 -197.17336,0 98.586678,98.586678 0 1 1 197.17336,0 z"
+       sodipodi:ry="98.586678"
+       sodipodi:rx="98.586678"
+       sodipodi:cy="473.53146"
+       sodipodi:cx="328.94763"
+       id="path3794"
+       style="color:#000000;fill:#dd8fd8;fill-opacity:1;stroke:none;stroke-width:7.81254339;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <path
+       style="color:#000000;fill:#dc7ad5;fill-opacity:1;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1510.5011,514.02272 c -36.5879,106.30828 -137.4775,182.69295 -256.2077,182.69295 -149.608,0 -270.88932,-121.28127 -270.88932,-270.88931 0,-108.69657 64.02002,-202.44048 156.41052,-245.58222 44.2231,-4.40546 22.6855,17.99764 15.6524,25.95085 -127.8469,120.0212 -75.0469,288.89817 -12.5129,340.35434 30.5359,25.14299 68.5478,62.04178 131.7468,68.69988 75.8575,7.99171 159.3497,-14.0133 228.6513,-102.2016 2.383,0.32505 4.7659,0.65008 7.1489,0.97511 z"
+       id="path3815-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csscccscc" />
+    <path
+       sodipodi:nodetypes="csscccscc"
+       inkscape:connector-curvature="0"
+       id="path3818"
+       d="m 1409.6994,647.73287 c -43.993,30.86638 -97.5839,48.9828 -155.406,48.9828 -149.608,0 -270.88932,-121.28127 -270.88932,-270.88931 0,-101.74562 56.09382,-190.3898 139.04322,-236.69423 l 0.9853,9.81057 c -132.97508,126.68776 -74.8709,332.92464 -8.7624,383.868 30.5359,25.14299 115.396,85.9233 178.8866,83.20445 50.4746,-2.16147 57.0926,-4.22273 119.8672,-23.1518 z"
+       style="color:#000000;fill:#d368cb;fill-opacity:1;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:none;stroke:#920a6b;stroke-width:7.58704424;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3022"
+       sodipodi:cx="328.94763"
+       sodipodi:cy="473.53146"
+       sodipodi:rx="98.586678"
+       sodipodi:ry="98.586678"
+       d="m 427.53431,473.53146 a 98.586678,98.586678 0 1 1 -197.17336,0 98.586678,98.586678 0 1 1 197.17336,0 z"
+       transform="matrix(2.7581306,0,0,2.7477273,345.98722,-875.30896)" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:#dd8fd8;fill-opacity:1;stroke:none;stroke-width:0.52631909;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3842"
+       sodipodi:cx="328.94763"
+       sodipodi:cy="473.53146"
+       sodipodi:rx="98.586678"
+       sodipodi:ry="98.586678"
+       d="m 427.53431,473.53146 a 98.586678,98.586678 0 1 1 -197.17336,0 98.586678,98.586678 0 1 1 197.17336,0 z"
+       transform="matrix(1.0138611,0,0,0.83582014,766.30162,216.32669)" />
+    <path
+       sodipodi:nodetypes="ccsccc"
+       inkscape:connector-curvature="0"
+       id="path3844"
+       d="m 1094.4298,532.58156 -60.7583,21.91743 c -59.74685,79.67685 -7.5333,43.45468 36.3941,23.7336 20.3247,-9.12476 43.1463,-8.25286 83.5891,7.95719 20.5372,-1.20315 7.6231,-26.41984 -8.4022,-36.18282 z"
+       style="color:#000000;fill:#dda4db;fill-opacity:0.98431582;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="color:#000000;fill:#cb65c3;fill-opacity:0.98431444;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1096.1827,698.14069 c -84.3876,8.27864 -98.2841,-63.23005 -88.7556,-67.64272 6.5118,-6.53029 39.2787,-37.96181 81.2653,-16.58157 24.4482,13.88094 38.7971,56.31808 79.9763,29.33914 -2.5997,29.10597 -37.5338,54.13967 -72.486,54.88515 z"
+       id="path3846"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="color:#000000;fill:#e0b0e0;fill-opacity:1;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1083.6206,534.88199 -49.6097,15.25722 c -44.2324,50.85952 -2.9611,27.0221 32.6025,13.6008 16.4549,-6.20989 35.8018,-6.32427 71.2354,2.51959 17.2547,-1.32926 4.3709,-16.51605 -9.9311,-22.08069 z"
+       id="path3864-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccsccc" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path3866"
+       d="m 1091.7499,698.14069 c -65.3127,5.12608 -74.5295,-31.71584 -67.6676,-39.31985 1.4912,-7.59203 27.203,-27.72838 59.8191,-14.36969 15.3572,8.86922 9.9214,30.28122 60.3798,22.40246 10.3023,16.44593 -25.4796,30.82548 -52.5313,31.28708 z"
+       style="color:#000000;fill:#ca5dc1;fill-opacity:1;stroke:none;stroke-width:0.10557491;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="color:#000000;fill:none;stroke:#920a6b;stroke-width:20.88655663;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1191.1638,615.98274 c 0,44.17297 -50.1119,89.1824 -105.6147,83.05911 -52.7803,-5.82293 -86.1278,-36.06567 -88.9483,-80.23864 -2.8147,-44.08319 43.7534,-82.8027 97.4097,-82.8027 53.6563,0 97.1533,35.80927 97.1533,79.98223 z"
+       id="path3848"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="sssss" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:#e7e6ec;fill-opacity:1;stroke:none;stroke-width:0.21143535;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3797"
+       sodipodi:cx="400.45596"
+       sodipodi:cy="543.44366"
+       sodipodi:rx="28.702562"
+       sodipodi:ry="38.914051"
+       d="m 429.15853,543.44366 a 28.702562,38.914051 0 1 1 -57.40513,0 28.702562,38.914051 0 1 1 57.40513,0 z"
+       transform="matrix(2.7668095,-0.53171129,0.60305704,2.6271943,-101.00341,-845.85488)" />
+    <path
+       transform="matrix(2.0229222,-0.64328997,0.64066389,2.1866177,263.33691,-575.45403)"
+       d="m 429.15853,543.44366 a 28.702562,38.914051 0 1 1 -57.40513,0 28.702562,38.914051 0 1 1 57.40513,0 z"
+       sodipodi:ry="38.914051"
+       sodipodi:rx="28.702562"
+       sodipodi:cy="543.44366"
+       sodipodi:cx="400.45596"
+       id="path3799"
+       style="color:#000000;fill:#e7e6ec;fill-opacity:1;stroke:none;stroke-width:0.26384211;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:#000000;stroke:none;stroke-width:0.19265361;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3801"
+       sodipodi:cx="410.1113"
+       sodipodi:cy="543.21143"
+       sodipodi:rx="8.8794022"
+       sodipodi:ry="13.465467"
+       d="m 418.9907,543.21143 a 8.8794022,13.465467 0 1 1 -17.7588,0 8.8794022,13.465467 0 1 1 17.7588,0 z"
+       transform="matrix(3.2515702,0,0,2.8168263,16.153846,-1151.625)" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:#e7e6ec;fill-opacity:1;stroke:none;stroke-width:0.21396993;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3805"
+       sodipodi:cx="403.18341"
+       sodipodi:cy="536.96655"
+       sodipodi:rx="3.7078824"
+       sodipodi:ry="8.781827"
+       d="m 406.89129,536.96655 a 3.7078824,8.781827 0 1 1 -7.41576,0 3.7078824,8.781827 0 1 1 7.41576,0 z"
+       transform="matrix(2.824571,0,0,2.6752843,195.83727,-1074.7315)" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:#000000;stroke:none;stroke-width:0.21279597;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3807"
+       sodipodi:cx="437.62769"
+       sodipodi:cy="539.99139"
+       sodipodi:rx="10.830919"
+       sodipodi:ry="13.367891"
+       d="m 448.4586,539.99139 a 10.830919,13.367891 0 1 1 -21.66183,0 10.830919,13.367891 0 1 1 21.66183,0 z"
+       transform="matrix(2.7179252,0,0.04087328,2.8162126,225.89822,-1154.3949)" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:#e7e6ec;fill-opacity:1;stroke:none;stroke-width:0.21908903;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3803"
+       sodipodi:cx="432.7489"
+       sodipodi:cy="533.64899"
+       sodipodi:rx="2.4393961"
+       sodipodi:ry="7.6109161"
+       d="m 435.1883,533.64899 a 2.4393961,7.6109161 0 1 1 -4.87879,0 2.4393961,7.6109161 0 1 1 4.87879,0 z"
+       transform="matrix(2.9009107,0,0,2.4174256,164.77528,-936.74172)" />
+    <path
+       style="color:#000000;fill:#dbdae0;fill-opacity:1;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1266.2787,415.02633 c 43.5553,42.0038 82.798,64.16719 138.8391,21.13328 -36.4054,61.36761 -110.6571,38.53849 -138.8391,-21.13328 z"
+       id="path3811"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="color:#000000;fill:#dbdae0;fill-opacity:1;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1407.8883,434.94901 c -1.5473,-1.84347 6.478,-3.69434 8.8336,-2.84429 19.4697,10.30798 29.3064,3.67479 52.6715,-8.30815 -12.9069,16.73141 -34.8,25.92144 -61.5051,11.15244 z"
+       id="path3813-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="color:#000000;fill:#920a6b;fill-opacity:0.98431582;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 1358.5,497.8375 c -17.2473,-2.90752 -11.846,17.56737 0.7253,21.39422 27.6225,8.40866 89.2781,-16.1311 98.9935,-50.04071 -0.4579,-6.8454 -3.1275,-12.49509 -8.3401,-5.0766 -26.7546,29.86128 -65.1477,37.93736 -91.3787,33.72309 z"
+       id="path3868"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csccc" />
   </g>
 </svg>
--- a/share/hedgewars/Data/Locale/ar.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/ar.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -152,7 +152,6 @@
 02:01=%1 wants to play Ecco the dolphin
 02:01=%1 has gone to visit Aquaria
 02:01=%1 has found the lost city of Atlantis
-02:01=%1 aims for the lead role in Bioshock 3
 02:01=Your doggy paddle could use a little work, %1
 02:01=%1 should have brought a jet ski
 02:01=%1 doesn't like watersports
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/campaigns_en.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,19 @@
+A Classic Fairytale-first_blood.desc="Help Leaks a lot to complete his training and become a proper hedgehog warrior. You will be trained in the art of rope, parachute, shoryuken and desert eagle."
+
+A Classic Fairytale-shadow.desc="Leaks a lot and Dense Cloud are going for hunting. Be prepared for the dangers awaiting you at the forest. Remember, make your choices wisely."
+
+A Classic Fairytale-journey.desc="Leaks a lot has to go to the other side of the island. Be fast and cautious."
+
+A Classic Fairytale-united.desc="After his long journey Leaks a lot is finally back to the village. However, there isn't time to rest. You have to defend the village from the rage of the cannibals."
+
+A Classic Fairytale-backstab.desc="The monstrous cannibals are hunting Leaks a lot and his friends. Defeat them once again and protect your allies. Use your resources accordingly to defeat the incoming enemies!"
+
+A Classic Fairytale-dragon.desc="Leaks a lot has to get to the other side of the lake. Become a rope master and avoid get hit by the enemy shots."
+
+A Classic Fairytale-family.desc="Leaks a lot has to save once more his allies. Eliminate the enemy hogs and free your comrades. Use your resources carefully as they are limited. Drill some holes in the right spot and go close to the princess."
+
+A Classic Fairytale-queen.desc="Leaks a lot has to fight once again. In order to win he'll have to fight the traitor and use all the resources available. Defeat the enemy!"
+
+A Classic Fairytale-enemy.desc="What a great twist! Leaks a lot has to fight side by side with the… “cannibals” against the common enemy. The evil cyborgs!"
+
+A Classic Fairytale-epil.desc="Congratulations! Leaks a lot can finally leave in peace and get praised by his new friends and his tribe. Be proud for what you succeed! You can play again previous missions and see the other possible endings."
--- a/share/hedgewars/Data/Locale/cs.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/cs.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -175,7 +175,6 @@
 02:01=%1 chce hrát delfína Ecca
 02:01=%1 odešel navštívit akvárium
 02:01=%1 našel ztracené město Atlantidu
-02:01=%1 míří na hlavní roli v Bioshocku 3
 02:01=Na tvém stylu čubička by ještě chtělo zapracovat, %1
 02:01=%1 si neměl vozit vodní lyže
 02:01=%1 nemá rád vodní sporty
@@ -447,8 +446,8 @@
 03:51=Nalezeno na zemi
 03:52=NEPOUŽITO
 03:53=Typ 40
-03:54=Vytvořit něco
-03:55=Užitečnost
+;03:54=Vytvořit něco
+03:54=Užitečnost
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Zaútoč na nepřítele pomocí obyčejného granátu.|Exploduje jakmile časovač dojde k nule.|1-5: Nastavuje časovač|Útok: Drž pro hození větší silou
@@ -506,8 +505,8 @@
 04:51=Získat ve volném záběru vrhá kouli bláta.|Žihadla bit, a srazí prasata zpět.
 04:52=NEPOUŽITO
 04:53=Vydejte se na dobrodružství v čase a prostoru,|přičemž vaši kamarádi bojovat dál sám.|Být připraven vrátit kdykoliv,|nebo náhlé smrti nebo pokud jsou všichni poraženi.|Prohlášení. Nefunguje v náhlé smrti,|Pokud jste sami, nebo jste-li král.
-04:54=NEÚPLNÝ
-04:55=Sprej proud lepkavými vločkami.|Stavět mosty, pohřbít nepřátele, utěsnění tunely.|Buďte opatrní, nechcete dostat každý z vás!
+;04:54=NEÚPLNÝ
+04:54=Sprej proud lepkavými vločkami.|Stavět mosty, pohřbít nepřátele, utěsnění tunely.|Buďte opatrní, nechcete dostat každý z vás!
 
 ; Game goal strings
 05:00=Herní módy
--- a/share/hedgewars/Data/Locale/da.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/da.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -175,7 +175,6 @@
 02:01=%1 leger delfin
 02:01=%1 er taget til Lalandia
 02:01=%1 har fundet den forsvundne by Atlantis
-02:01=%1 håber på en hovedrolle i Bioshock 3
 02:01=Du burde arbejde lidt med din hundesvømning, %1
 02:01=%1 burde have medbragt jetski
 02:01=%1 bryder sig ikke om vandsport
@@ -447,8 +446,8 @@
 03:51=Lige til at samle op
 03:52=UBRUGT
 03:53=Årgang 40
-03:54=Byg noget
-03:55=Værktøj
+;03:54=Byg noget
+03:54=Værktøj
 
 ; Weapon Descriptions (use |as line breaks)
 04:00=Angrib dine fjender med en simpel granat.|Den eksploderer når uret når nul.|1-5: Indstil uret|Angrib: Hold knappen inde for at kaste hårdere
@@ -505,8 +504,8 @@
 04:51=Få et skud lige ind med en Mudderklat.|Bider en smule og slår fjender omkuld.
 04:52=UBRUGT
 04:53=Tag på et eventyr gennem tid og rum,|mens du efterlader kampen til dine kammerater.|Vær klar til at vende tilbage når som helst,|eller hvis Pludselig Død indtræder|eller alle dine andre pindsvin dør.|Advarsel! Virker ikke under Pludselig Død,|hvis du er alene eller er Konge.
-04:54=UFÆRDIG
-04:55=Sprøjt rundt med klistrende flammer.|Byg broer, begrav fjender, luk tunneler af.|Pas på ikke selv at få noget på dig.
+;04:54=UFÆRDIG
+04:54=Sprøjt rundt med klistrende flammer.|Byg broer, begrav fjender, luk tunneler af.|Pas på ikke selv at få noget på dig.
 
 ; Game goal strings
 05:00=Spilsystemer
--- a/share/hedgewars/Data/Locale/de.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/de.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -31,7 +31,7 @@
 00:28=Bohrkopfrakete
 00:29=Ballpistole
 00:30=Napalm-Luftangriff
-00:31=RC-Flugzeug
+00:31=Funkflugzeug
 00:32=Schwerkraft verringern
 00:33=Zusatzschaden
 00:34=Unverwundbarkeit
@@ -101,12 +101,10 @@
 02:00=Für %1 gehen alle Lichter aus!
 02:00=%1 kommt wieder!
 02:00=%1 ist urlaubsreif!
-02:00=%1 trifft seine Ahnen.
 02:00=%1 war nicht hartnäckig genug!
 02:00=%1 war einmal
 02:00=%1 hat wohl versagt
 02:00=Mach’s gut, %1!
-02:00=%1 hinterlässt Frau und Kind
 02:00=%1 hat die letzte Bazooka gefeuert
 02:00=%1 hat die letzte Granate geworfen
 02:00=%1 hat den letzten Kuchen gebacken
@@ -117,27 +115,27 @@
 02:00=%1 nahm einen Schuss zu viel
 02:00=%1 hätte wirklich ein Erste-Hilfe-Kit gebrauchen können
 02:00=%1 ist gegangen, um ein besseres Spiel zu spielen
-02:00=%1 verlässt sein Leben aus Wut
+02:00=%1 will nicht mehr
 02:00=%1 scheitert
 02:00=Schlecht, schlecht, %1 …
 02:00=%1 sollte lieber WarMUX spielen
-02:00=%1 hat versucht die Kugeln mit den Zähnen zu fangen
-02:00=%1 findet seinen Platz in der Walhall
+02:00=%1 hat versucht, die Kugeln mit den Zähnen zu fangen
+02:00=%1 findet einen Platz in der Walhall
 02:00=%1 geht den Weg der Dinosaurier
 02:00=%1 bringt die Igelspezies einen Schritt näher zum Aussterben
 02:00=%1 wird vermisst werden
 02:00=%1 ist ab jetzt ein Ex-Igel
 02:00=%1 sieht sich die Radieschen von unten an
-02:00=%1 hat aufgehört, zu sein
+02:00=%1 hat aufgehört zu existieren
 02:00=Verabschieden Sie sich von %1
 02:00=Für %1 gibt es keine Hoffnung mehr
 02:00=%1 trat von der Lebensbühne ab
 02:00=%1 erleidet ein spontanes multiples Organversagen
 02:00=%1 ist mausetot
-02:00=%1s Lebensuhr ist abgelaufen
+02:00=Für %1 ist die Lebensuhr abgelaufen
 02:00=Beraubt des Lebens, ruht %1 in Frieden
 02:00=%1 hatte eine geringe Schadenstoleranz
-02:00=%1 hat all seine Extraleben aufgebraucht
+02:00=%1 hat alle Extraleben aufgebraucht
 02:00=Ist ein Arzt im Haus?!
 02:00=%1 ist tot
 02:00=%1 ist hinüber
@@ -145,6 +143,13 @@
 02:00=Schade um %1
 02:00=Wir trauern um %1
 02:00=%1 beißt ins Gras
+02:00=%1 ist jetzt im Igel-Himmel
+02:00=%1 spielt nicht mehr mit
+02:00=%1 ist ausgeschieden
+02:00=Hat %1 eigentlich ein Testament gemacht?
+02:00=%1 spürt keinen Schmerz mehr
+02:00=%1 muss nicht mehr leiden
+02:00=%1 hat eine Abkürzung gefunden …
 
 ; Hog (%1) drowned
 02:01=%1 geht auf Tauchstation!
@@ -165,35 +170,33 @@
 02:01=%1 geht unter die Perlentaucher!
 02:01=%1 über Bord!
 02:01=%1 verlässt das sinkende Schiff
-02:01=%1 überschätzt seinen Auftrieb!
+02:01=%1 überschätzt den eigenen Auftrieb!
 02:01=%1 erliegt dem Sog der Tiefe!
 02:01=%1 geht der Sache auf den Grund!
 02:01=%1 wäre fast verdurstet!
 02:01=%1 macht »Gluck, gluck, gluck!«
 02:01=%1 macht »Platsch!«
-02:01=%1 vergaß seine Schwimmflügel
+02:01=%1 hätte die Schwimmflügel diesmal nicht zu Hause lassen sollen
 02:01=%1 hätte Schwimmunterricht nehmen sollen
-02:01=%1 ließ sein Surfbrett zu Hause
+02:01=%1 ließ das Surfbrett zu Hause
 02:01=%1 wird gewaschen
 02:01=%1 ist ein nasser Igel
-02:01=%1 hat seine Schwimmweste vergessen
+02:01=%1 hat die Schwimmweste vergessen
 02:01=%1 macht »Plitsch-platsch!«
 02:01=%1 sieht durstig aus
 02:01=%1 ist auf dem Meer verschollen
 02:01=%1 bekommt eine Seebestattung
-02:01=%1 übt sein Rückenschwimmen
-02:01=%1 geht auf der Suche nach der Titanic
+02:01=%1 übt Rückenschwimmen
 02:01=%1 ist nicht Jesus
 02:01=%1 hat ein Leck
 02:01=Wie viele Igel wohl da unten liegen?
 02:01=%1 macht das Meer etwas höher
 02:01=%1 ist absolut nicht Marinetauglich
-02:01=%1 glaubt, er sei ein Fisch
+02:01=%1 hält sich für einen Fisch
 02:01=Wenigstens ging die Sache nicht ins Klo, %1!
 02:01=Sonic konnte nicht schwimmen, %1 auch nicht
 02:01=%1 spielt »Flipper der Delphin«
 02:01=%1 ist von uns gegangen, um Aquaria zu besuchen
-02:01=%1 strebt die Hauptrolle in Bioshock 3 an
 02:01=%1 hasst Wassersport
 02:01=%1 wird für immer Blasen machen
 02:01=%1 war ganz, ganz knapp vor einem Floß
@@ -206,6 +209,15 @@
 02:01=%1, Igel, der mit dem Blubb
 02:01=Nächster Halt: Meeresgrund
 02:01=%1 hätte den Schwimmkurs nicht schwänzen sollen
+02:01=Fischers Fritze fischt frische ... Igel?!
+02:01=Grüß die Fische von uns, %1!
+02:01=%1 erkundet das Meer
+02:01=%1 folgt dem Ruf der Meere
+02:01=%1 ist jetzt ein Seeigel!
+02:01=Igel haben keine Kiemen, %1!
+02:01=%1 lässt sich diese  einmalige  Tauchgelegenheit nicht entgehen
+02:01=Und wir dachten %1 könnte nicht noch tiefer sinken …
+02:01=%1 zieht eine Etage tiefer
 
 ; Round starts
 02:02=Auf in die Schlacht!
@@ -275,6 +287,8 @@
 02:05=Vorräte!
 02:05=Ein Erste-Hilfe-Koffer!
 02:05=Ein Grund zur Hoffnung!
+02:05=Frisch aus dem Jungbrunnen
+02:05=Lebenszeit in Kisten
 
 ; New ammo crate
 02:06=Nachschub!
@@ -298,6 +312,10 @@
 02:06=Lassen Sie nicht zu, dass sich der Feind sie holt!
 02:06=Schönes neues Spielzeug!
 02:06=Eine geheimnisvolle Kiste!
+02:06=Ein eckiges Ü-Ei!
+02:06=Die Holzkiste der Pandora!
+02:06=Willst du mit mir spielen?
+02:06=Quadratisch, praktisch, … gefährlich?
 
 ; New utility crate
 02:07=Nützliches?
@@ -310,6 +328,7 @@
 02:07=Dies sollte gut sein!
 02:07=Verwenden Sie diese mit Bedacht
 02:07=Uff, diese Box ist schwer
+02:07=Futter für Strategen
 
 ; Hog (%1) skips his turn
 02:08=%1 ist so ein Langeweiler …
@@ -325,19 +344,17 @@
 02:08=%1 braucht etwas Motivation
 02:08=%1 ist ein Pazifist
 02:08=%1 hat eine Verschnaufpause
-02:08=%1 hat eine Pause
-02:08=%1 ist dem Schüttelfrost ausgesetz
-02:08=%1 hat kein Vertrauen in seine eigenen Fähigkeiten
+02:08=%1 nimmt sich eine Auszeit
+02:08=%1 hat kein Vertrauen in die eigenen Fähigkeiten
 02:08=%1 beschließt, nichts zu tun
 02:08=%1 lässt den Feind sich selbst vernichten
 02:08=%1 wäre furchtbar auf Partys
 02:08=%1 versteckt sich
 02:08=%1 verpasst die Gelegenheit
 02:08=%1 verschenkt die Chance
-02:08=%1 meint, das Beste, was er tun kann, ist nichts …
+02:08=%1 meint Nichtstun sei der beste Plan …
 02:08=%1 ist ein großes Weichei
-02:08=Gock, gock, gock, %1 ist ein Huhn
-02:08=%1 sieht etwas gelblich aus
+02:08=%1 hat Angst …
 02:08=%1 ist ein Feigling!
 02:08=%1 wartet auf Sudden Death
 02:08=%1 ist nicht so der Kämpfertyp
@@ -350,6 +367,16 @@
 02:08=%1 hat anscheinend Besseres zu tun
 02:08=%1 hat sich fast zu Tode erschrocken
 02:08=%1 ist eingeschlafen
+02:08=%1 ist wohl nur aus Versehen hier
+02:08=%1 steckt den Kopf in den Sand
+02:08=%1 spielt lieber Skat
+02:08=%1 guckt zu
+02:08=%1 vertraut auf das Karma
+02:08=%1 igelt sich ein
+02:08=%1 zählt Schäfchen
+02:08=%1 lässt sich die Sonne auf den Bauch scheinen
+02:08=%1 genießt die Stille
+02:08=%1 fragt sich ob es schon Zeit für den Winterschlaf ist
 
 ; Hog (%1) hurts himself only
 02:09=%1 sollte lieber zielen üben!
@@ -359,20 +386,17 @@
 02:09=%1 hat keinen Selbsterhaltungstrieb
 02:09=%1 ist durcheinander
 02:09=%1 vermasselt’s
-02:09=Das war ein schlechter Schuss, %1
+02:09=Das hat wohl nicht ganz geklappt, %1
 02:09=%1 geht ein wenig zu sorglos mit gefährlichen Waffen um
 02:09=%1 sollte eine Änderung der Laufbahn betrachten
-02:09=Das. War. Schlecht!
 02:09=Nein, nein, nein, %1, Sie müssen auf den Feind schießen!
 02:09=%1 bewegt sich einen Schritt näher zum Selbstmord
 02:09=%1, Helfer des Feindes
-02:09=Das war dumm, %1
+02:09=%1 hatte das anders geplant
 02:09=%1 lebt nach dem Mantra des »Ohne Schmerz kein Sieg!«
 02:09=%1 ist verwirrt
-02:09=%1 ist geistig verwirrt
 02:09=%1 verletzt sich selbst
 02:09=%1 blamiert sich!
-02:09=%1 ist ein Trottel!
 02:09=%1 ist ungeschickt
 02:09=%1 zeigt dem Feind, wozu er fähig ist
 02:09=%1 ist nicht perfekt
@@ -382,8 +406,15 @@
 02:09=Wie peinlich!
 02:09=Ich hoffe, dass das niemand gesehen hat, %1
 02:09=%1 sollte dringend die Gebrauchsanweisung noch einmal durchlesen
-02:09=%1s hat eindeutig versagt
 02:09=%1s Schuss ging nach hinten los!
+02:09=%1 macht sich mit den Waffen vertraut
+02:09=%1 schießt ein Eigentor
+02:09=%1 kennt keinen Schmerz
+02:09=%1 mag Bumerangs und Jo-Jos
+02:09=Wer Anderen eine Grube gräbt …
+02:09=%1 wird vom Pech verfolgt
+02:09=Auch %1 macht mal Fehler
+02:09=Hoppla?!
 
 ; Hog (%1) shot an home run (using the bat and another hog)
 02:10=Home Run!
@@ -393,6 +424,10 @@
 02:10=%1 vor, noch ein Tor!
 02:10=Ausgezeichnet, %1!
 02:10=Bravo, %1!
+02:10=Sehr sportlich, %1!
+02:10=Flieg, Iglein, flieg!
+02:10=%1 lässt Igel fliegen
+02:10=%1 ist Physikstudent
 
 ; Hog (%1) has to leave (team is gone)
 02:11=%1 muss ins Bett!
@@ -410,6 +445,10 @@
 02:11=%1 verschwindet
 02:11=%1 ist futsch
 02:11=%1 hat wohl besseres zu tun
+02:11=%1 löst sich in Luft auf
+02:11=%1 bringt den Müll raus
+02:11=%1 flieht
+02:11=%1 braucht Urlaub
 
 ; Weapon Categories
 03:00=Zeitzünder-Granate
@@ -467,8 +506,8 @@
 03:51=Am Boden gefunden
 03:52=NICHT IN VERWENDUNG
 03:53=Typ 40
-03:54=Baue etwas
-03:55=Werkzeug
+;03:54=Baue etwas
+03:54=Werkzeug
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Greife deine Feinde mit einfachen Granaten an.|Der Zeitzünder steuert den Explosionszeitpunkt.|1-5: Zeitzünder einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
@@ -502,7 +541,7 @@
 04:28=Kurz nach dem Start wird diese Rakete beginnen,|sich durch soliden Grund zu graben. Sobald sie|wieder austritt oder der Zeitzünder abläuft,|wird sie explodieren.|Angriff: Halten, um mit mehr Kraft zu feuern
 04:29=Das ist nichts für kleine Kinder! Die Ballpistole|feuert Tonnen kleiner farbiger Bälle, die mit|Sprengstoff gefüllt sind.|Angriff: Mit voller Kraft feuern|Hoch/Runter: Im Feuern zielen
 04:30=Rufe ein Flugzeug, um ein Areal gezielt mit|tödlichem Napalm einzudecken. Gut gezielt|lassen sich so große Teile der Karte auslöschen.|Links/Rechts: Angriffsrichtung wählen|Cursor: Zielgebiet wählen und Angriff starten
-04:31=Das RC-Flugzeug kann Kisten einsammeln und weit|entfernte Igel angreifen. Steuere es direkt in|ein Opfer oder wirf erst einige Bomben ab.|Angriff: Flugzeug starten und Bomben abwerfen|Weiter Sprung: "Ritt der Walküren"|Hoch/Runter: Flugzeug lenken
+04:31=Das Funkflugzeug kann Kisten einsammeln und weit|entfernte Igel angreifen. Steuere es direkt in|ein Opfer oder wirf erst einige Bomben ab.|Angriff: Flugzeug starten und Bomben abwerfen|Weiter Sprung: "Ritt der Walküren"|Hoch/Runter: Flugzeug lenken
 04:32=Niedrige Schwerkraft ist effektiver als jede|Diät! Springe höher und weiter oder lass|einfach deine Gegner noch weiter fliegen.|Angriff: Aktivieren
 04:33=Manchmal muss es eben doch ein bisschen|mehr sein …|Angreifen: Aktivieren
 04:34=Can’t touch me!|Angreifen: Aktivieren
@@ -525,8 +564,8 @@
 04:51=Wirf mit Dreck um dich!|Schmerzt ein wenig und schubst Igel weg.
 04:52=NICHT IN VERWENDUNG
 04:53=Unternimm eine Reise durch Zeit und Raum,|während du deine Kameraden alleine am Schlachtfeld zurücklässt.|Sei darauf vorbereitet jederzeit wieder zurückzukommen,|oder auf Sudden Death wenn sie alle besiegt wurden.|Disclaimer: Nicht funktionstüchtig wenn in Sudden Death,|wenn du alleine bist - oder der König.
-04:54=IN ARBEIT
-04:55=Versprühe einen Strahl klebriger Flocken.|Baue Brücken, begrabe Gegner, versiegle Tunnel.|Pass auf, dass du selbst nichts abbekommst!
+;04:54=IN ARBEIT
+04:54=Versprühe einen Strahl klebriger Flocken.|Baue Brücken, begrabe Gegner, versiegle Tunnel.|Pass auf, dass du selbst nichts abbekommst!
 
 ; Game goal strings
 05:00=Spielmodifikationen
--- a/share/hedgewars/Data/Locale/en.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/en.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -45,7 +45,7 @@
 00:42=Portable Portal Device
 00:43=Piano Strike
 00:44=Old Limburger
-00:45=Sine Gun (beta)
+00:45=Sine Gun
 00:46=Flamethrower
 00:47=Sticky Mine
 00:48=Hammer
@@ -178,7 +178,6 @@
 02:01=%1 wants to play Ecco the dolphin
 02:01=%1 has gone to visit Aquaria
 02:01=%1 has found the lost city of Atlantis
-02:01=%1 aims for the lead role in Bioshock 3
 02:01=Your doggy paddle could use a little work, %1
 02:01=%1 should have brought a jet ski
 02:01=%1 doesn't like watersports
@@ -445,13 +444,15 @@
 03:46=Hot Hot Hot!
 03:47=Stick these somewhere useful!
 03:48=It's Hammer time!
-03:49=Does what you guess
+03:49=Bring back the dead TO hell!
 03:50=Moles fan
 03:51=Found on the ground
 03:52=UNUSED
 03:53=Type 40
-03:54=Build something
-03:55=Utility
+;03:54=Build something
+03:54=Utility
+03:55=It doesn't get cooler than this!
+03:56=Please use or misuse
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Attack your enemies using a simple grenade.|It will explode once its timer reaches zero.|1-5: Set grenade's timer|Attack: Hold to throw with more power
@@ -504,12 +505,13 @@
 04:47=Double the fun with two spiky, sneaky, sticky mines.|Set up a chain reaction or defend yourself (or both!)|Attack: Hold to shoot with more power (twice)
 04:48=Why should the moles get all the abuse?|Wacking a hog can be just as fun! A good|blow from this hammer will shave off one|third of a hog's health and plunge them|underground.|Attack: Activate
 04:49=Resurrect your friends!|But beware that this also resurrects your foes.|Attack: Keep attack pressed to resurrect slowly|Up: Accelerate resurrection
-04:50=Is someone hiding underground?|Dig them out with a drill strike!|Timer controls how far it will dig.
-04:51=Get in a free shot by hurling a ball of mud.|Stings a bit, and knocks hogs back.
+04:50=Is someone hiding underground?|Dig them out with a drill strike!|Timer controls how far it will dig.|Left/Right: Determine attack direction|Cursor: Select target region
+04:51=Get in a free shot by hurling a ball of mud.|Stings a bit, and knocks hogs back.|Attack: Hold to shoot with more power
 04:52=UNUSED
-04:53=Take a trip through time and space,|while leaving your comrades to fight on alone.|Be prepared to return at any time,|or for Sudden Death or if they are all defeated.|Disclaimer. Does not function in Sudden Death,|if you are alone, or if you are a King.
-04:54=INCOMPLETE
-04:55=Spray a stream of sticky flakes.|Build bridges, bury enemies, seal off tunnels.|Be careful you don't get any on you!
+04:53=Take a trip through time and space,|while leaving your comrades to fight on alone.|Be prepared to return at any time,|or for Sudden Death or if they are all defeated.|Disclaimer. Does not function in Sudden Death,|if you are alone, or if you are a King.|Attack: Activate
+04:54=Spray a stream of sticky flakes.|Build bridges, bury enemies, seal off tunnels.|Be careful you don't get any on you!|Attack: Activate|Up/Down: Continue aiming|Left/Right: Modify spitting power
+04:55=Bring back the ice-age!|Freeze hedgehogs, make the floor slippery or|save yourself from drowning by freezing the water.|Attack: Shoot
+04:56=You can throw two cleavers at your enemy,|block passages and tunnels and even use them for climbing!|Be careful! Playing with knifes is dangerous.|Attack: Hold to shoot with more power (twice)
 
 ; Game goal strings
 05:00=Game Modes
--- a/share/hedgewars/Data/Locale/es.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/es.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -171,7 +171,6 @@
 02:01=%1 prefiere jugar a Ecco the dolphin
 02:01=%1 ha ido a visitar Aquaria
 02:01=%1 ha encontrado la ciudad perdida de la Atlántida
-02:01=%1 hace audiciones para el personaje principal de Bioshock 3
 02:01=Necesitas practicar más tu estilo perrito, %1
 02:01=Necesitas practicar más tu brazada, %1
 02:01=Necesitas practicar más tu estilo mariposa, %1
@@ -446,8 +445,8 @@
 03:51=Me la encontré por el suelo
 03:52=SIN USAR
 03:53=Tipo 40
-03:54=Construye algo
-03:55=Herramienta
+;03:54=Construye algo
+03:54=Herramienta
 
 ; Descripciones de armamento ( líneas delimitadas con | )
 04:00=Ataca a tus enemigos usando una sencilla granada.|Explotará una vez el temporizador llegue a cero.|1-5: ajustar temporizador.|Atacar: mantener presionado para lanzar más lejos.
@@ -504,8 +503,8 @@
 04:51=¿Qué hay más barato que el barro?|Un tiro gratis gracias a la bola de barro.|Hará que el enemigo salga volando|y escuece un poco si te entra en los ojos.
 04:52=SIN USAR
 04:53=Vive una trepidante aventura a través del|espacio y el tiempo mientras tus compañeros|siguen luchando en tu lugar.|Estate preparado para volver en cualquier momento,|o al llegar la Muerte súbita si te has quedado solo.|Aviso: no funciona durante la Muerte súbita,|si estás solo o si eres el rey.
-04:54=INCOMPLETO
-04:55=Esparce un chorro de pegajoso barro.|Construye puentes, entierra enemigos o cierra túneles.|¡Ten especial cuidado de no mancharte!
+;04:54=INCOMPLETO
+04:54=Esparce un chorro de pegajoso barro.|Construye puentes, entierra enemigos o cierra túneles.|¡Ten especial cuidado de no mancharte!
 
 ; Game goal strings
 05:00=Modos de juego
--- a/share/hedgewars/Data/Locale/fi.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/fi.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -159,7 +159,6 @@
 02:01=%1 haluaa näytellä Ecco-delfiiniä
 02:01=%1 lähti käymään Aquariassa
 02:01=%1 löysi Atlantiksen kadonneen kaupungin
-02:01=%1 tähtää Bioshock 3:en päärooliin
 02:01=%1:n olisi pitänyt ottaa vesiskootteri mukaan
 02:01=%1 ei pidä vesiurheilusta
 02:01=%1 puhaltaa ikuisesti kuplia
--- a/share/hedgewars/Data/Locale/fr.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/fr.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -3,22 +3,22 @@
 00:00=Grenade
 00:01=Grenade à fragmentation
 00:02=Bazooka
-00:03=Abeille Missile
+00:03=Abeille à tête chercheuse
 00:04=Fusil
 00:05=Marteau-piqueur
 00:06=Passer
-00:07=Corde ninja
+00:07=Grappin
 00:08=Mine
-00:09=Révolver
+00:09=Pistolet
 00:10=Dynamite
 00:11=Batte de baseball
 00:12=Shoryuken
 00:13=sec
 00:14=Parachute
-00:15=Attaque aérienne
-00:16=Lancer de mines
+00:15=Frappe aérienne
+00:16=Pluie de mines
 00:17=Chalumeau
-00:18=Poutre
+00:18=Construction
 00:19=Téléportation
 00:20=Changer de hérisson
 00:21=Mortier
@@ -29,39 +29,44 @@
 00:26=Bombe pastèque
 00:27=Grenade infernale
 00:28=Roquette perforante
-00:29=Canon à billes
+00:29=Mitrailleuse à balles
 00:30=Napalm
 00:31=Avion télécommandé
 00:32=Faible gravité
-00:33=Plus de dégâts
+00:33=Dégats supplémentaires
 00:34=Invulnérable
 00:35=Temps supplémentaire
 00:36=Visée laser
 00:37=Vampirisme
-00:38=Fusil de sniper
+00:38=Sniper
 00:39=Soucoupe Volante
 00:40=Cocktail Molotov
 00:41=Piaf
-00:42=Fusil à portails
-00:43=Attaque du Piano
+00:42=Générateur de portails
+00:43=Chute de Piano
 00:44=Vieux Limburger
-00:45=Fusil Sinus (bêta)
+00:45=Fusil Sinusoidale
 00:46=Lance-flammes
 00:47=Mines adhésives
 00:48=Marteau
 00:49=Resurrecteur
 00:50=Attaque perforante
 00:51=Boule de terre
+00:52=Aucune arme sélectionnée
+00:53=Boîte temporelle
+00:54=Aéro-Sol
+00:55=Congélateur
+00:56=Hachoir
 
 01:00=C'est parti !
 01:01=Round ex-aequo
 01:02=%1 gagne !
 01:03=Volume %1%
 01:04=Pause
-01:05=Quitter (Y/Esc) ?
+01:05=Quitter? (Y/Esc) (Clique pour reprendre)
 01:06=Mort subite !
 01:07=%1 Restantes
-01:08=Essence
+01:08=Carburant
 
 ; Event messages
 ; Hog (%1) died
@@ -78,41 +83,42 @@
 02:00=%1 fait l'ultime sacrifice !
 02:00=%1 sera profondément regretté !
 02:00=%1 a un anévrisme !
-02:00=%1 s'en va, laissant sa femme et ses enfants
-02:00=%1 a lancé sa dernière roquette
-02:00=%1 a jeté sa dernière grenade
-02:00=%1 a fait cuire son dernier gâteau
-02:00=%1 s'est balancé sur sa dernière corde
-02:00=%1 a appelé son dernier raid aérien
-02:00=%1 a rechargé son dernier fusil de chasse
-02:00=%1 a envoyé son dernier melon
-02:00=%1 a tiré sa dernière balle
-02:00=%1 aurait vraiment dû utiliser une caisse de vie
-02:00=%1 est parti pour jouer à un meilleur jeu
+02:00=%1 s'en va, laissant sa femme et ses enfants !
+02:00=%1 a lancé sa dernière roquette !
+02:00=%1 a jeté sa dernière grenade !
+02:00=%1 a fait cuire son dernier gâteau !
+02:00=%1 s'est balancé sur sa dernière corde !
+02:00=%1 a appelé son dernier raid aérien !
+02:00=%1 a rechargé son dernier fusil de chasse !
+02:00=%1 a envoyé son dernier melon !
+02:00=%1 a tiré sa dernière balle !
+02:00=%1 aurait vraiment dû utiliser une caisse de vie !
+02:00=%1 est parti pour jouer à un meilleur jeu !
 02:00=%1 est mauvais joueur !
-02:00=%1 a échoué
+02:00=%1 a échoué !
 02:00=Pauvre %1...
-02:00=%1 préfère Warmux
-02:00=%1 a bloqué les balles avec sa tête
-02:00=%1 s'en va à la façon des dinosaures
-02:00=%1 fait avancer les hérissons d'un pas vers l'extinction
-02:00=%1 me fait pleurer une larme
-02:00=%1 a cessé d'être
-02:00=Dites au revoir à %1
-02:00=Plus d'espoir restant pour %1
-02:00=%1 ferme le rideau final
-02:00=%1 souffre d'Échec Spontané et Massif d'Existence
-02:00=%1 est mort
-02:00=%1 est raide mort
-02:00=%1 n'existe plus
-02:00=%1 est périmé
-02:00=Privé de la vie, %1, reste en paix
-02:00=%1 rejoins le chœur invisible
+02:00=%1 préfère Warmux !
+02:00=%1 a bloqué les balles avec sa tête !
+02:00=%1 s'en va à la façon des dinosaures !
+02:00=%1 fait avancer les hérissons d'un pas vers l'extinction !
+02:00=%1 me fait pleurer une larme !
+02:00=%1 a cessé d'être !
+02:00=Dites au revoir à %1 !
+02:00=Plus d'espoir restant pour %1 !
+02:00=%1 ferme le rideau final !
+02:00=%1 souffre d'Échec Spontané et Massif d'Existence !
+02:00=%1 est mort !
+02:00=%1 est raide mort !
+02:00=%1 n'existe plus !
+02:00=%1 est périmé !
+02:00=Privé de la vie, %1, reste en paix !
+02:00=%1 rejoins le chœur invisible !
 02:00=Adieu %1, nous tenions beaucoup a toi !
-02:00=%1 avait une faible tolérance aux coups à balles
-02:00=%1 aurait dû utiliser une vie supplémentaire
-02:00=%1 rejoint ses ancêtres
+02:00=%1 avait une faible tolérance aux coups à balles !
+02:00=%1 aurait dû utiliser une vie supplémentaire !
+02:00=%1 rejoint ses ancêtres !
 02:00=%1 sera muet comme une tombe
+
 ; Hog (%1) drowned
 02:01=%1 joue au sous-marin !
 02:01=%1 imite le Titanic !
@@ -148,7 +154,6 @@
 02:01=%1 veut jouer à Ecco the Dolphin
 02:01=%1 est parti visiter l'aquarium
 02:01=%1 a trouvé la cité perdue d'Atlantide
-02:01=%1 se propose pour le rôle principal de Bioshock 3
 02:01=Ta pagaie pour chiens aurait pû servir, %1
 02:01=%1 aurait dû acheter un jet ski
 02:01=%1 n'aime pas les sports aquatiques
@@ -162,6 +167,7 @@
 02:01=%1 flotte comme une enclume
 02:01=%1 a oublié son masque et ses palmes
 02:01=%1 a vu une sirène !
+
 ; Match starts
 02:02=Aux armes !
 02:02=Prêts à combattre !
@@ -210,10 +216,13 @@
 02:02=Ave Caesar, Morituri te salutant !
 02:02=Combattez jusqu'à la fin !
 02:02=Que la force soit avec vous !
+
 ; Round ends (win; unused atm)
 02:03=...
+
 ; Round ends (draw; unused atm)
 02:04=...
+
 ; New health crate
 02:05=Pharmacie !
 02:05=De l'aide !
@@ -232,6 +241,7 @@
 02:05=Voilà la Croix Rouge !
 02:05=Médecin Sans Frontière à votre service !
 02:05=Hausse de l'espérance de vie en vue
+
 ; New ammo crate
 02:06=Plus d'armes !
 02:06=Du renfort !
@@ -256,6 +266,7 @@
 02:06=L'espoir fait vivre
 02:06=Surement quelquechose d'utile
 02:06=Que la chance soit avec vous !
+
 ; New utility crate
 02:07=Boite à outils !
 02:07=Ça peut être pratique...
@@ -269,6 +280,7 @@
 02:07=Elle s'est peut être blessée en tombant, vous devriez aller la voir
 02:07=Bob le bricoleur sait être généreux
 02:07=Le moment donné par le hasard vaut mieux que le moment choisi
+
 ; Hog (%1) skips his turn
 02:08=%1 est une lopette...
 02:08=%1 est trooooop rasant...
@@ -310,6 +322,7 @@
 02:08=Les gens heureux n'ont pas besoin de se presser selon %1
 02:08=Ne crains pas d'avancer lentement, crains seulement de t'arrêter %1
 02:08=Patience ! Avec le temps, l'herbe devient du lait
+
 ; Hog (%1) hurts himself only
 02:09=%1 devrait apprendre à viser !
 02:09=%1 s'en veut
@@ -345,43 +358,50 @@
 02:09=%1 ne peut pas échapper à son destin
 02:09=%1 a pris son arme dans le mauvais sens
 02:09=%1 est surement daltonien
+
 ; Hog shot an home run (using the bat and another hog)
 02:10=Home Run !
 02:10=C'est un oiseau ! C'est un avion ! ...
 02:10=Hors du parc !
 02:10=Coup gagnant !
 02:10=I believe I can FLY ! I believe I can... *boum*
+
+; Hog (%1) Has to leave (team is gone)
+02:11=%1 a du aller se coucher!
+02:11=%1 est trop occupé pour jouer
+02:11=%1 a du partir
+
 ; Weapon Categories
 03:00=Grenade à retardement
 03:01=Grenade à retardement
 03:02=Arme balistique
 03:03=Arme téléguidée
 03:04=Fusil (plusieurs coups)
-03:05=Engin excavateur
+03:05=Outil de creusage
 03:06=Action
-03:07=Véhicule utilitaire
+03:07=Moyen de transport
 03:08=Bombe de proximité
 03:09=Révolver (à plusieurs coups)
 03:10=BOUM!
 03:11=Bonk!
 03:12=Arts martiaux
 03:13=Non Utilisé
-03:14=Véhicule utilitaire
+03:14=Moyen de transport
 03:15=Attaque aéroportée
 03:16=Attaque aéroportée
-03:17=Engin excavateur
+03:17=Outil de creusage
 03:18=Utilitaire
-03:19=Véhicule utilitaire
+03:19=Moyen de transport
 03:20=Action
 03:21=Engin balistique
 03:22=Appelez-moi Indiana !
 03:23=Arts (vraiment) martiaux !
 03:24=Le gâteau n'est PAS un mensonge !
 03:25=Déguisement
-03:26=Grenade à fragmentation
-03:27=Grenade infernale
-03:28=Missile balistique
-03:29=Missile balistique
+03:26=Grenade juteuse
+03:27=Grenade enflammée
+03:28=Arme balistique
+03:29=Arme balistique
 03:30=Attaque aéroportée
 03:31=Bombe à déclenchement télécommandé
 03:32=Effet temporaire
@@ -394,21 +414,37 @@
 03:39=Moyen de transport
 03:40=Grenade incendiaire
 03:41=Un supporter enragé de Squawks
+; they wont get the original joke the song is in english so Ill use "for science" instead since its said a lot in the game
+03:42=Pour la science ...
+03:43=Joue la douloureuse sonate de Beethoven
+03:44=A consommer de préference avant : 1923
+03:45=La puissance de la science
+03:46=Chaud ! Chaud ! Chaud!
+03:47=Colle ça là où ce sera utile!
+03:48=C'est l'heure de marteler !
+03:49=Ramène les morts en ENFER !!!
+03:50=Un fan de taupes
+03:51=Trouvé par terre
+03:52=UNUSED
+03:53=Type 40
+03:54=Trace ta route
+03:55=Qui a commandé un herisson-glacé?
+03:56=Grand couteau, Multi-fonctions !
 
 ; Weapon Descriptions (use | as line breaks)
-04:00=Attaquez vos ennemis en utilisant une simple grenade.|Elle explosera une fois que le compte à rebours atteindra zéro.|1-5: Lancez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
-04:01=Attaquez vos ennemis en utilisant une bombe à retardement.|Elle se désintégrera en de multiples petites bombes |quand le compte à rebours atteindra zéro|1-5 : Lancez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
-04:02=Attaquez vos ennemis en utilisant un missile balistique|subissant l'influence du vent.|Attaque : maintenez pour tirer avec plus de force
-04:03=Lancez une bombe téléguidée qui se verrouillera|sur la cible choisie. Ne tirez pas à pleine puissance|pour une meilleure précision.|Curseur : choix de la cible|Attaque : maintenez pour tirer avec plus de force
+04:00=Attaquez vos ennemis en utilisant une simple grenade.|Elle explosera une fois que le compte à rebours atteindra zéro.|1-5: Réglez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
+04:01=Attaquez vos ennemis en utilisant une grenade a fragmentation.|Elle se désintégrera en de multiples petits fragements explosifs |quand le compte à rebours atteindra zéro|1-5 : Réglez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
+04:02=Attaquez vos ennemis en utilisant un bazooka dont la roquette|subira l'influence du vent.|Attaque : maintenez pour tirer avec plus de force
+04:03=Lancez une abeille à tête chercheuse qui se verrouillera|sur la cible choisie. Ne tirez pas à pleine puissance|pour une meilleure précision.|Curseur : choix de la cible|Attaque : maintenez pour tirer avec plus de force
 04:04=Attaquez votre ennemi en utilisant un fusil à deux coups.|Grâce à son pouvoir de dispersion vous n'avez pas besoin de frapper directement sur la cible|pour toucher votre ennemi.|Attaque : tirez (coups multiples)
 04:05=Descendez sous terre ! Utilisez le marteau-piqueur pour creuser un trou|dans le sol et atteindre d'autres zones.|Attaque : commencez/achevez de creuser
 04:06=Vous en avez marre ? Pas moyen d'attaquer ? Vous économisez vos munitions ?|Pas de problèmes ! Passez simplement votre tour, espèce de lâche !|Attaque : Passez votre tour sans combattre
-04:07=Franchissez les grandes distances en utilisant par intervalles la |corde ninja. Utilisez votre élan pour vous lancer contre les autres hérissons,|balancez leurs des grenades ou d'autres armes explosives.|Attaque : Tirer ou lâchez la corde ninja|Saut longue distance : jetez des grenades ou des armes similaires
+04:07=Franchissez les grandes distances en utilisant par intervalles le |Grappin. Utilisez votre élan pour vous lancer contre les autres hérissons,|leur balancer des grenades ou d'autres armes explosives.|Attaque : Tirer ou lâchez la corde ninja|Saut longue distance : jetez des grenades ou des armes similaires
 04:08=Maintenez vos ennemis à distance en laissant une mine|dans les passages étroits ou juste sous leurs pieds. Assurez-vous|que vous pouvez vous sauver avant son déclenchement !|Attaque : lâchez la mine à vos pieds
-04:09=Vous n'êtes pas sûr de ce que vous voulez ? Utilisez l'Aigle| du Désert pour attaquer en utilisant vos quatre coups. Poussez dans l'eau vos ennemis ou transpercez leur défense|Attaque : tirez (coups multiples)
+04:09=Vous n'êtes pas sûr de ce que vous voulez ? Utilisez le| pistolet pour attaquer en utilisant vos quatre coups. Poussez dans l'eau vos ennemis ou transpercez leur défense|Attaque : tirez (coups multiples)
 04:10=La force brute est toujours une possibilité. Lancez cet explosif|classique sur vos ennemis et prenez le temps de vous retirer.|Attaque : Lâchez la dynamite à vos pieds
-04:11=Débarrassez-vous des hérissons ennemis en leur donnant des coups pour les chasser |vers d'autres horizons ou en les jetant à l'eau. Ou bien préférez-vous|envoyer quelques tonneaux ou mines sur vos ennemis ?|Attaque : frappez un bon coup sur tout ce qui bouge.
-04:12=Allez au combat rapproché corps à corps pour utiliser toute la force presque mortelle de ces arts martiaux.|Attaque : lancez un coup de poing fulgurant
+04:11=Débarrassez-vous des hérissons ennemis en leur donnant des coups pour les éjecter |vers d'autres horizons ou en les jetant à l'eau. Ou bien préférez-vous|envoyer quelques tonneaux ou mines sur vos ennemis ?|Attaque : frappez un bon coup sur tout ce qui bouge.
+04:12=Allez au corps-à-corps pour utiliser toute la force presque mortelle de ces arts martiaux.|Attaque : lancez un coup de poing fulgurant
 04:13=non-utilisé
 04:14=Vous avez le vertige ? Prenez donc un parachute.|Il se déploiera lorsque|vous serez tombé trop loin|et épargnera le choc de la chute à votre hérisson.|Attaque: Dépliez le parachute
 04:15=Appelez le 3615 BOMBE pour commander une frappe aérienne dévastatrice sur vos ennemis.|Gauche/Droite : Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible
@@ -416,36 +452,44 @@
 04:17=vous avez besoin d'un abri ? de pousser quelques ennemis dans l'eau ? Utilisez le chalumeau| pour creuser un tunnel dans le sol, vous protéger ou faire de nouvelles victimes.|Attaque : Commencez/cessez de creuser.
 04:18=Vous avez besoin de vous protéger davantage ou de passer un |obstacle infranchissable ? Placez quelques poutrelles|où vous voulez .|Gauche/Droite : Choisissez la poutrelle à placer|Curseur : Placez la poutrelle dans la bonne position
 04:19=La téléportation utilisée au bon moment|peut être bien plus efficace|que la plupart des autres armes|car elle vous permet de sauver des hérissons de situations dangereuses|en quelques secondes.|Curseur : Choisissez la zone cible
-04:20=Vous permet de jouer la partie en cours avec|un hérisson différent.|Attaque : Activez le changement de hérisson
+04:20=Vous permet de changer de herisson|pendant votre tour.|Attaque : Activez le changement de hérisson
 04:21=Tirez un missile balistique qui va|envoyer de multiples bombes au point d'impact.|Attaque : Tirez à pleine puissance
 04:22=Ce n'est pas réservé à Indiana Jones ! Le fouet est une|arme bien utile dans plusieurs situations. Particulièrement|quand vous devez hisser quelqu'un en haut d'une falaise.|Attaque : Frappez tout ce qui bouge devant vous
-04:23=Si vous n'avez rien à perdre, voilà qui peut être |bien pratique. Sacrifiez votre hérisson en le lançant dans une direction| particulière. Il heurtera tout sur son passage avant |d'exploser finalement.|Attaque : Lancer l'attaque mortelle et dévastatrice
-04:24=Joyeux anniversaire ! Lancez ce gâteau, faites-le atterrir|tout près de vos ennemis et offrez-leur une fête explosive.|Le gâteau peut franchir presque tous les environnements mais|il se peut qu'il explose à mi-chemin.|Attaque : Lancez le gâteau ou bien faites-le s'arrêter et exploser
-04:25=Arme de séduction massive ! Utilisez le déguisement pour amener vos ennemis| à sauter vers votre hérisson (et donc vers un piège ou un trou).|Attaque : Utilisez le déguisement et tentez de séduire un autre hérisson
-04:26=Envoyez cette pastèque explosive à la tête de vos ennemis. Une fois le compte-à-rebours achevé, elle se désintégrera en de multiples fragments explosifs|1-5 : Lancer le compte à rebours|Attaque : Maintenez pour tirer avec plus de puissance
-04:27=Faites tomber un déluge de feu sur vos adversaires en utilisant|cet explosif dévastateur.|Ne vous tenez pas trop prêt|de l'impact car les flammes peuvent durer longtemps|Attaque : Maintenez pour tirer avec plus de puissance
-04:28=Peu après le lancement de ce missile, il va se mettre|à creuser le sol le plus résistant et explosera|une fois son détonateur amorcé ou une fois atteint l'air libre.|Attaque : Maintenez pour tirer avec plus de puissance
+04:23=Si vous n'avez rien à perdre, voilà qui peut être |bien pratique. Sacrifiez votre hérisson en le lançant dans une direction| particulière. Il heurtera tout sur son passage avant |d'exploser.|Attaque : Lancer l'attaque mortelle et dévastatrice
+04:24=Joyeux anniversaire ! Lancez ce gâteau, et déposez-le|tout près de vos ennemis et offrez-leur une fête explosive.|Le gâteau peut franchir presque tous les environnements mais|il se peut qu'il explose à mi-chemin ou apès votre cible.|Attaque : Lancez le gâteau ou bien faites-le s'arrêter et exploser
+04:25=Arme de séduction massive ! Utilisez le déguisement pour ammener vos ennemis| à sauter vers votre hérisson (et donc vers un piège ou un trou).|Attaque : Utilisez le déguisement et tentez de séduire un autre hérisson
+04:26=Envoyez cette pastèque explosive à la tête de vos ennemis. Une fois le compte-à-rebours achevé, elle se désintégrera en de multiples tranches explosives|1-5 : Régler le compte à rebours|Attaque : Maintenez pour tirer avec plus de puissance
+04:27=Faites tomber un déluge de feu sur vos adversaires en utilisant|cet explosif diabolique et dévastateur.|Ne vous tenez pas trop prêt|de l'impact car les flammes peuvent durer longtemps|Attaque : Maintenez pour tirer avec plus de puissance
+04:28=Peu après le lancement de cette roquette, elle va se mettre|à creuser le sol le plus résistant et explosera|une fois son compte à rebours ou une fois atteint l'air libre.|Attaque : Maintenez pour tirer avec plus de puissance
 04:29=Ce n'est pas un jouet pour les enfants ! La mitrailleuse envoie|des centaines de petites balles colorées explosives.|Attaque : Tirez à pleine puissance|Haut/Bas : Continuez à tirer
-04:30=Appelez un avion pour larguer une puissante giclée de napalm.|En la menant correctement cette attaque peut éradiquer|des zones entières du paysage, et notamment les hérissons qui auraient la malchance de se trouver là.|Gauche/Droite: Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible
+04:30=Appelez un avion pour larguer une pluie de napalm soumise à la force du vent.|En la menant correctement cette attaque peut éradiquer|des zones entières du paysage, et notamment les hérissons qui auraient la malchance de se trouver là.|Gauche/Droite: Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible
 04:31=L'avion télécommandé est l'arme idéale pour récolter des boites ou|attaquer des hérissons très éloignés. Une fois vos ennemis bombardés, vous pourrez lancer votre avion sur l'ennemi dans une explosion incendiaire.|Attaque : Lancez l'avion ou larguez des bombes|Saut longue distance : laissez les valkyries entrer dans la danse guerrière|Haut/Bas : Pilotez l'avion
-04:32=La fable gravité est plus efficace que n'importe quel régime ! Sautez|plus haut et franchissez de plus grandes distances ou bien faites voltiger vos ennemis |encore plus loin.|Attaque : Activez
+04:32=La faible gravité est plus efficace que n'importe quel régime ! Sautez|plus haut et franchissez de plus grandes distances ou bien faites voltiger vos ennemis |encore plus loin.|Attaque : Activez
 04:33=Parfois vous avez besoin d'un petit coup de pouce supplémentaire|pour gérer les dégâts.|Attaque : Activez
 04:34=Personne ne peut me toucher !|Attaque : Activez
 04:35=Parfois le temps passe trop vite. Grappillez quelques secondes de plus pour terminer votre attaque|Attaque : Activez
-04:36=Eh bien, parfois vous ratez complètement la cible. Demandez plutôt de l'aide|à la technologie de pointe actuelle pour bien viser.|Attaque : Activez
+04:36=Eh bien, parfois vous ratez complètement la cible. Demandez plutôt de l'aide|à la technologie de pointe pour bien viser.|Attaque : Activez
 04:37=Ne craignez pas la lumière du jour. Rafraichissez vous |d'un peu de sang en récupérant des points de vie sur les dégats faits aux ennemis.|Attaque : Activez
-04:38= Le fusil à lunette peut être une des armes les plus dévastatrices|de tout votre arsenal, toutefois il est totalement inefficace|en combat rapproché. Les dommages qu'il cause augmentent suivant|la distance de la cible.|Attaque : Tirez (deux fois)
-04:39=Volez vers d'autres secteurs de la carte en utilisant une soucoupe|volante. Ce moyen de transport, pas facile à dompter, vous|emportera vers presque tous les horizons du champ de bataille|Attaque : Activer|Haut/Gauche/Droite : Prenez de l'altitude et controllez votre direction
+04:38= Le sniper peut être une des armes les plus dévastatrices|de tout votre arsenal, toutefois il est totalement inefficace|en combat rapproché. Les dommages qu'il cause augmentent suivant|la distance de la cible.|Attaque : Tirez (deux fois)
+04:39=Volez vers d'autres secteurs de la carte en utilisant une soucoupe|volante. Ce moyen de transport, pas facile à dompter, vous|emportera vers presque tous les horizons du champ de bataille mais attention au carburant!|Attaque : Activer|Haut/Gauche/Droite : Prenez de l'altitude et controllez votre direction
 04:40=Mettez le feu à un territoire en utilisant cette bouteille remplie|de liquide inflammable.|Attaque : maintenez pour tirer avec plus de force
 04:41=Une arme naturelle qui peut suffire à remplacer la soucoupe volante.|Cet oiseau a du manger un vieux fromage pourri (du Limburger vous dites ?)|car ses oeufs ont comme quelquechose de ... toxique.|Le piaf peut donc transporter votre hérisson et balancer des œufs|sur vos ennemis !|Attaque : Activez et larguez des œufs|Haut/Gauche/Droite: voltigez vers une direction.
-04:42=Ce fusil à portails est capable de transporter instantanément hérissons,|tonneaux ou mines entre deux points du terrain. |Utilisez-le intelligemment et votre campagne sera un ... GRAND SUCCÈS !|Attaque : Crée un portail|Modificateur : Change la couleur du portail
+04:42=Ce générateur de portails est capable de transporter instantanément hérissons,|tonneaux ou mines entre deux points du terrain. |Utilisez-le intelligemment et votre campagne sera un ... GRAND SUCCÈS !|Attaque : Crée un portail|Modificateur : Change la couleur du portail
 04:43=Faites de vos débuts musicaux un succès explosif !| Lâchez un piano depuis les cieux, mais attention ... si quelqu'un doit|jouer dessus, cela pourrait lui coûter la vie !|Curseur : Choix de la cible|F1-F9 : Jouer du piano
-04:44=Ce n'est pas juste un fromage, c'est une arme bactériologique !|Si il ne provoque que de faibles dommages, sa puissance se|trouve dans sa durée. Il empoisonnera tous les malchanceux|touchés par l'odeur et réduira leur vie à l'agonie !|1-5 : Lancez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force
-04:45=Tous ces cours de physique ont finalement payé,|lancez une onde Sinus dévastatrice sur vos ennemis.|Attention au recul ! (cette arme est incomplète)|Attaque : Activez
+04:44=Ce n'est pas juste un fromage, c'est une arme bactériologique !|Si il ne provoque que de faibles dommages, sa puissance se|trouve dans sa durée. Il empoisonnera tous les malchanceux|touchés par l'odeur et réduira leur vie à l'agonie !|1-5 : Réglez le minuteur de l'arme|Attaque : maintenez pour la lancer avec plus de force
+04:45=Tous ces cours de physique ont finalement payé,|lancez une onde Sinusoidale dévastatrice sur vos ennemis.|Attention au recul ! |Attaque : Activez
 04:46=Aspergez vos ennemis de flammes liquides ou creusez vous un passage dans le sol.|Hardi !|Attaque : Activez|Haut/Bas : Continuez à viser|Droite/Gauche : Changer la puissance de tir
 04:47=Doublez le fun avec deux mines, piquantes, furtives et collantes.|Provoquez une réaction en chaine dévastatrice et/ou défendez-vous ! |Attaque : maintenez pour tirer avec plus de force (deux fois)
 04:48=Outre une bonne bosse, un bon coup de ce marteau enlèvera un tiers de la santé |du hérisson ennemi et l'enfoncera dans le sol ou dans l'eau comme un vulgaire asticot !|Attaque : Activez
 04:49=Ressuscite vos amis oubliés six pieds sous terre ! Mais méfiez-vous, ressuscite également vos ennemis. |Attaque : Maintenez attaque pressée pour ressusciter lentement|Haut : Accélérer la résurrection
+04:50=Un ennemi se cache sous terre ?|Faîtes le sortir avec l'attaque perforante! |Un avion vous délivrera des roquettes perforantes qui creuseront vers le bas jusqu'a la fin du compte a rebours|ou du contact a l'air libre où elles exploseront|1-5 : Réglez le minuteur des roquettes|Gauche/Droite: Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible
+04:51=Gagnez un tir gratuit en lançant une boule de terre sur vos ennemis.|Elle poussera les herissons dans l'eau ou dans un trou afin d'utiliser votre deuxième arme pour l'achever|Attaque : Maintenez pour tirer avec plus de puissance
+04:52=UNUSED
+04:53=Faîtes un voyage dans le temps et l'espace en|laissant vos camarades se battre seuls!|Soyez préparé à revenir a n'importequel moment|ou lors d'une mort subite ou encore si tout vos camarades sont morts|Attention ne marche pas pendant la mort subite, si vous êtes le dernier survivant ou le roi.|Attaque : Activer
+04:54=Et voici le nouveau sol en bouteille! Ce spray produit des flocon collants sur lesquels vous pouvez marchez!|Construisez des pont,enterrez vos ennemis, scellez des tunnels.|Attention à ne pas en mettre sur vous!|Attaque : Activez|Haut/Bas : Continuez à viser|Droite/Gauche : Changer la puissance de tir
+04:55=Apportez l'ère glacière sur vos ennemis!|Avec le congélateur gelez les herissons rendez le sol glissant|et sauvez vous de la noyade en gelant l'eau!!|Attaque : Tirez
+04:56=Un couteau mais bien plus,|ce hachoir se lance sur les ennemis, bloc les passages et tunnels et|peut même servir d'appui pour gravir une montagne!|Mais attention à ne pas vous blesser.|Attaque : maintenez pour la lancer avec plus de force (deux fois)
+
 
 ; Game goal strings
 05:00=Modes de jeu
@@ -461,7 +505,13 @@
 05:10=Terrain indestructible : La plupart des armes sont incapables de modifier le terrain
 05:11=Munitions partagées : Toutes les équipes de la même couleur partagent leurs munitions
 05:12=Mines à retardement : Les mines exploseront après %1 seconde(s)
-05:13=Mines à retardement : Les mines explosent immédiatement
+05:13=Mines à retardement : Les mines explosent instentanément
 05:14=Mines à retardement : Les mines exploseront dans un délai compris entre 0 et 3 secondes
 05:15=Modificateur de dégâts : Toutes les armes feront  %1% de dégâts
+05:16=La vie de tout les hérissons est restaurée à la fin du tour
+05:17=Les hérissons IA réapparaissent lorsqu'ils meurent
+05:18=Attaques illimitées
+05:19=Les armes sont réinitialisées à la fin du tour
+05:20=Les armes ne sont pas partagées entre les hérissons
+05:21=Relais: Des équipes sous la même couleur partagent le tour|Temps partagé: Dès que l'un à fini son action il passe la main à sont camarade pour qu'il agisse|avant la fin du tour
 
--- a/share/hedgewars/Data/Locale/hedgewars_ar.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -174,6 +190,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Cannot create directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -224,6 +255,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -323,6 +366,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -442,10 +489,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -461,6 +504,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -505,7 +552,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 انضم</translation>
+        <translation type="obsolete">%1 *** %2 انضم</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -534,6 +581,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -684,6 +746,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -825,6 +898,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -934,6 +1015,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1901,6 +1993,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1989,35 +2085,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Cannot create directory %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Cannot create directory %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Unable to start the server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Unable to start the server: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2164,10 +2237,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2279,6 +2348,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2389,6 +2478,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2990,119 +3098,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_bg.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Не може да се създаде папка %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -223,6 +254,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -322,6 +365,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -441,10 +488,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Зареждане на начертана карта</translation>
     </message>
@@ -460,6 +503,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -504,7 +551,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 се присъедини</translation>
+        <translation type="obsolete">%1 *** %2 се присъедини</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -533,6 +580,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -683,6 +745,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -824,6 +897,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Запазване</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -933,6 +1014,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1916,6 +2008,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2004,35 +2100,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Не може да се създаде папка %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Не може да се създаде папка %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Грешка при стартиране на сървъра: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Грешка при стартиране на сървъра: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2180,10 +2253,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2295,6 +2364,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2405,6 +2494,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3006,119 +3114,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_cs.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -179,6 +195,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Nemohu vytvořit adresář %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -229,6 +260,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -328,6 +371,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -447,10 +494,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Nahrát nakreslenou mapu</translation>
     </message>
@@ -466,6 +509,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -510,7 +557,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 se připojil</translation>
+        <translation type="obsolete">%1 *** %2 se připojil</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -539,6 +586,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -689,6 +751,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -836,6 +909,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; byl vystrašený a přeskočil tah &lt;b&gt;%2&lt;/b&gt; krát.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Uložit</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -945,6 +1026,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1930,6 +2022,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2018,35 +2114,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Nemohu vytvořit adresář %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nemohu vytvořit adresář %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Nemohu spustit server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nemohu spustit server: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2195,10 +2268,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2310,6 +2379,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2420,6 +2509,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3021,119 +3129,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_da.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_da.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Kan ikke oprette mappe %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -227,6 +258,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation>Mislykkedes at gemme typografiark til %1</translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -326,6 +369,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -445,10 +492,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Indlæs tegnet bane</translation>
     </message>
@@ -464,6 +507,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -508,7 +555,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 har tilsluttet sig</translation>
+        <translation type="obsolete">%1 *** %2 har tilsluttet sig</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -537,6 +584,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -687,6 +749,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -828,6 +901,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; blev bange og sprang over sin tur &lt;b&gt;%2&lt;/b&gt; gange.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Gem</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -937,6 +1018,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1924,6 +2016,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1998,35 +2094,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Kan ikke oprette mappe %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Kan ikke oprette mappe %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Ude af stand til at starte serveren: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Ude af stand til at starte serveren: %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2188,10 +2261,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2303,6 +2372,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2413,6 +2502,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3014,119 +3122,4 @@
         <translation>DPad</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Verzeichnis %1 konnte nicht angelegt werden</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished">Konnte Daten-Verzeichnis nicht öffnen:
+%1
+
+Bitte überprüfe deine Installation!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -227,6 +261,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation>Style-Sheet konnte nich nach %1 gesichert werden</translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -326,6 +372,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -445,10 +495,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Gezeichnete Karte laden</translation>
     </message>
@@ -464,6 +510,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -508,7 +558,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 ist beigetreten</translation>
+        <translation type="obsolete">%1 *** %2 ist beigetreten</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -537,6 +587,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -687,6 +752,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -828,6 +904,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; hatte Angst und übersprang &lt;b&gt;%2&lt;/b&gt; Runden.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Sichern</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -855,7 +939,7 @@
     </message>
     <message>
         <source>Play a game across a network</source>
-        <translation>Spiele über ein Netwerk</translation>
+        <translation>Spiele über ein Netzwerk</translation>
     </message>
     <message>
         <source>Read about who is behind the Hedgewars Project</source>
@@ -937,6 +1021,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1926,6 +2021,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2017,37 +2116,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Hedgewars - Fehler</translation>
+        <translation type="obsolete">Hedgewars - Fehler</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Verzeichnis %1 konnte nicht angelegt werden</translation>
+        <translation type="obsolete">Verzeichnis %1 konnte nicht angelegt werden</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Konnte Daten-Verzeichnis nicht öffnen:
+        <translation type="obsolete">Konnte Daten-Verzeichnis nicht öffnen:
 %1
 
 Bitte überprüfe deine Installation!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Fehler</translation>
+        <translation type="obsolete">TCP - Fehler</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Server %1 konnte nicht gestartet werden.</translation>
+        <translation type="obsolete">Server %1 konnte nicht gestartet werden.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Konnte Engine nicht starten: </translation>
+        <translation type="obsolete">Konnte Engine nicht starten: </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Fehler-Code: %1</translation>
+        <translation type="obsolete">Fehler-Code: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2055,7 +2154,7 @@
     </message>
     <message>
         <source>Netgame - Error</source>
-        <translation>Netwerkspiel - Fehler</translation>
+        <translation>Netzwerkspiel - Fehler</translation>
     </message>
     <message>
         <source>Please select a server from the list</source>
@@ -2195,10 +2294,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2310,6 +2405,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2420,6 +2535,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3021,119 +3155,4 @@
         <translation>Steuerkreuz</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_el.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_el.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Δεν μπορεί να δημιουργηθεί ο κατάλογος %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -223,6 +254,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -324,6 +367,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -443,10 +490,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -462,6 +505,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -506,7 +553,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation type="unfinished">%1 *** %2 εισήλθε</translation>
+        <translation type="obsolete">%1 *** %2 εισήλθε</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -535,6 +582,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -685,6 +747,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Eraser</source>
@@ -826,6 +899,14 @@
             <numerusform>Ο &lt;b&gt;%1&lt;/b&gt; φοβήθηκε και παραχώρησε τη σειρά του &lt;b&gt;%2&lt;/b&gt; φορές.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -935,6 +1016,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1918,6 +2010,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1992,35 +2088,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Δεν μπορεί να δημιουργηθεί ο κατάλογος %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Δεν μπορεί να δημιουργηθεί ο κατάλογος %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Δεν είναι δυνατόν να ξεκινήσει ο εξυπηρετητής : %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Δεν είναι δυνατόν να ξεκινήσει ο εξυπηρετητής : %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2182,10 +2255,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2297,6 +2366,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2407,6 +2496,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3008,119 +3116,4 @@
         <translation type="unfinished">DPad</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_en.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_en.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Cannot create directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -223,6 +254,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -322,6 +365,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -441,10 +488,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -460,6 +503,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -504,7 +551,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 has joined</translation>
+        <translation type="obsolete">%1 *** %2 has joined</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -533,6 +580,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -683,6 +745,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -824,6 +897,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; was scared and skipped turn &lt;b&gt;%2&lt;/b&gt; times.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -933,6 +1014,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1900,6 +1992,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1988,35 +2084,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Cannot create directory %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Cannot create directory %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Unable to start the server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Unable to start the server: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2164,10 +2237,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2279,6 +2348,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2389,6 +2478,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2990,119 +3098,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_es.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_es.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">No se pudo crear el directorio %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -227,6 +258,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -326,6 +369,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -445,10 +492,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Cargar mapa</translation>
     </message>
@@ -464,6 +507,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -508,7 +555,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 ha entrado</translation>
+        <translation type="obsolete">%1 *** %2 ha entrado</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -537,6 +584,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -687,6 +749,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -828,6 +901,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; tenía demasiado miedo y pasó &lt;b&gt;%2&lt;/b&gt; turnos.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Guardar</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -937,6 +1018,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1920,6 +2012,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2008,35 +2104,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">No se pudo crear el directorio %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">No se pudo crear el directorio %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">No se pudo iniciar el servidor: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">No se pudo iniciar el servidor: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2184,10 +2257,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2299,6 +2368,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2409,6 +2498,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3010,119 +3118,4 @@
         <translation>DPad</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_fi.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Hakemiston %1 luonti epäonnistui</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -223,6 +254,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -322,6 +365,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -441,10 +488,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -460,6 +503,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -504,7 +551,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 liittyi</translation>
+        <translation type="obsolete">%1 *** %2 liittyi</translation>
     </message>
     <message>
         <source>%1 *** %2 has left</source>
@@ -533,6 +580,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -683,6 +745,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -824,6 +897,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -933,6 +1014,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1916,6 +2008,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2004,35 +2100,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Hakemiston %1 luonti epäonnistui</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Hakemiston %1 luonti epäonnistui</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Palvelinta ei pystytty käynnistämään: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Palvelinta ei pystytty käynnistämään: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2180,10 +2253,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2295,6 +2364,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2405,6 +2494,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3006,119 +3114,4 @@
         <translation>Hiiri: Vasen nappi</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_fr.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -5,14 +5,14 @@
     <name>About</name>
     <message>
         <source>Unknown Compiler</source>
-        <translation type="unfinished"></translation>
+        <translation>Compilateur inconnu</translation>
     </message>
 </context>
 <context>
     <name>AbstractPage</name>
     <message>
         <source>Go back</source>
-        <translation type="unfinished"></translation>
+        <translation>Retour</translation>
     </message>
 </context>
 <context>
@@ -30,72 +30,100 @@
     <name>BanDialog</name>
     <message>
         <source>IP</source>
-        <translation type="unfinished">IP</translation>
+        <translation>IP</translation>
     </message>
     <message>
         <source>Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>Pseudo</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Pseudo</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Raison</translation>
     </message>
     <message>
         <source>Duration</source>
-        <translation type="unfinished"></translation>
+        <translation>Durée</translation>
     </message>
     <message>
         <source>Ok</source>
-        <translation type="unfinished"></translation>
+        <translation>Ok</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annuler</translation>
+        <translation>Annuler</translation>
     </message>
     <message>
         <source>you know why</source>
-        <translation type="unfinished"></translation>
+        <translation>Tu sait très bien pourquoi</translation>
     </message>
     <message>
         <source>Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Attention</translation>
     </message>
     <message>
         <source>Please, specify %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Veuillez spécifier %1</translation>
     </message>
     <message>
         <source>nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>Pseudo</translation>
     </message>
     <message>
         <source>permanent</source>
-        <translation type="unfinished"></translation>
+        <translation>Permanent</translation>
     </message>
 </context>
 <context>
     <name>DataManager</name>
     <message>
         <source>Use Default</source>
-        <translation type="unfinished"></translation>
+        <translation>Par défaut</translation>
     </message>
 </context>
 <context>
     <name>FeedbackDialog</name>
     <message>
         <source>View</source>
-        <translation type="unfinished"></translation>
+        <translation>Voir</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annuler</translation>
+        <translation>Annuler</translation>
     </message>
     <message>
         <source>Send Feedback</source>
+        <translation>Envoyez</translation>
+    </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="obsolete">Nous avons besoin de votre avis!</translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation>Toutes suggestions, idées ou rapport de bug sont les bienvenus</translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="obsolete">Si vous trouvez un bug, vous pouvez vérifier si il est déjà connu ici (anglais): </translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="obsolete">Votre adresse email est optionelle, mais il est possible que nous essayons de vous contacter.</translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -121,106 +149,136 @@
     </message>
     <message>
         <source>Edit schemes</source>
-        <translation>Éditer les paramètres</translation>
+        <translation>Éditer les règles</translation>
     </message>
     <message>
         <source>Game scheme will auto-select a weapon</source>
-        <translation type="unfinished"></translation>
+        <translation>La règle choisis va choisir automatiquement les armes</translation>
     </message>
     <message>
         <source>Map</source>
-        <translation type="unfinished">Carte</translation>
+        <translation>Carte</translation>
     </message>
     <message>
         <source>Game options</source>
-        <translation type="unfinished"></translation>
+        <translation>Option de jeu</translation>
     </message>
 </context>
 <context>
     <name>HWApplication</name>
     <message numerus="yes">
         <source>%1 minutes</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 minute</numerusform>
+            <numerusform>%1 minutes</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hour</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 heure</numerusform>
+            <numerusform>%1 heures</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hours</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 heure</numerusform>
+            <numerusform>%1 heures</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 day</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 jour</numerusform>
+            <numerusform>%1 jours</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 days</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 jour</numerusform>
+            <numerusform>%1 jours</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation>Règle incomprise</translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation>Impossible de créer le dossier %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation>Impossible de trouver les fichiers:
+%1
+
+Veuillez verifier que votre jeu est installé correctement!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
     <message>
         <source>Do you really want to quit?</source>
-        <translation type="unfinished"></translation>
+        <translation>Êtes-vous sûr de vouloir quitter ?</translation>
     </message>
 </context>
 <context>
     <name>HWChatWidget</name>
     <message>
         <source>%1 has been removed from your ignore list</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 a été retiré de votre liste noire</translation>
     </message>
     <message>
         <source>%1 has been added to your ignore list</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 a été ajouté à votre liste noire</translation>
     </message>
     <message>
         <source>%1 has been removed from your friends list</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 a été retiré de votre liste d&apos;amis</translation>
     </message>
     <message>
         <source>%1 has been added to your friends list</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 a été ajouté à votre liste d&apos;amis</translation>
     </message>
     <message>
         <source>Stylesheet imported from %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Feuille de style (Stylesheet) importée de %1</translation>
     </message>
     <message>
         <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
-        <translation type="unfinished"></translation>
+        <translation>Entrez %1 si vous voulez utiliser cette Feuille de style (Stylesheet) à l&apos;avenir, entrez %2 pour rétablir l&apos;ancienne apparence!</translation>
     </message>
     <message>
         <source>Couldn&apos;t read %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de lire %1</translation>
     </message>
     <message>
         <source>StyleSheet discarded</source>
-        <translation type="unfinished"></translation>
+        <translation>Feuille de style (Stylesheet) effacée</translation>
     </message>
     <message>
         <source>StyleSheet saved to %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Feuille de style (Stylesheet) enregistrée dans %1</translation>
     </message>
     <message>
         <source>Failed to save StyleSheet to %1</source>
+        <translation>Impossible d&apos;enregistrer la feuille de style (Stylesheet) dans %1</translation>
+    </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -228,7 +286,7 @@
     <name>HWForm</name>
     <message>
         <source>Cannot save record to file %1</source>
-        <translation>Impossible de sauvegarder la partie dans le fichier %1</translation>
+        <translation>Impossible de sauvegarder l&apos;enregistrement dans le fichier %1</translation>
     </message>
     <message>
         <source>DefaultTeam</source>
@@ -237,7 +295,7 @@
     <message>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
-        <translation>Fichier de démonstration d&apos;Hedgewars</translation>
+        <translation>Fichier de demo d&apos;Hedgewars</translation>
     </message>
     <message>
         <source>Hedgewars Save File</source>
@@ -246,36 +304,37 @@
     </message>
     <message>
         <source>Demo name</source>
-        <translation type="unfinished"></translation>
+        <translation>Nom de la Demo</translation>
     </message>
     <message>
         <source>Demo name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Nom de la Demo:</translation>
     </message>
     <message>
         <source>Game aborted</source>
-        <translation type="unfinished"></translation>
+        <translation>Abandon de la partie</translation>
     </message>
     <message>
         <source>Nickname</source>
-        <translation type="unfinished">Pseudo</translation>
+        <translation>Pseudo</translation>
     </message>
     <message>
         <source>No nickname supplied.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aucun pseudo renseigné.</translation>
     </message>
     <message>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
-        <translation type="unfinished"></translation>
+        <translation>Quelqu&apos;un utilise déjà le pseudo %1 sur le serveur
+Veuillez choisir un autre pseudo:</translation>
     </message>
     <message>
         <source>%1&apos;s Team</source>
-        <translation type="unfinished"></translation>
+        <translation>Equipe de %1</translation>
     </message>
     <message>
         <source>Hedgewars - Nick registered</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Pseudo enregistré</translation>
     </message>
     <message>
         <source>This nick is registered, and you haven&apos;t specified a password.
@@ -283,43 +342,56 @@
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
 
 Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce pseudo est enregistré, vous n&apos;avez spécifié aucun mot de passe.
+	
+Si ce pseudo n&apos;est pas le votre, veuillez enregistrer votre propre pseudo sur www.hedgewars.org
+
+Mot de passe:</translation>
     </message>
     <message>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
-        <translation type="unfinished"></translation>
+        <translation>Votre pseudo n&apos;est pas enregistré.
+Pour éviter que d&apos;autre joueurs l&apos;utilisent,
+veuillez l&apos;enregistrer sur www.hedgewars.org</translation>
     </message>
     <message>
         <source>
 
 Your password wasn&apos;t saved either.</source>
-        <translation type="unfinished"></translation>
+        <translation>
+		
+Votre mot de passe non plus n&apos;a pas été sauvegardé.</translation>
     </message>
     <message>
         <source>Hedgewars - Empty nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Pseudo vide</translation>
     </message>
     <message>
         <source>Hedgewars - Wrong password</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Mauvais mot de passe</translation>
     </message>
     <message>
         <source>You entered a wrong password.</source>
-        <translation type="unfinished"></translation>
+        <translation>Le mot de passe que vous avez entré est incorrect</translation>
     </message>
     <message>
         <source>Try Again</source>
-        <translation type="unfinished"></translation>
+        <translation>Réessayez</translation>
     </message>
     <message>
         <source>Hedgewars - Connection error</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Erreur de connexion</translation>
     </message>
     <message>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
+        <translation>Vous vous êtes reconnecté trop rapidement.
+Attendez quelques secondes et réessayez.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -331,7 +403,7 @@
     </message>
     <message>
         <source>Cannot open demofile %1</source>
-        <translation>Erreur lors de l&apos;ouverture du fichier de démonstration %1</translation>
+        <translation>Erreur lors de l&apos;ouverture du fichier de demo %1</translation>
     </message>
 </context>
 <context>
@@ -374,90 +446,94 @@
     </message>
     <message>
         <source>Map type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Type de carte:</translation>
     </message>
     <message>
         <source>Image map</source>
-        <translation type="unfinished"></translation>
+        <translation>Image de la carte</translation>
     </message>
     <message>
         <source>Mission map</source>
-        <translation type="unfinished"></translation>
+        <translation>Carte avec mission</translation>
     </message>
     <message>
         <source>Hand-drawn</source>
-        <translation type="unfinished"></translation>
+        <translation>Dessinée</translation>
     </message>
     <message>
         <source>Randomly generated</source>
-        <translation type="unfinished"></translation>
+        <translation>Générée aléatoirement</translation>
     </message>
     <message>
         <source>Random maze</source>
-        <translation type="unfinished"></translation>
+        <translation>Labyrinthe généré aléatoirement</translation>
     </message>
     <message>
         <source>Random</source>
-        <translation type="unfinished">Aléatoire</translation>
+        <translation>Aléatoire</translation>
     </message>
     <message>
         <source>Map preview:</source>
-        <translation type="unfinished"></translation>
+        <translation>Apperçu de la carte</translation>
     </message>
     <message>
         <source>Load map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Charger un dessin</translation>
     </message>
     <message>
         <source>Edit map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Editer un dessin</translation>
     </message>
     <message>
         <source>Small islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Petites îles</translation>
     </message>
     <message>
         <source>Medium islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Moyennes îles</translation>
     </message>
     <message>
         <source>Large islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Grandes îles</translation>
     </message>
     <message>
         <source>Map size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Taille de la carte</translation>
     </message>
     <message>
         <source>Maze style:</source>
-        <translation type="unfinished"></translation>
+        <translation>Style du labyrinthe</translation>
     </message>
     <message>
         <source>Mission:</source>
-        <translation type="unfinished"></translation>
+        <translation>Mission</translation>
     </message>
     <message>
         <source>Map:</source>
-        <translation type="unfinished"></translation>
+        <translation>Carte:</translation>
     </message>
     <message>
         <source>Theme: </source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Theme: </translation>
     </message>
     <message>
         <source>Load drawn map</source>
-        <translation type="unfinished">Charger une carte dessinée</translation>
+        <translation>Charger une carte dessinée</translation>
     </message>
     <message>
         <source>Drawn Maps</source>
-        <translation type="unfinished"></translation>
+        <translation>Cartes dessinées</translation>
     </message>
     <message>
         <source>All files</source>
-        <translation type="unfinished"></translation>
+        <translation>Tout les fichiers</translation>
     </message>
     <message>
         <source>Large tunnels</source>
+        <translation>Grands tunnels</translation>
+    </message>
+    <message>
+        <source>Theme: %1</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -492,7 +568,7 @@
     </message>
     <message>
         <source>Room destroyed</source>
-        <translation>Salon fermé</translation>
+        <translation>Room fermée</translation>
     </message>
     <message>
         <source>You got kicked</source>
@@ -500,11 +576,11 @@
     </message>
     <message>
         <source>%1 *** %2 has joined the room</source>
-        <translation>%1 *** %2 a rejoint la salle</translation>
+        <translation>%1 *** %2 a rejoint la room</translation>
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 vient d&apos;arriver</translation>
+        <translation type="obsolete">%1 *** %2 vient d&apos;arriver</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -516,69 +592,86 @@
     </message>
     <message>
         <source>User quit</source>
-        <translation type="unfinished"></translation>
+        <translation>S&apos;est déconnecté</translation>
     </message>
     <message>
         <source>Remote host has closed connection</source>
-        <translation type="unfinished"></translation>
+        <translation>Le serveur à fermé la connection</translation>
     </message>
     <message>
         <source>The server is too old. Disconnecting now.</source>
-        <translation type="unfinished"></translation>
+        <translation>La version du serveur n&apos;est pas à jour. Déconnexion.</translation>
     </message>
 </context>
 <context>
     <name>HWPasswordDialog</name>
     <message>
         <source>Login</source>
-        <translation type="unfinished"></translation>
+        <translation>Connexion</translation>
+    </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation>Pour vous connecter sur le serveur, veuillez entrer vos identifiants.
+Si vous n&apos;avez pas de compte sur www.hedgewars.org,
+entrez juste votre pseudo.</translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation>Pseudo</translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation>Mot de passe</translation>
     </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
     <message>
         <source>Upload video</source>
-        <translation type="unfinished"></translation>
+        <translation>Importer une vidéo </translation>
     </message>
     <message>
         <source>Upload</source>
-        <translation type="unfinished"></translation>
+        <translation>Importer</translation>
     </message>
 </context>
 <context>
     <name>HatButton</name>
     <message>
         <source>Change hat (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Changer de chapeau (%1)</translation>
     </message>
 </context>
 <context>
     <name>HatPrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annuler</translation>
+        <translation>Annuler</translation>
     </message>
     <message>
         <source>Use selected hat</source>
-        <translation type="unfinished"></translation>
+        <translation>Mettre le chapeau sélectionné</translation>
     </message>
     <message>
         <source>Search for a hat:</source>
-        <translation type="unfinished"></translation>
+        <translation>Chercher un chapeau:</translation>
     </message>
 </context>
 <context>
     <name>KB</name>
     <message>
         <source>SDL_ttf returned error while rendering text, most propably it is related to the bug in freetype2. It&apos;s recommended to update your freetype lib.</source>
-        <translation>SDL_ttf a retourné une erreur pendant l&apos;affichage du texte, cela est sûrement causé par le bogue de freetype2. Il est recommandé de mettre à jour la librairie freetype.</translation>
+        <translation>SDL_ttf a renvoyé une erreur pendant l&apos;affichage du texte, cela est sûrement causé par le bug de freetype2. Il est recommandé de mettre à jour la librairie freetype.</translation>
     </message>
 </context>
 <context>
     <name>KeyBinder</name>
     <message>
         <source>Category</source>
-        <translation type="unfinished"></translation>
+        <translation>Catégorie</translation>
     </message>
 </context>
 <context>
@@ -586,30 +679,30 @@
     <message>
         <source>Duration: %1m %2s
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Durée: %1m %2s</translation>
     </message>
     <message>
         <source>Video: %1x%2, </source>
-        <translation type="unfinished"></translation>
+        <translation>Vidéo: %1x%2</translation>
     </message>
     <message>
         <source>%1 fps, </source>
-        <translation type="unfinished"></translation>
+        <translation>%1 fps, </translation>
     </message>
     <message>
         <source>Audio: </source>
-        <translation type="unfinished"></translation>
+        <translation>Audio: </translation>
     </message>
     <message>
         <source>unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>inconnu</translation>
     </message>
 </context>
 <context>
     <name>MapModel</name>
     <message>
         <source>No description available.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aucune description disponible.</translation>
     </message>
 </context>
 <context>
@@ -644,42 +737,53 @@
     </message>
     <message>
         <source>General</source>
-        <translation type="unfinished">Général</translation>
+        <translation>Général</translation>
     </message>
     <message>
         <source>Bans</source>
-        <translation type="unfinished"></translation>
+        <translation>Bans</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Pseudo</translation>
     </message>
     <message>
         <source>Expiration</source>
-        <translation type="unfinished"></translation>
+        <translation>Durée</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Raison</translation>
     </message>
     <message>
         <source>Refresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Rafraichir</translation>
     </message>
     <message>
         <source>Add</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter</translation>
     </message>
     <message>
         <source>Remove</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer</translation>
     </message>
 </context>
 <context>
     <name>PageConnecting</name>
     <message>
         <source>Connecting...</source>
-        <translation>En connexion...</translation>
+        <translation>Connexion...</translation>
+    </message>
+</context>
+<context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -710,15 +814,15 @@
     </message>
     <message>
         <source>Drawn Maps</source>
-        <translation type="unfinished"></translation>
+        <translation>Cartes dessinées</translation>
     </message>
     <message>
         <source>All files</source>
-        <translation type="unfinished"></translation>
+        <translation>Tout les fichiers</translation>
     </message>
     <message>
         <source>Eraser</source>
-        <translation type="unfinished"></translation>
+        <translation>Gomme</translation>
     </message>
 </context>
 <context>
@@ -729,39 +833,39 @@
     </message>
     <message>
         <source>Select an action to choose a custom key bind for this team</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez une action afin d&apos;y attribuer une touche pour cette équipe</translation>
     </message>
     <message>
         <source>Use my default</source>
-        <translation type="unfinished"></translation>
+        <translation>Touche par defaut</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Reinitialiser toutes les touches</translation>
     </message>
     <message>
         <source>Custom Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Préferences de commandes</translation>
     </message>
     <message>
         <source>Hat</source>
-        <translation type="unfinished">Chapeau</translation>
+        <translation>Chapeau</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Nom</translation>
+        <translation>Nom</translation>
     </message>
     <message>
         <source>This hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Le nom de ce herisson</translation>
     </message>
     <message>
         <source>Randomize this hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisis un nom aléatoire pour ce herisson</translation>
     </message>
     <message>
         <source>Random Team</source>
-        <translation type="unfinished">Équipes aléatoires</translation>
+        <translation>Équipes aléatoires</translation>
     </message>
 </context>
 <context>
@@ -772,7 +876,7 @@
     </message>
     <message>
         <source>Health graph</source>
-        <translation>Courbes de santé-</translation>
+        <translation>Courbes de santé:</translation>
     </message>
     <message>
         <source>Ranking</source>
@@ -798,8 +902,8 @@
     </message>
     <message numerus="yes">
         <source>(%1 kill)</source>
-        <translation type="unfinished">
-            <numerusform>(%1 tue)</numerusform>
+        <translation>
+            <numerusform>(%1 tué)</numerusform>
             <numerusform></numerusform>
         </translation>
     </message>
@@ -824,78 +928,86 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Enregistrer</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
     <message>
         <source>In game...</source>
-        <translation type="unfinished"></translation>
+        <translation>En jeu...</translation>
     </message>
 </context>
 <context>
     <name>PageInfo</name>
     <message>
         <source>Open the snapshot folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Ouvrir le dossier de captures d&apos;écran</translation>
     </message>
 </context>
 <context>
     <name>PageMain</name>
     <message>
         <source>Downloadable Content</source>
-        <translation type="unfinished"></translation>
+        <translation>Contenu téléchargeable</translation>
     </message>
     <message>
         <source>Play a game on a single computer</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer une partie en solo</translation>
     </message>
     <message>
         <source>Play a game across a network</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer en ligne</translation>
     </message>
     <message>
         <source>Read about who is behind the Hedgewars Project</source>
-        <translation type="unfinished"></translation>
+        <translation>A propos de ceux qui sont derrière le projet Hedgewars</translation>
     </message>
     <message>
         <source>Leave a feedback here reporting issues, suggesting features or just saying how you like Hedgewars</source>
-        <translation type="unfinished"></translation>
+        <translation>Donnez-nous votre avis, signalez un bug, déposez vos idées, ou dites nous juste à quel point vous aimez Hedgewars</translation>
     </message>
     <message>
         <source>Access the user created content downloadable from our website</source>
-        <translation type="unfinished"></translation>
+        <translation>Acces au contenu téléchargeable créé par les joueurs, disponible sur notre site</translation>
     </message>
     <message>
         <source>Exit game</source>
-        <translation type="unfinished"></translation>
+        <translation>Quitter le jeu</translation>
     </message>
     <message>
         <source>Manage videos recorded from game</source>
-        <translation type="unfinished"></translation>
+        <translation>Gérer les vidéos de parties enregistrées</translation>
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>Editer vos préférences de jeu</translation>
     </message>
     <message>
         <source>Play a game across a local area network</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer une partie en réseau local</translation>
     </message>
     <message>
         <source>Play a game on an official server</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer une partie sur un serveur officiel</translation>
     </message>
     <message>
         <source>Feedback</source>
-        <translation type="unfinished"></translation>
+        <translation>Contact</translation>
     </message>
     <message>
         <source>Play local network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer en réseau local</translation>
     </message>
     <message>
         <source>Play official network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer sur le réseau officiel</translation>
     </message>
 </context>
 <context>
@@ -906,7 +1018,7 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>Editer les préférences de jeu</translation>
     </message>
 </context>
 <context>
@@ -917,19 +1029,30 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>Editer les préférences de jeu</translation>
     </message>
     <message>
         <source>Start</source>
-        <translation type="unfinished">Démarrer</translation>
+        <translation>Démarrer</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished">Mise à jour</translation>
+        <translation>Mise à jour</translation>
     </message>
     <message>
         <source>Room controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôle de la room</translation>
+    </message>
+</context>
+<context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation>Clique pour plus de détails</translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation>Insert ton adresse ici</translation>
     </message>
 </context>
 <context>
@@ -948,19 +1071,19 @@
     </message>
     <message>
         <source>You can&apos;t edit teams from team selection. Go back to main menu to add, edit or delete teams.</source>
-        <translation>Vous ne pouvez pas modifier d&apos;équipe depuis la sélection d&apos;équipes. Retournez au manu principal pour ajouter, modifier ou supprimer des équipes.</translation>
+        <translation>Vous ne pouvez pas modifier d&apos;équipe depuis la sélection d&apos;équipes. Retournez au menu principal pour ajouter, modifier ou supprimer des équipes.</translation>
     </message>
     <message>
         <source>New scheme</source>
-        <translation>Nouveaux paramètres</translation>
+        <translation>Nouvelle règle</translation>
     </message>
     <message>
         <source>Edit scheme</source>
-        <translation>Modifier paramètres</translation>
+        <translation>Modifier règles</translation>
     </message>
     <message>
         <source>Delete scheme</source>
-        <translation>Supprimer paramètres</translation>
+        <translation>Supprimer règles</translation>
     </message>
     <message>
         <source>New weapon set</source>
@@ -976,11 +1099,11 @@
     </message>
     <message>
         <source>Advanced</source>
-        <translation type="unfinished">Avancé</translation>
+        <translation>Avancé</translation>
     </message>
     <message>
         <source>Reset to default colors</source>
-        <translation type="unfinished"></translation>
+        <translation>Remettre les couleurs de départ</translation>
     </message>
     <message>
         <source>Proxy host</source>
@@ -1000,7 +1123,7 @@
     </message>
     <message>
         <source>No proxy</source>
-        <translation type="unfinished"></translation>
+        <translation>Pas de proxy</translation>
     </message>
     <message>
         <source>Socks5 proxy</source>
@@ -1016,71 +1139,71 @@
     </message>
     <message>
         <source>Select an action to change what key controls it</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez une action afin d&apos;y attribuer une touche</translation>
     </message>
     <message>
         <source>Reset to default</source>
-        <translation type="unfinished"></translation>
+        <translation>Par défaut</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Remettre les touches par défaut</translation>
     </message>
     <message>
         <source>Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Jeu</translation>
     </message>
     <message>
         <source>Graphics</source>
-        <translation type="unfinished"></translation>
+        <translation>Graphismes</translation>
     </message>
     <message>
         <source>Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Audio</translation>
     </message>
     <message>
         <source>Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôles</translation>
     </message>
     <message>
         <source>Video Recording</source>
-        <translation type="unfinished"></translation>
+        <translation>Enregistrement vidéo</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Réseau</translation>
     </message>
     <message>
         <source>Teams</source>
-        <translation type="unfinished">Équipes</translation>
+        <translation>Équipes</translation>
     </message>
     <message>
         <source>Schemes</source>
-        <translation type="unfinished"></translation>
+        <translation>Règles</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished">Armes</translation>
+        <translation>Armes</translation>
     </message>
     <message>
         <source>Frontend</source>
-        <translation type="unfinished"></translation>
+        <translation>Interface</translation>
     </message>
     <message>
         <source>Custom colors</source>
-        <translation type="unfinished"></translation>
+        <translation>Couleurs personalisées</translation>
     </message>
     <message>
         <source>Game audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Son du jeu</translation>
     </message>
     <message>
         <source>Frontend audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Son de l&apos;interface</translation>
     </message>
     <message>
         <source>Account</source>
-        <translation type="unfinished"></translation>
+        <translation>Compte</translation>
     </message>
     <message>
         <source>Proxy settings</source>
@@ -1088,26 +1211,26 @@
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished"></translation>
+        <translation>Autre</translation>
     </message>
     <message>
         <source>Updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Mises à jour</translation>
     </message>
     <message>
         <source>Check for updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Vérifier les mises à jours</translation>
     </message>
     <message>
         <source>Video recording options</source>
-        <translation type="unfinished"></translation>
+        <translation>Option d&apos;enregistrement vidéo</translation>
     </message>
 </context>
 <context>
     <name>PagePlayDemo</name>
     <message>
         <source>Rename dialog</source>
-        <translation>Boîte de dialogue de renommage</translation>
+        <translation>Renommer</translation>
     </message>
     <message>
         <source>Enter new file name:</source>
@@ -1130,7 +1253,7 @@
     </message>
     <message>
         <source>Room Name:</source>
-        <translation type="obsolete">Nom du salon:</translation>
+        <translation type="obsolete">Nom de la room: </translation>
     </message>
     <message>
         <source>Rules:</source>
@@ -1150,34 +1273,34 @@
     </message>
     <message numerus="yes">
         <source>%1 players online</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 joueur en ligne</numerusform>
+            <numerusform>%1 joueurs en ligne</numerusform>
         </translation>
     </message>
     <message>
         <source>Search for a room:</source>
-        <translation type="unfinished"></translation>
+        <translation>Chercher une room</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Créer une room</translation>
     </message>
     <message>
         <source>Join room</source>
-        <translation type="unfinished"></translation>
+        <translation>Rejoindre</translation>
     </message>
     <message>
         <source>Room state</source>
-        <translation type="unfinished"></translation>
+        <translation>Etat de la room</translation>
     </message>
     <message>
         <source>Clear filters</source>
-        <translation type="unfinished"></translation>
+        <translation>Enlever les filtres</translation>
     </message>
     <message>
         <source>Open server administration page</source>
-        <translation type="unfinished"></translation>
+        <translation>Ouvre la page d&apos;administration du serveur</translation>
     </message>
 </context>
 <context>
@@ -1236,7 +1359,7 @@
     </message>
     <message>
         <source>Order of play is random instead of in room order.</source>
-        <translation>Ordre de jeu aléatoire plutôt que par ordre dans la salle.</translation>
+        <translation>Ordre de jeu aléatoire plutôt que par ordre dans la room.</translation>
     </message>
     <message>
         <source>Play with a King. If he dies, your side dies.</source>
@@ -1256,7 +1379,7 @@
     </message>
     <message>
         <source>Disable land objects when generating random maps.</source>
-        <translation type="unfinished">Désactiver les objets de terrain lorsque des cartes aléatoires sont générées.</translation>
+        <translation>Désactiver les objets de terrain lorsque des cartes aléatoires sont générées.</translation>
     </message>
     <message>
         <source>AI respawns on death.</source>
@@ -1292,7 +1415,7 @@
     </message>
     <message>
         <source>Teams in each clan take successive turns sharing their turn time.</source>
-        <translation type="unfinished"></translation>
+        <translation>Les équipes de chaque clans jouent successivement, partageant le temps de leur tour.</translation>
     </message>
     <message>
         <source>Add an indestructible border around the terrain</source>
@@ -1300,7 +1423,7 @@
     </message>
     <message>
         <source>Add an indestructible border along the bottom</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter une bordure indestructible en bas</translation>
     </message>
 </context>
 <context>
@@ -1326,86 +1449,86 @@
     <name>PageSinglePlayer</name>
     <message>
         <source>Play a quick game against the computer with random settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer une partie rapide contre l&apos;ordinateur avec des règles aléatoires</translation>
     </message>
     <message>
         <source>Play a hotseat game against your friends, or AI teams</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer une partie sur cet ordinateur contre vos amis ou l&apos;IA</translation>
     </message>
     <message>
         <source>Campaign Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Campagne</translation>
     </message>
     <message>
         <source>Practice your skills in a range of training missions</source>
-        <translation type="unfinished"></translation>
+        <translation>Améliorez vos competences avec un large choix de missions</translation>
     </message>
     <message>
         <source>Watch recorded demos</source>
-        <translation type="unfinished"></translation>
+        <translation>Regarder les parties enregistrées</translation>
     </message>
     <message>
         <source>Load a previously saved game</source>
-        <translation type="unfinished"></translation>
+        <translation>Charger une partie</translation>
     </message>
 </context>
 <context>
     <name>PageTraining</name>
     <message>
         <source>No description available</source>
-        <translation type="unfinished"></translation>
+        <translation>Aucune description disponible</translation>
     </message>
     <message>
         <source>Select a mission!</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisis une mission!</translation>
     </message>
     <message>
         <source>Pick the mission or training to play</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisis une mission ou entraine-toi à jouer</translation>
     </message>
     <message>
         <source>Start fighting</source>
-        <translation type="unfinished"></translation>
+        <translation>Commencer le combat</translation>
     </message>
 </context>
 <context>
     <name>PageVideos</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Nom</translation>
+        <translation>Nom</translation>
     </message>
     <message>
         <source>Size</source>
-        <translation type="unfinished"></translation>
+        <translation>Taille</translation>
     </message>
     <message numerus="yes">
         <source>%1 bytes</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 octet</numerusform>
+            <numerusform>%1 octets</numerusform>
         </translation>
     </message>
     <message>
         <source>(in progress...)</source>
-        <translation type="unfinished"></translation>
+        <translation>(en cours ...)</translation>
     </message>
     <message>
         <source>encoding</source>
-        <translation type="unfinished"></translation>
+        <translation>encodage</translation>
     </message>
     <message>
         <source>uploading</source>
-        <translation type="unfinished"></translation>
+        <translation>importation</translation>
     </message>
     <message>
         <source>Date: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Date: %1</translation>
     </message>
     <message>
         <source>Size: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Taille: %1</translation>
     </message>
 </context>
 <context>
@@ -1456,15 +1579,15 @@
     </message>
     <message>
         <source>Restrict Unregistered Players Join</source>
-        <translation type="unfinished"></translation>
+        <translation>Bloquer l&apos;acces au joueurs non-enregistrés</translation>
     </message>
     <message>
         <source>Show games in lobby</source>
-        <translation type="unfinished"></translation>
+        <translation>Parties en attentes</translation>
     </message>
     <message>
         <source>Show games in-progress</source>
-        <translation type="unfinished"></translation>
+        <translation>Parties en cours</translation>
     </message>
 </context>
 <context>
@@ -1491,55 +1614,55 @@
     </message>
     <message>
         <source>Show ammo menu tooltips</source>
-        <translation type="unfinished">Montrer les astuces du menu des armes.</translation>
+        <translation>Montrer les astuces du menu des armes.</translation>
     </message>
     <message>
         <source>Save password</source>
-        <translation type="unfinished"></translation>
+        <translation>Enregistrer le mot de passe</translation>
     </message>
     <message>
         <source>Save account name and password</source>
-        <translation type="unfinished"></translation>
+        <translation>Enregistrer le nom de compte et mot de passe</translation>
     </message>
     <message>
         <source>Video is private</source>
-        <translation type="unfinished"></translation>
+        <translation>Vidéo privée</translation>
     </message>
     <message>
         <source>Record audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Enregistrer le son</translation>
     </message>
     <message>
         <source>Use game resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Utiliser la résolution du jeu</translation>
     </message>
     <message>
         <source>Visual effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Effets visuels</translation>
     </message>
     <message>
         <source>Sound</source>
-        <translation type="unfinished"></translation>
+        <translation>Son</translation>
     </message>
     <message>
         <source>In-game sound effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Effets sonores en jeu</translation>
     </message>
     <message>
         <source>Music</source>
-        <translation type="unfinished"></translation>
+        <translation>Musique</translation>
     </message>
     <message>
         <source>In-game music</source>
-        <translation type="unfinished"></translation>
+        <translation>Musique en jeu</translation>
     </message>
     <message>
         <source>Frontend sound effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Effet sonores de l&apos;interface</translation>
     </message>
     <message>
         <source>Frontend music</source>
-        <translation type="unfinished"></translation>
+        <translation>Musique de l&apos;interface</translation>
     </message>
 </context>
 <context>
@@ -1554,15 +1677,15 @@
     </message>
     <message>
         <source>(System default)</source>
-        <translation type="unfinished">Réglage du système</translation>
+        <translation>Automatique (systeme)</translation>
     </message>
     <message>
         <source>Community</source>
-        <translation type="unfinished">Communauté</translation>
+        <translation>Communauté</translation>
     </message>
     <message>
         <source>Any</source>
-        <translation type="unfinished">Aucun</translation>
+        <translation>Tout</translation>
     </message>
     <message>
         <source>In lobby</source>
@@ -1574,63 +1697,63 @@
     </message>
     <message>
         <source>Disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Aucun</translation>
     </message>
     <message>
         <source>Red/Cyan</source>
-        <translation type="unfinished">Rouge/Cyan</translation>
+        <translation>Rouge/Cyan</translation>
     </message>
     <message>
         <source>Cyan/Red</source>
-        <translation type="unfinished">Cyan/Rouge</translation>
+        <translation>Cyan/Rouge</translation>
     </message>
     <message>
         <source>Red/Blue</source>
-        <translation type="unfinished">Rouge/Bleu</translation>
+        <translation>Rouge/Bleu</translation>
     </message>
     <message>
         <source>Blue/Red</source>
-        <translation type="unfinished">Bleu/Rouge</translation>
+        <translation>Bleu/Rouge</translation>
     </message>
     <message>
         <source>Red/Green</source>
-        <translation type="unfinished">Rouge/Vert</translation>
+        <translation>Rouge/Vert</translation>
     </message>
     <message>
         <source>Green/Red</source>
-        <translation type="unfinished">Vert/Rouge</translation>
+        <translation>Vert/Rouge</translation>
     </message>
     <message>
         <source>Side-by-side</source>
-        <translation type="unfinished"></translation>
+        <translation>Côte-à-côte</translation>
     </message>
     <message>
         <source>Top-Bottom</source>
-        <translation type="unfinished"></translation>
+        <translation>Dessus-dessous</translation>
     </message>
     <message>
         <source>Red/Cyan grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Rouge/Cyan niveaux de gris</translation>
     </message>
     <message>
         <source>Cyan/Red grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Cyan/Rouge niveaux de gris</translation>
     </message>
     <message>
         <source>Red/Blue grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Rouge/Bleu niveaux de gris</translation>
     </message>
     <message>
         <source>Blue/Red grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Bleu/Rouge niveaux de gris</translation>
     </message>
     <message>
         <source>Red/Green grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Rouge/Vert niveaux de gris</translation>
     </message>
     <message>
         <source>Green/Red grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Vert/Rouge niveaux de gris</translation>
     </message>
 </context>
 <context>
@@ -1665,11 +1788,11 @@
     </message>
     <message>
         <source>Videos</source>
-        <translation type="unfinished"></translation>
+        <translation>Vidéos</translation>
     </message>
     <message>
         <source>Description</source>
-        <translation type="unfinished"></translation>
+        <translation>Description</translation>
     </message>
 </context>
 <context>
@@ -1736,7 +1859,7 @@
     </message>
     <message>
         <source>Scheme Name:</source>
-        <translation>Nom de la Configuration:</translation>
+        <translation>Nom de la règle:</translation>
     </message>
     <message>
         <source>Crate Drops</source>
@@ -1752,7 +1875,7 @@
     </message>
     <message>
         <source>Type</source>
-        <translation type="unfinished">Type</translation>
+        <translation>Type</translation>
     </message>
     <message>
         <source>Grave</source>
@@ -1768,7 +1891,7 @@
     </message>
     <message>
         <source>Locale</source>
-        <translation type="unfinished">Langue</translation>
+        <translation>Langue</translation>
     </message>
     <message>
         <source>Explosives</source>
@@ -1776,7 +1899,7 @@
     </message>
     <message>
         <source>Tip: </source>
-        <translation>Conseil : </translation>
+        <translation>Conseil: </translation>
     </message>
     <message>
         <source>Quality</source>
@@ -1800,120 +1923,126 @@
     </message>
     <message>
         <source>% Rope Length</source>
-        <translation>% longueur de la Corde Ninja</translation>
+        <translation>% longueur du grappin</translation>
     </message>
     <message>
         <source>Stereo rendering</source>
-        <translation type="unfinished">Rendu stéréo</translation>
+        <translation>Rendu stéréo</translation>
     </message>
     <message>
         <source>Style</source>
-        <translation type="unfinished"></translation>
+        <translation>Style</translation>
     </message>
     <message>
         <source>Scheme</source>
-        <translation type="unfinished"></translation>
+        <translation>Règles</translation>
     </message>
     <message>
         <source>% Get Away Time</source>
-        <translation type="unfinished"></translation>
+        <translation>% de temp de fuite</translation>
     </message>
     <message>
         <source>There are videos that are currently being processed.
 Exiting now will abort them.
 Do you really want to quit?</source>
-        <translation type="unfinished"></translation>
+        <translation>Il y a des vidéos actuellement en cours de traitement.
+Quitter maintenant arretera le processus
+Voulez-vous vraiment quitter?</translation>
     </message>
     <message>
         <source>Please provide either the YouTube account name or the email address associated with the Google Account.</source>
-        <translation type="unfinished"></translation>
+        <translation>Veuillez indiquer votre email et mot de passe de conexion à youtube</translation>
     </message>
     <message>
         <source>Account name (or email): </source>
-        <translation type="unfinished"></translation>
+        <translation>Email du compte: </translation>
     </message>
     <message>
         <source>Password: </source>
-        <translation type="unfinished"></translation>
+        <translation>Mot de passe: </translation>
     </message>
     <message>
         <source>Video title: </source>
-        <translation type="unfinished"></translation>
+        <translation>Titre de la video: </translation>
     </message>
     <message>
         <source>Video description: </source>
-        <translation type="unfinished"></translation>
+        <translation>Description de la vidéo: </translation>
     </message>
     <message>
         <source>Tags (comma separated): </source>
-        <translation type="unfinished"></translation>
+        <translation>Tags (séparer avec une virgule): </translation>
     </message>
     <message>
         <source>Description</source>
-        <translation type="unfinished"></translation>
+        <translation>Description</translation>
     </message>
     <message>
         <source>Nickname</source>
-        <translation type="unfinished">Pseudo</translation>
+        <translation>Pseudo</translation>
     </message>
     <message>
         <source>Format</source>
-        <translation type="unfinished"></translation>
+        <translation>Format</translation>
     </message>
     <message>
         <source>Audio codec</source>
-        <translation type="unfinished"></translation>
+        <translation>Codecs audio</translation>
     </message>
     <message>
         <source>Video codec</source>
-        <translation type="unfinished"></translation>
+        <translation>Codecs vidéo</translation>
     </message>
     <message>
         <source>Framerate</source>
-        <translation type="unfinished"></translation>
+        <translation>Images/secondes</translation>
     </message>
     <message>
         <source>Bitrate (Kbps)</source>
-        <translation type="unfinished"></translation>
+        <translation>Bitrate(Kb/s)</translation>
     </message>
     <message>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
-        <translation type="unfinished"></translation>
+        <translation>Cette version est &quot;en cours de développement&quot; il est possible qu&apos;elle ne soit pas compatible avec les autres versions du jeu, des parties peuvent ne pas fonctionner ou être incompletes!</translation>
     </message>
     <message>
         <source>Fullscreen</source>
-        <translation type="unfinished">Plein écran</translation>
+        <translation>Plein écran</translation>
     </message>
     <message>
         <source>Fullscreen Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Résolution en plein écran</translation>
     </message>
     <message>
         <source>Windowed Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Résolution fenêtrée</translation>
     </message>
     <message>
         <source>Your Email</source>
-        <translation type="unfinished"></translation>
+        <translation>Votre email</translation>
     </message>
     <message>
         <source>Summary</source>
-        <translation type="unfinished"></translation>
+        <translation>Sujet</translation>
     </message>
     <message>
         <source>Send system information</source>
-        <translation type="unfinished"></translation>
+        <translation>Envoyer des informations système</translation>
     </message>
     <message>
         <source>Type the security code:</source>
-        <translation type="unfinished"></translation>
+        <translation>Entrez le code de sécurité</translation>
     </message>
     <message>
         <source>Revision</source>
-        <translation type="unfinished"></translation>
+        <translation>Version de développement</translation>
     </message>
     <message>
         <source>This program is distributed under the %1</source>
+        <translation>Ce programme est distribué par %1</translation>
+    </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -1925,11 +2054,11 @@
     </message>
     <message>
         <source>hedgehog %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Hérisson %1</translation>
     </message>
     <message>
         <source>anonymous</source>
-        <translation type="unfinished"></translation>
+        <translation>anonyme</translation>
     </message>
 </context>
 <context>
@@ -1940,7 +2069,7 @@
     </message>
     <message>
         <source>-r%1 (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>-r%1 (%2)</translation>
     </message>
 </context>
 <context>
@@ -1960,236 +2089,213 @@
     <message>
         <source>Error while authenticating at google.com:
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur lors de l&apos;authentification à google.com:
+</translation>
     </message>
     <message>
         <source>Login or password is incorrect</source>
-        <translation type="unfinished"></translation>
+        <translation>Identifiant ou mot de passe incorrecte</translation>
     </message>
     <message>
         <source>Error while sending metadata to youtube.com:
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur lors de l&apos;envoi des metadata à youtube.com:
+</translation>
     </message>
     <message>
         <source>Teams - Are you sure?</source>
-        <translation type="unfinished"></translation>
+        <translation>Equipes - Etes-vous sûr?</translation>
     </message>
     <message>
         <source>Do you really want to delete the team &apos;%1&apos;?</source>
-        <translation type="unfinished"></translation>
+        <translation>Voulez-vous vraiment supprimer l&apos;équipe &quot;%1&quot;</translation>
     </message>
     <message>
         <source>Cannot delete default scheme &apos;%1&apos;!</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de retirer la règle par défaut &quot;%1&quot;</translation>
     </message>
     <message>
         <source>Please select a record from the list</source>
-        <translation type="unfinished"></translation>
+        <translation>Veuillez choisir un enregistrement dans la liste</translation>
     </message>
     <message>
         <source>Unable to start server</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de démarrer le serveur</translation>
     </message>
     <message>
         <source>Hedgewars - Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Erreur</translation>
     </message>
     <message>
         <source>Hedgewars - Success</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Succès</translation>
     </message>
     <message>
         <source>All file associations have been set</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Les associations d&apos;extensions de fichiers ont été effectuées</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Impossible de créer le dossier %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Impossible de créer le dossier %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Impossible de démarrer le serveur: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Impossible de démarrer le serveur: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Importation de vidéo - Erreur</translation>
     </message>
     <message>
         <source>Netgame - Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Partie en ligne - Erreur</translation>
     </message>
     <message>
         <source>Please select a server from the list</source>
-        <translation type="unfinished"></translation>
+        <translation>Veuillez choisir un serveur dans la liste</translation>
     </message>
     <message>
         <source>Please enter room name</source>
-        <translation type="unfinished">Veuillez saisir le nom du salon</translation>
+        <translation>Veuillez saisir le nom d&apos;une room</translation>
     </message>
     <message>
         <source>Record Play - Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer l&apos;enregistrement - Erreur</translation>
     </message>
     <message>
         <source>Please select record from the list</source>
-        <translation type="unfinished">Veuillez sélectionner une partie dans cette liste</translation>
+        <translation>Veuillez choisir un enregistrement dans liste</translation>
     </message>
     <message>
         <source>Cannot rename to </source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de renommer en </translation>
     </message>
     <message>
         <source>Cannot delete file </source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de supprimer le fichier </translation>
     </message>
     <message>
         <source>Room Name - Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Nom de la room - Erreur</translation>
     </message>
     <message>
         <source>Please select room from the list</source>
-        <translation type="unfinished">Veuillez sélectionner un salon dans la liste</translation>
+        <translation>Veuillez choisir une room dans la liste</translation>
     </message>
     <message>
         <source>Room Name - Are you sure?</source>
-        <translation type="unfinished"></translation>
+        <translation>Nom de la room - Etes-vous sûr?</translation>
     </message>
     <message>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
-        <translation type="unfinished">Vous voulez rejoindre une partie qui a déjà commencée. Voulez-vous tout de même rejoindre la salle ?</translation>
+        <translation>Vous essayez de rejoindre une partie qui a déjà commencée. 
+Voulez-vous tout de même rejoindre la room?</translation>
     </message>
     <message>
         <source>Schemes - Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Règles - Attention</translation>
     </message>
     <message>
         <source>Schemes - Are you sure?</source>
-        <translation type="unfinished"></translation>
+        <translation>Règles - Etes-vous sûr?</translation>
     </message>
     <message>
         <source>Do you really want to delete the game scheme &apos;%1&apos;?</source>
-        <translation type="unfinished"></translation>
+        <translation>Etes-vous sûr de vouloir supprimer cette règle : &quot;%1&quot; ?</translation>
     </message>
     <message>
         <source>Videos - Are you sure?</source>
-        <translation type="unfinished"></translation>
+        <translation>Vidéos - Etes-vous sûr?</translation>
     </message>
     <message>
         <source>Do you really want to delete the video &apos;%1&apos;?</source>
-        <translation type="unfinished"></translation>
+        <translation>Etes-vous sûr de vouloir supprimer cette vidéo : &quot;%1&quot; ?</translation>
     </message>
     <message numerus="yes">
         <source>Do you really want to remove %1 file(s)?</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Etes-vous sûr de vouloir supprimer %1 fichier?</numerusform>
+            <numerusform>Etes-vous sûr de vouloir supprimer %1 fichiers?</numerusform>
         </translation>
     </message>
     <message>
         <source>Do you really want to cancel uploading %1?</source>
-        <translation type="unfinished"></translation>
+        <translation>Voulez-vous arreter l&apos;importation de %1?</translation>
     </message>
     <message>
         <source>File error</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur de fichier</translation>
     </message>
     <message>
         <source>Cannot open &apos;%1&apos; for writing</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d&apos;écrire le fichier %1</translation>
     </message>
     <message>
         <source>Cannot open &apos;%1&apos; for reading</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de lire le fichier %1</translation>
     </message>
     <message>
         <source>Cannot use the ammo &apos;%1&apos;!</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d&apos;utiliser cette arme : &quot;%1&quot;</translation>
     </message>
     <message>
         <source>Weapons - Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Armes - Attention</translation>
     </message>
     <message>
         <source>Cannot overwrite default weapon set &apos;%1&apos;!</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de remplacer le set d&apos;arme &quot;%1&quot;</translation>
     </message>
     <message>
         <source>Cannot delete default weapon set &apos;%1&apos;!</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de supprimer le set d&apos;arme par défaut &quot;%1&quot;</translation>
     </message>
     <message>
         <source>Weapons - Are you sure?</source>
-        <translation type="unfinished"></translation>
+        <translation>Armes - Etes-vous sûr?</translation>
     </message>
     <message>
         <source>Do you really want to delete the weapon set &apos;%1&apos;?</source>
-        <translation type="unfinished"></translation>
+        <translation>Etes-vous sûr de vouloir supprimer le set d&apos;arme &quot;%1&quot;?</translation>
     </message>
     <message>
         <source>Hedgewars - Nick not registered</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Pseudo non-enregistré</translation>
     </message>
     <message>
         <source>System Information Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>Apreçu des informations système</translation>
     </message>
     <message>
         <source>Failed to generate captcha</source>
-        <translation type="unfinished"></translation>
+        <translation>Echec de la génération du Captcha</translation>
     </message>
     <message>
         <source>Failed to download captcha</source>
-        <translation type="unfinished"></translation>
+        <translation>Echec du téléchargement du Captcha</translation>
     </message>
     <message>
         <source>Please fill out all fields. Email is optional.</source>
-        <translation type="unfinished"></translation>
+        <translation>Veuillez remplir tout les champs. Email optionel.</translation>
     </message>
     <message>
         <source>Hedgewars - Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Attention</translation>
     </message>
     <message>
         <source>Hedgewars - Information</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Information</translation>
     </message>
     <message>
         <source>Not all players are ready</source>
-        <translation type="unfinished"></translation>
+        <translation>Les joueurs ne sont pas tous prêts</translation>
     </message>
     <message>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
-        <translation type="unfinished"></translation>
+        <translation>Etes-vous sûr de vouloir lancer cette partie?
+Les joueurs ne sont pas tous prêts.</translation>
     </message>
 </context>
 <context>
@@ -2204,7 +2310,7 @@
     </message>
     <message>
         <source>Go!</source>
-        <translation>C&apos;est parti !</translation>
+        <translation>C&apos;est parti!</translation>
     </message>
     <message>
         <source>Start</source>
@@ -2252,128 +2358,148 @@
     </message>
     <message>
         <source>More info</source>
-        <translation type="unfinished"></translation>
+        <translation>Plus d&apos;info</translation>
     </message>
     <message>
         <source>Set default options</source>
-        <translation type="unfinished"></translation>
+        <translation>Mettre les options par défaut</translation>
     </message>
     <message>
         <source>Open videos directory</source>
-        <translation type="unfinished"></translation>
+        <translation>Ouvrir le répertoire Vidéos</translation>
     </message>
     <message>
         <source>Play</source>
-        <translation type="unfinished"></translation>
+        <translation>Jouer</translation>
     </message>
     <message>
         <source>Upload to YouTube</source>
-        <translation type="unfinished"></translation>
+        <translation>Importer vers Youtube</translation>
     </message>
     <message>
         <source>Cancel uploading</source>
-        <translation type="unfinished"></translation>
+        <translation>Annuler l&apos;importation</translation>
     </message>
     <message>
         <source>Restore default coding parameters</source>
-        <translation type="unfinished"></translation>
+        <translation>Remettre les paramètres de codage par défaut</translation>
     </message>
     <message>
         <source>Open the video directory in your system</source>
-        <translation type="unfinished"></translation>
+        <translation>Ouvrir le répertoire vidéo dans votre système</translation>
     </message>
     <message>
         <source>Play this video</source>
-        <translation type="unfinished"></translation>
+        <translation>Lancer cette vidéo</translation>
     </message>
     <message>
         <source>Delete this video</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer cette vidéo</translation>
     </message>
     <message>
         <source>Upload this video to your Youtube account</source>
-        <translation type="unfinished"></translation>
+        <translation>Importer cette vidéo sur votre compte Youtube</translation>
+    </message>
+    <message>
+        <source>Reset</source>
+        <translation>Réinitialiser</translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation>Mettre le port serveur par défaut pour Hedgewars</translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation>Invitez vos amis sur votre serveur en 1 clique!</translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation>Cliquez pour copier votre URL serveur unique. Envoyez ce lien a vos amis et il pourront vous rejoindre.</translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation>Démarrer un serveur privé</translation>
     </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
     <message>
         <source>Enter a name for your room.</source>
-        <translation type="unfinished"></translation>
+        <translation>Entrez un nom pour votre room.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annuler</translation>
+        <translation>Annuler</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Créer une room</translation>
     </message>
 </context>
 <context>
     <name>RoomsListModel</name>
     <message>
         <source>In progress</source>
-        <translation type="unfinished">En cours</translation>
+        <translation>En cours</translation>
     </message>
     <message>
         <source>Room Name</source>
-        <translation type="unfinished">Nom de la salle</translation>
+        <translation>Nom de la room</translation>
     </message>
     <message>
         <source>C</source>
-        <translation type="unfinished">C</translation>
+        <translation>J</translation>
     </message>
     <message>
         <source>T</source>
-        <translation type="unfinished">É</translation>
+        <translation>É</translation>
     </message>
     <message>
         <source>Owner</source>
-        <translation type="unfinished">Propriétaire</translation>
+        <translation>Propriétaire</translation>
     </message>
     <message>
         <source>Map</source>
-        <translation type="unfinished">Carte</translation>
+        <translation>Carte</translation>
     </message>
     <message>
         <source>Rules</source>
-        <translation type="unfinished">Règles</translation>
+        <translation>Règles</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished">Armes</translation>
+        <translation>Armes</translation>
     </message>
     <message>
         <source>Random Map</source>
-        <translation type="unfinished">Carte Aléatoire</translation>
+        <translation>Carte Aléatoire</translation>
     </message>
     <message>
         <source>Random Maze</source>
-        <translation type="unfinished">Labyrinthe aléatoire</translation>
+        <translation>Labyrinthe aléatoire</translation>
     </message>
     <message>
         <source>Hand-drawn</source>
-        <translation type="unfinished"></translation>
+        <translation>Dessinée</translation>
     </message>
 </context>
 <context>
     <name>SeedPrompt</name>
     <message>
         <source>The map seed is the basis for all random values generated by the game.</source>
-        <translation type="unfinished"></translation>
+        <translation>Cette carte est la base pour toutes valeurs aléatoire générées par le jeu.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annuler</translation>
+        <translation>Annuler</translation>
     </message>
     <message>
         <source>Set seed</source>
-        <translation type="unfinished"></translation>
+        <translation>Générer une base (graine)</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Fermer</translation>
     </message>
 </context>
 <context>
@@ -2404,25 +2530,44 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation>Impossible de démarrer un serveur sur %1.</translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation>Impossible de lancer le jeu sur %1</translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation>Il doit y avoir deux équipes minimum pour jouer!</translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
-        <translation type="unfinished"></translation>
+        <translation>Equipe de %1</translation>
     </message>
 </context>
 <context>
     <name>ThemePrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annuler</translation>
+        <translation>Annuler</translation>
     </message>
     <message>
         <source>Search for a theme:</source>
-        <translation type="unfinished"></translation>
+        <translation>Chercher un thème</translation>
     </message>
     <message>
         <source>Use selected theme</source>
-        <translation type="unfinished"></translation>
+        <translation>Utiliser le thème séléctionné</translation>
     </message>
 </context>
 <context>
@@ -2582,38 +2727,38 @@
     </message>
     <message>
         <source>slot 10</source>
-        <translation type="unfinished">slot 10</translation>
+        <translation>slot 10</translation>
     </message>
     <message>
         <source>mute audio</source>
-        <translation type="unfinished"></translation>
+        <translation>couper le son</translation>
     </message>
     <message>
         <source>record</source>
-        <translation type="unfinished"></translation>
+        <translation>enregistrer</translation>
     </message>
     <message>
         <source>hedgehog info</source>
-        <translation type="unfinished"></translation>
+        <translation>Info hérisson</translation>
     </message>
 </context>
 <context>
     <name>binds (categories)</name>
     <message>
         <source>Movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Mouvements</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished">Armes</translation>
+        <translation>Armes</translation>
     </message>
     <message>
         <source>Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Caméra</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished"></translation>
+        <translation>Autre</translation>
     </message>
 </context>
 <context>
@@ -2624,7 +2769,7 @@
     </message>
     <message>
         <source>Fire your selected weapon or trigger an utility item:</source>
-        <translation>Tirez avec l&apos;arme sélectionnée et activez un objet utilitaire:</translation>
+        <translation>Tirez avec l&apos;arme sélectionnée ou activez un objet:</translation>
     </message>
     <message>
         <source>Pick a weapon or a target location under the cursor:</source>
@@ -2636,7 +2781,7 @@
     </message>
     <message>
         <source>Pick a weapon or utility item:</source>
-        <translation>Sélectionnez une arme ou un objet utilitaire:</translation>
+        <translation>Sélectionnez une arme ou un objet:</translation>
     </message>
     <message>
         <source>Set the timer on bombs and timed weapons:</source>
@@ -2660,7 +2805,7 @@
     </message>
     <message>
         <source>Pause, continue or leave your game:</source>
-        <translation>Stoppez, continuez ou quittez votre partie:</translation>
+        <translation>Pause, continuez ou quittez votre partie:</translation>
     </message>
     <message>
         <source>Modify the game&apos;s volume while playing:</source>
@@ -2680,11 +2825,11 @@
     </message>
     <message>
         <source>Record video:</source>
-        <translation type="unfinished"></translation>
+        <translation>Enregistrer la vidéo</translation>
     </message>
     <message>
         <source>Hedgehog movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Déplacement du herisson</translation>
     </message>
 </context>
 <context>
@@ -2703,7 +2848,7 @@
     </message>
     <message>
         <source>Hat</source>
-        <translation type="unfinished">Chapeau</translation>
+        <translation>Chapeau</translation>
     </message>
     <message>
         <source>(Left)</source>
@@ -2743,11 +2888,11 @@
     </message>
     <message>
         <source>Backspace</source>
-        <translation>Backspace</translation>
+        <translation>Retour/Effacer</translation>
     </message>
     <message>
         <source>Tab</source>
-        <translation>Tabulation</translation>
+        <translation>Tab</translation>
     </message>
     <message>
         <source>Return</source>
@@ -3009,116 +3154,112 @@
 <context>
     <name>server</name>
     <message>
+        <source>Authentication failed</source>
+        <translation type="obsolete">Echec d&apos;authentification</translation>
+    </message>
+    <message>
+        <source>60 seconds cooldown after kick</source>
+        <translation type="obsolete">Bannis pour 60 sec après un kick</translation>
+    </message>
+    <message>
+        <source>kicked</source>
+        <translation type="obsolete">Exclus (kick)</translation>
+    </message>
+    <message>
+        <source>Ping timeout</source>
+        <translation type="obsolete">Met trop de temps à répondre</translation>
+    </message>
+    <message>
+        <source>bye</source>
+        <translation type="obsolete">Aurevoir</translation>
+    </message>
+    <message>
+        <source>Empty config entry</source>
+        <translation type="obsolete">Configuration vide</translation>
+    </message>
+    <message>
         <source>Not room master</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Vous n&apos;êtes pas le propriétaire de la room</translation>
     </message>
     <message>
         <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Info hérisson corrompus</translation>
     </message>
     <message>
         <source>too many teams</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">trop d&apos;équipes</translation>
     </message>
     <message>
         <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">trop de hérissons</translation>
     </message>
     <message>
         <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Il y a déja une équipe avec le même nom dans la liste</translation>
     </message>
     <message>
         <source>round in progress</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">La partie est en cour</translation>
     </message>
     <message>
         <source>restricted</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Ajout interdis</translation>
     </message>
     <message>
         <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">REMOVE_TEAM: aucune équipe de ce nom</translation>
     </message>
     <message>
         <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Vous n&apos;êtes pas le propriétaire de cette équipe!</translation>
     </message>
     <message>
         <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Il faut 2 clans minimum!</translation>
     </message>
     <message>
         <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Ce nom de room existe déjà</translation>
+    </message>
+    <message>
+        <source>Illegal room name</source>
+        <translation type="obsolete">Nom de room invalide</translation>
+    </message>
+    <message>
+        <source>No such room</source>
+        <translation type="obsolete">Cette room n&apos;existe pas</translation>
+    </message>
+    <message>
+        <source>Joining restricted</source>
+        <translation type="obsolete">Accès interdis</translation>
+    </message>
+    <message>
+        <source>Registered users only</source>
+        <translation type="obsolete">Accès réservé aux utilisateurs enregistré</translation>
+    </message>
+    <message>
+        <source>You are banned in this room</source>
+        <translation type="obsolete">Vous avez été bannis de cette room</translation>
     </message>
     <message>
         <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Pseudo déjà choisis</translation>
     </message>
     <message>
         <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Pseudo invalide</translation>
     </message>
     <message>
         <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Protocole déjà connu</translation>
     </message>
     <message>
         <source>Bad number</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Mauvais numéro</translation>
     </message>
     <message>
         <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Ce pseudo est actuellement utilisé sur le serveur</translation>
     </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_gl.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_gl.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Non se puido crear o directorio %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -223,6 +254,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -322,6 +365,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -441,10 +488,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -460,6 +503,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -504,7 +551,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 uniuse</translation>
+        <translation type="obsolete">%1 *** %2 uniuse</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -533,6 +580,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -683,6 +745,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Eraser</source>
@@ -824,6 +897,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -933,6 +1014,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1904,6 +1996,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1978,35 +2074,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Non se puido crear o directorio %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Non se puido crear o directorio %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Non se puido iniciar o servidor: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Non se puido iniciar o servidor: %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2167,10 +2240,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2282,6 +2351,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2392,6 +2481,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2993,119 +3101,4 @@
         <translation>Mando</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_hu.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -167,6 +183,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Nem sikerült létrehozni %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,6 +248,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -316,6 +359,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -435,10 +482,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -454,6 +497,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -498,7 +545,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 csatlakozott</translation>
+        <translation type="obsolete">%1 *** %2 csatlakozott</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -527,6 +574,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -677,6 +739,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -812,6 +885,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -921,6 +1002,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1890,6 +1982,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1978,35 +2074,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Nem sikerült létrehozni %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nem sikerült létrehozni %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Nem sikerült a szerverhez csatlakozni: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nem sikerült a szerverhez csatlakozni: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2152,10 +2225,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2267,6 +2336,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2377,6 +2466,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2978,119 +3086,4 @@
         <translation>DPad</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_it.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_it.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,34 @@
         <source>Send Feedback</source>
         <translation>Invia Commento</translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="obsolete">Per favore, inviaci un commento!</translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation>Siamo sempre felici di ricevere suggerimenti, idee o segnalazioni di bachi.</translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="obsolete">Se torvi u nbaco, puoi vedere se è già conosciuto qui (in inglese): </translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="obsolete">Il tuo indirizzo di posta elettronica è opzionale, ma potremmo volerti contattare.</translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +205,24 @@
             <numerusform>%1 giorni</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation>Impossibile creare la directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation>Impossibile creare la directory dati:
+%1
+
+Per favore controlla l&apos;installazione!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -227,6 +273,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation>Impossibile salvare la StyleSheet in %1! Errore interno!</translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -336,6 +394,10 @@
         <translation>Ti sei ricollegato troppo velocemente.
 Per favore aspetta qualche secondo e prova di nuovo.</translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -456,7 +518,7 @@
     </message>
     <message>
         <source>Theme: </source>
-        <translation>Tema: </translation>
+        <translation type="obsolete">Tema: </translation>
     </message>
     <message>
         <source>Load drawn map</source>
@@ -474,6 +536,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -518,7 +584,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 è entrato</translation>
+        <translation type="obsolete">%1 *** %2 è entrato</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -547,6 +613,24 @@
         <source>Login</source>
         <translation>Login</translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation>Per collegarsi al server, per favore accedi.
+
+Se non possiedi un account su www.hedgewars.org,
+inserisci solo il tuo soprannome.</translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation>Soprannome:</translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation>Password:</translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -697,6 +781,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -838,6 +933,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; aveva paura e ha passato il turno &lt;b&gt;%2&lt;/b&gt; volte.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Salva</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -905,11 +1008,11 @@
     </message>
     <message>
         <source>Play local network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Gioca una partita in rete locale</translation>
     </message>
     <message>
         <source>Play official network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Gioca una partita sul server ufficiale</translation>
     </message>
 </context>
 <context>
@@ -947,6 +1050,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation>Inserisci il tuo indirizzo</translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1938,6 +2052,10 @@
         <source>This program is distributed under the %1</source>
         <translation>Questo programma è distribuito secondo i termini di %1</translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2027,37 +2145,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Main - Errore</translation>
+        <translation type="obsolete">Main - Errore</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Impossibile creare la directory %1</translation>
+        <translation type="obsolete">Impossibile creare la directory %1</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Impossibile creare la directory dati:
+        <translation type="obsolete">Impossibile creare la directory dati:
 %1
 
 Per favore controlla l&apos;installazione!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Errore</translation>
+        <translation type="obsolete">TCP - Errore</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Impossibile avviare il server: %1.</translation>
+        <translation type="obsolete">Impossibile avviare il server: %1.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Impossibile avviare il motore a </translation>
+        <translation type="obsolete">Impossibile avviare il motore a </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Codice di errore: %1</translation>
+        <translation type="obsolete">Codice di errore: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2206,7 +2324,7 @@
     </message>
     <message>
         <source>Hedgewars</source>
-        <translation>Hedgewars</translation>
+        <translation type="obsolete">Hedgewars</translation>
     </message>
     <message>
         <source>Not all players are ready</source>
@@ -2321,6 +2439,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation>Cariva questo video nel tuo account Youtube</translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation>Ripristina</translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation>Seleziona la porta di configurazione del server di Hedgewars</translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation>Invita i tuoi amici sul tuo serve con 1 solo clic!</translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation>Clicca per copiare il tuo URL univoco del serve negli appunti. Invia questo collegamento ai tuoi amici e potranno unirsi a te.</translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation>Avvia un server privato</translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2431,6 +2569,26 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation>Impossibile avviare il server a %1.</translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation>Impossibile eseguire il motore a %1
+Codice di errore: %2</translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation>Servono almeno due squadre per giocare!</translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3036,115 +3194,111 @@
     <name>server</name>
     <message>
         <source>Not room master</source>
-        <translation>Non proprietario della stanza</translation>
+        <translation type="obsolete">Non proprietario della stanza</translation>
     </message>
     <message>
         <source>Corrupted hedgehogs info</source>
-        <translation>Informazioni ricci corrotte</translation>
+        <translation type="obsolete">Informazioni ricci corrotte</translation>
     </message>
     <message>
         <source>too many teams</source>
-        <translation>troppe squadre</translation>
+        <translation type="obsolete">troppe squadre</translation>
     </message>
     <message>
         <source>too many hedgehogs</source>
-        <translation>troppi ricci</translation>
+        <translation type="obsolete">troppi ricci</translation>
     </message>
     <message>
         <source>There&apos;s already a team with same name in the list</source>
-        <translation>C&apos;è già una quadra collo stesso nome in lista</translation>
+        <translation type="obsolete">C&apos;è già una quadra collo stesso nome in lista</translation>
     </message>
     <message>
         <source>round in progress</source>
-        <translation>turno in corso</translation>
+        <translation type="obsolete">turno in corso</translation>
     </message>
     <message>
         <source>restricted</source>
-        <translation>proibito</translation>
+        <translation type="obsolete">proibito</translation>
     </message>
     <message>
         <source>REMOVE_TEAM: no such team</source>
-        <translation>CANCELLA_SQUADRA: squadra non presente</translation>
+        <translation type="obsolete">CANCELLA_SQUADRA: squadra non presente</translation>
     </message>
     <message>
         <source>Not team owner!</source>
-        <translation>Non proprietario della squadra!</translation>
+        <translation type="obsolete">Non proprietario della squadra!</translation>
     </message>
     <message>
         <source>Less than two clans!</source>
-        <translation>Meno di due clan!</translation>
+        <translation type="obsolete">Meno di due clan!</translation>
     </message>
     <message>
         <source>Room with such name already exists</source>
-        <translation>Esiste già una stanza con questo nome</translation>
+        <translation type="obsolete">Esiste già una stanza con questo nome</translation>
     </message>
     <message>
         <source>Nickname already chosen</source>
-        <translation>Nome già scelto</translation>
+        <translation type="obsolete">Nome già scelto</translation>
     </message>
     <message>
         <source>Illegal nickname</source>
-        <translation>Nome non valido</translation>
+        <translation type="obsolete">Nome non valido</translation>
     </message>
     <message>
         <source>Protocol already known</source>
-        <translation>Protocollo già conosciuto</translation>
+        <translation type="obsolete">Protocollo già conosciuto</translation>
     </message>
     <message>
         <source>Bad number</source>
-        <translation>Numero non valido</translation>
+        <translation type="obsolete">Numero non valido</translation>
     </message>
     <message>
         <source>Nickname is already in use</source>
-        <translation>Nome già in uso</translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nome già in uso</translation>
     </message>
     <message>
         <source>Authentication failed</source>
-        <translation>Autenticazione fallita</translation>
+        <translation type="obsolete">Autenticazione fallita</translation>
     </message>
     <message>
         <source>60 seconds cooldown after kick</source>
-        <translation>60 secondi di raffreddamento prima dell'espulsione</translation>
+        <translation type="obsolete">60 secondi di raffreddamento prima dell&apos;espulsione</translation>
     </message>
     <message>
         <source>kicked</source>
-        <translation>espulso</translation>
+        <translation type="obsolete">espulso</translation>
     </message>
     <message>
         <source>Ping timeout</source>
-        <translation>Scadenza ping</translation>
+        <translation type="obsolete">Scadenza ping</translation>
     </message>
     <message>
         <source>bye</source>
-        <translation>ciao</translation>
+        <translation type="obsolete">ciao</translation>
     </message>
     <message>
         <source>Illegal room name</source>
-        <translation>Nome stanza non valido</translation>
+        <translation type="obsolete">Nome stanza non valido</translation>
     </message>
     <message>
         <source>No such room</source>
-        <translation>Stanza non esistente</translation>
+        <translation type="obsolete">Stanza non esistente</translation>
     </message>
     <message>
         <source>Joining restricted</source>
-        <translation>Ingresso riservato</translation>
+        <translation type="obsolete">Ingresso riservato</translation>
     </message>
     <message>
         <source>Registered users only</source>
-        <translation>Solo utenti registrati</translation>
+        <translation type="obsolete">Solo utenti registrati</translation>
     </message>
     <message>
         <source>You are banned in this room</source>
-        <translation>Sei stato espulso dalla stanza</translation>
+        <translation type="obsolete">Sei stato espulso dalla stanza</translation>
     </message>
     <message>
         <source>Empty config entry</source>
-        <translation>Configurazione vuota</translation>
+        <translation type="obsolete">Configurazione vuota</translation>
     </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ja.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -34,11 +34,11 @@
     </message>
     <message>
         <source>Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>ニックネーム</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/ニックネーム</translation>
     </message>
     <message>
         <source>Reason</source>
@@ -50,11 +50,11 @@
     </message>
     <message>
         <source>Ok</source>
-        <translation type="unfinished"></translation>
+        <translation>オッケー</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">キャンセル</translation>
+        <translation>キャンセル</translation>
     </message>
     <message>
         <source>you know why</source>
@@ -62,7 +62,7 @@
     </message>
     <message>
         <source>Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>警報メッセージ</translation>
     </message>
     <message>
         <source>Please, specify %1</source>
@@ -70,7 +70,7 @@
     </message>
     <message>
         <source>nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>ニックネーム</translation>
     </message>
     <message>
         <source>permanent</source>
@@ -92,12 +92,28 @@
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">キャンセル</translation>
+        <translation>キャンセル</translation>
     </message>
     <message>
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -128,7 +144,7 @@
     </message>
     <message>
         <source>Map</source>
-        <translation type="unfinished">地図</translation>
+        <translation>地図</translation>
     </message>
     <message>
         <source>Game options</source>
@@ -139,34 +155,49 @@
     <name>HWApplication</name>
     <message numerus="yes">
         <source>%1 minutes</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1分</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hour</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1時</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hours</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1時</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 day</source>
         <translation type="unfinished">
-            <numerusform></numerusform>
+            <numerusform>%1日</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 days</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1日</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">フォルダー%1作成拒否</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,6 +248,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -252,7 +295,7 @@
     </message>
     <message>
         <source>Nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>ニックネーム</translation>
     </message>
     <message>
         <source>No nickname supplied.</source>
@@ -265,7 +308,7 @@
     </message>
     <message>
         <source>%1&apos;s Team</source>
-        <translation type="unfinished"></translation>
+        <translation>%1のチーム</translation>
     </message>
     <message>
         <source>Hedgewars - Nick registered</source>
@@ -316,6 +359,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -435,10 +482,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -454,6 +497,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -498,7 +545,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 さんは参加</translation>
+        <translation type="obsolete">%1 *** %2 さんは参加</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -525,6 +572,21 @@
     <name>HWPasswordDialog</name>
     <message>
         <source>Login</source>
+        <translation>ログイン</translation>
+    </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -536,7 +598,7 @@
     </message>
     <message>
         <source>Upload</source>
-        <translation type="unfinished"></translation>
+        <translation>アップロード</translation>
     </message>
 </context>
 <context>
@@ -550,7 +612,7 @@
     <name>HatPrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">キャンセル</translation>
+        <translation>キャンセル</translation>
     </message>
     <message>
         <source>Use selected hat</source>
@@ -638,7 +700,7 @@
     </message>
     <message>
         <source>General</source>
-        <translation type="unfinished">一般</translation>
+        <translation>一般</translation>
     </message>
     <message>
         <source>Bans</source>
@@ -646,7 +708,7 @@
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/ニックネーム</translation>
     </message>
     <message>
         <source>Expiration</source>
@@ -677,6 +739,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -688,11 +761,11 @@
     </message>
     <message>
         <source>Load</source>
-        <translation type="unfinished">ロード</translation>
+        <translation>ロード</translation>
     </message>
     <message>
         <source>Save</source>
-        <translation type="unfinished"></translation>
+        <translation>セーブ</translation>
     </message>
     <message>
         <source>Load drawn map</source>
@@ -812,6 +885,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">セーブ</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -909,11 +990,11 @@
     </message>
     <message>
         <source>Start</source>
-        <translation type="unfinished">スタート</translation>
+        <translation>スタート</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished">更新</translation>
+        <translation>更新</translation>
     </message>
     <message>
         <source>Room controls</source>
@@ -921,6 +1002,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -964,7 +1056,7 @@
     </message>
     <message>
         <source>Advanced</source>
-        <translation type="unfinished">高級</translation>
+        <translation>高級</translation>
     </message>
     <message>
         <source>Reset to default colors</source>
@@ -1016,7 +1108,7 @@
     </message>
     <message>
         <source>Game</source>
-        <translation type="unfinished"></translation>
+        <translation>ゲーム</translation>
     </message>
     <message>
         <source>Graphics</source>
@@ -1824,7 +1916,7 @@
     </message>
     <message>
         <source>Nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>ニックネーム</translation>
     </message>
     <message>
         <source>Format</source>
@@ -1886,6 +1978,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1974,35 +2070,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">フォルダー%1作成拒否</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">フォルダー%1作成拒否</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">サーバー%1の起動は出来なかった</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">サーバー%1の起動は出来なかった</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2148,10 +2221,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2263,6 +2332,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2272,7 +2361,7 @@
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">キャンセル</translation>
+        <translation>キャンセル</translation>
     </message>
     <message>
         <source>Create room</source>
@@ -2334,7 +2423,7 @@
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">キャンセル</translation>
+        <translation>キャンセル</translation>
     </message>
     <message>
         <source>Set seed</source>
@@ -2373,6 +2462,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2383,7 +2491,7 @@
     <name>ThemePrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">キャンセル</translation>
+        <translation>キャンセル</translation>
     </message>
     <message>
         <source>Search for a theme:</source>
@@ -2974,119 +3082,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ko.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -167,6 +183,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,6 +248,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -316,6 +359,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -435,10 +482,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -454,6 +497,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -497,10 +544,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1 *** %2 has joined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -527,6 +570,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -677,6 +735,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -812,6 +881,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -917,6 +994,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1862,6 +1950,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1950,37 +2042,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Video upload - Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2124,10 +2185,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2239,6 +2296,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2349,6 +2426,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2950,119 +3046,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_lt.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -97,7 +97,7 @@
 <context>
     <name>DataManager</name>
     <message>
-        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="149"/>
+        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="151"/>
         <source>Use Default</source>
         <translation type="unfinished"></translation>
     </message>
@@ -105,17 +105,37 @@
 <context>
     <name>FeedbackDialog</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="114"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="91"/>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="90"/>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="92"/>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="124"/>
         <source>View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="150"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="168"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="178"/>
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
@@ -217,6 +237,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/HWApplication.cpp" line="92"/>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="102"/>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="253"/>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -229,52 +267,67 @@
 <context>
     <name>HWChatWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="640"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="502"/>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="523"/>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="525"/>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="652"/>
         <source>%1 has been removed from your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="650"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="662"/>
         <source>%1 has been added to your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="680"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="692"/>
         <source>%1 has been removed from your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="689"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="701"/>
         <source>%1 has been added to your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="755"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="767"/>
         <source>Stylesheet imported from %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="756"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="768"/>
         <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="764"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="776"/>
         <source>Couldn&apos;t read %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="772"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="784"/>
         <source>StyleSheet discarded</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="796"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="808"/>
         <source>StyleSheet saved to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="799"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="811"/>
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -287,23 +340,23 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="632"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="636"/>
         <source>Game aborted</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1121"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1435"/>
         <source>No nickname supplied.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1121"/>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
         <translation type="unfinished"></translation>
@@ -314,12 +367,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1050"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1075"/>
         <source>Hedgewars - Nick registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1051"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1076"/>
         <source>This nick is registered, and you haven&apos;t specified a password.
 
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
@@ -328,90 +381,95 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1079"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1104"/>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1084"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1109"/>
         <source>
 
 Your password wasn&apos;t saved either.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1435"/>
         <source>Hedgewars - Empty nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1152"/>
         <source>Hedgewars - Wrong password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1152"/>
         <source>You entered a wrong password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1144"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1173"/>
         <source>Try Again</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
         <source>Hedgewars - Connection error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1647"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1958"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1696"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2015"/>
         <source>Cannot save record to file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1896"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1945"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1897"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1946"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2007"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2007"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2075"/>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="374"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="386"/>
         <location filename="../../../../QTfrontend/net/recorder.cpp" line="112"/>
         <source>en.txt</source>
         <translation>lt.txt</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="415"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="427"/>
         <source>Cannot open demofile %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -419,158 +477,158 @@
 <context>
     <name>HWMapContainer</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="94"/>
         <source>Map type:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="96"/>
-        <source>Image map</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="97"/>
-        <source>Mission map</source>
+        <source>Image map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="98"/>
-        <source>Hand-drawn</source>
+        <source>Mission map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="99"/>
-        <source>Randomly generated</source>
+        <source>Hand-drawn</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="100"/>
+        <source>Randomly generated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="101"/>
         <source>Random maze</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="110"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="111"/>
         <source>Random</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="133"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="135"/>
         <source>Map preview:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="185"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="188"/>
         <source>Load map drawing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="191"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="194"/>
         <source>Edit map drawing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="204"/>
-        <source>All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="205"/>
-        <source>Small</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="206"/>
-        <source>Medium</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="207"/>
-        <source>Large</source>
+        <source>All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="208"/>
-        <source>Cavern</source>
+        <source>Small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="209"/>
+        <source>Medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="210"/>
+        <source>Large</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="211"/>
+        <source>Cavern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="212"/>
         <source>Wacky</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="219"/>
-        <source>Large tunnels</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="220"/>
-        <source>Small islands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="221"/>
-        <source>Medium islands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="222"/>
+        <source>Large tunnels</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="223"/>
+        <source>Small islands</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="224"/>
+        <source>Medium islands</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="225"/>
         <source>Large islands</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="705"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="710"/>
         <source>Map size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="712"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="717"/>
         <source>Maze style:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="725"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="730"/>
         <source>Mission:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="735"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="740"/>
         <source>Map:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="799"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="930"/>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="804"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="935"/>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>Drawn Maps</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>All files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="217"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="220"/>
         <source>Small tunnels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="218"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="221"/>
         <source>Medium tunnels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="124"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="126"/>
         <source>Seed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -621,40 +679,33 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="697"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="707"/>
         <source>Room destroyed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="470"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="484"/>
         <source>You got kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="641"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="773"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="651"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="782"/>
         <source>%1 *** %2 has joined the room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="495"/>
-        <source>%1 *** %2 has joined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="544"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="788"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="797"/>
         <source>%1 *** %2 has left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="546"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="790"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="799"/>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1559"/>
         <source>Quit reason: </source>
         <translation type="unfinished"></translation>
     </message>
@@ -666,6 +717,24 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="35"/>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="39"/>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="47"/>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -691,17 +760,17 @@
 <context>
     <name>HatPrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="83"/>
         <source>Search for a hat:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="119"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="123"/>
         <source>Use selected hat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -846,6 +915,19 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagedata.cpp" line="66"/>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagedata.cpp" line="126"/>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="32"/>
@@ -966,12 +1048,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="174"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="113"/>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="118"/>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="193"/>
         <source>The best shot award was won by &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; pts.</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="182"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="201"/>
         <source>The best killer is &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; kills in a turn.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -980,7 +1072,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="189"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="208"/>
         <source>A total of &lt;b&gt;%1&lt;/b&gt; hedgehog(s) were killed during this round.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -989,7 +1081,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="253"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="272"/>
         <source>(%1 kill)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -998,7 +1090,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="264"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="283"/>
         <source>&lt;b&gt;%1&lt;/b&gt; thought it&apos;s good to shoot his own hedgehogs with &lt;b&gt;%2&lt;/b&gt; pts.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1007,7 +1099,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="272"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="291"/>
         <source>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of his own hedgehogs.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1016,7 +1108,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="280"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="299"/>
         <source>&lt;b&gt;%1&lt;/b&gt; was scared and skipped turn &lt;b&gt;%2&lt;/b&gt; times.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1117,12 +1209,12 @@
 <context>
     <name>PageMultiplayer</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="50"/>
         <source>Edit game preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="64"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="62"/>
         <source>Start</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1151,6 +1243,19 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="87"/>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="138"/>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="91"/>
@@ -1269,97 +1374,97 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="369"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="371"/>
         <source>Frontend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="386"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="388"/>
         <source>Custom colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="416"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="418"/>
         <source>Reset to default colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="429"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="431"/>
         <source>Game audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="467"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="469"/>
         <source>Frontend audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="490"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="492"/>
         <source>Account</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="516"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="518"/>
         <source>Proxy settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="522"/>
-        <source>Proxy host</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="523"/>
-        <source>Proxy port</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="524"/>
-        <source>Proxy login</source>
+        <source>Proxy host</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="525"/>
+        <source>Proxy port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="526"/>
+        <source>Proxy login</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="527"/>
         <source>Proxy password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="538"/>
-        <source>No proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="539"/>
-        <source>System proxy settings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="540"/>
-        <source>Socks5 proxy</source>
+        <source>No proxy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="541"/>
+        <source>System proxy settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="542"/>
+        <source>Socks5 proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="543"/>
         <source>HTTP proxy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="576"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="578"/>
         <source>Miscellaneous</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="616"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="624"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="629"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="637"/>
         <source>Check for updates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="643"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="651"/>
         <source>Video recording options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1380,52 +1485,52 @@
 <context>
     <name>PageRoomsList</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="53"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="64"/>
         <source>Search for a room:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="80"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="91"/>
         <source>Create room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="84"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="95"/>
         <source>Join room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="131"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="153"/>
         <source>Room state</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="155"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="177"/>
         <source>Rules:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="169"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="191"/>
         <source>Weapons:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="180"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="202"/>
         <source>Clear filters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="198"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="220"/>
         <source>Admin features</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="200"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="222"/>
         <source>Open server administration page</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="585"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="609"/>
         <source>%1 players online</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1739,23 +1844,23 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="269"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="873"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
         <source>Ignore</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="273"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="897"/>
         <source>Add friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="868"/>
-        <source>Unignore</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="880"/>
+        <source>Unignore</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="892"/>
         <source>Remove friend</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1775,12 +1880,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="162"/>
         <source>Show games in lobby</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="143"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="165"/>
         <source>Show games in-progress</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1788,75 +1893,75 @@
 <context>
     <name>QCheckBox</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="364"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="366"/>
         <source>Show ammo menu tooltips</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="358"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="360"/>
         <source>Alternative damage show</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="381"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="383"/>
         <source>Visual effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="454"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="471"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="456"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="473"/>
         <source>Sound</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="455"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="457"/>
         <source>In-game sound effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="461"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="476"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="463"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="478"/>
         <source>Music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="462"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="464"/>
         <source>In-game music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="472"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="474"/>
         <source>Frontend sound effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="477"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="479"/>
         <source>Frontend music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="602"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="610"/>
         <source>Append date and time to record file name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="622"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="630"/>
         <source>Check for updates at startup</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="375"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="377"/>
         <source>Fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="347"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="349"/>
         <source>Show FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="59"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="507"/>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="55"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="509"/>
         <source>Save password</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1871,12 +1976,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="683"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="691"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="732"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="740"/>
         <source>Use game resolution</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1899,88 +2004,88 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="588"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="590"/>
         <source>(System default)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="311"/>
-        <source>Disabled</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="312"/>
-        <source>Red/Cyan</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="313"/>
-        <source>Cyan/Red</source>
+        <source>Disabled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="314"/>
-        <source>Red/Blue</source>
+        <source>Red/Cyan</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="315"/>
-        <source>Blue/Red</source>
+        <source>Cyan/Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="316"/>
-        <source>Red/Green</source>
+        <source>Red/Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="317"/>
+        <source>Blue/Red</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="318"/>
+        <source>Red/Green</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="319"/>
         <source>Green/Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="326"/>
+        <source>Side-by-side</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="327"/>
+        <source>Top-Bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="320"/>
+        <source>Red/Cyan grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
+        <source>Cyan/Red grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="322"/>
+        <source>Red/Blue grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="323"/>
+        <source>Blue/Red grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="324"/>
-        <source>Side-by-side</source>
+        <source>Red/Green grayscale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="325"/>
-        <source>Top-Bottom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="318"/>
-        <source>Red/Cyan grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="319"/>
-        <source>Cyan/Red grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="320"/>
-        <source>Red/Blue grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
-        <source>Blue/Red grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="322"/>
-        <source>Red/Green grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="323"/>
         <source>Green/Red grayscale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="189"/>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="262"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="211"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="286"/>
         <source>Any</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2018,7 +2123,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="255"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/>
         <source>Playing teams</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2096,42 +2201,47 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="139"/>
         <source>Tip: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="135"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="56"/>
         <source>Server name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="59"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="63"/>
         <source>Server port:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="582"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="584"/>
         <source>Locale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="496"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="498"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="708"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="599"/>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="716"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="293"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="295"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2151,17 +2261,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="307"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="309"/>
         <source>Stereo rendering</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="437"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="439"/>
         <source>Initial sound volume</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="338"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="340"/>
         <source>FPS limit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2283,52 +2393,52 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="103"/>
         <source>Your Email</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="101"/>
-        <source>Summary</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="111"/>
+        <source>Summary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="121"/>
         <source>Send system information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="126"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="136"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="154"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="164"/>
         <source>Type the security code:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="652"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="660"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="672"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="680"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="697"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="705"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="738"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="746"/>
         <source>Framerate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="752"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="760"/>
         <source>Bitrate (Kbps)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2336,7 +2446,7 @@
 <context>
     <name>QLineEdit</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="933"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="952"/>
         <source>unnamed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2347,7 +2457,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="501"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="503"/>
         <source>anonymous</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2378,81 +2488,82 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="962"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="981"/>
         <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="500"/>
         <source>Cannot delete default scheme &apos;%1&apos;!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="988"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1007"/>
         <source>Please select a record from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1077"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1102"/>
         <source>Hedgewars - Nick not registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1452"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1498"/>
         <source>Unable to start server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1559"/>
         <source>Connection to server is lost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2082"/>
+        <source>Not all players are ready</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2083"/>
+        <source>Are you sure you want to start this game?
+Not all players are ready.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="352"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="24"/>
+        <source>Hedgewars - Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="362"/>
+        <source>System Information Preview</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="377"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="388"/>
+        <source>Failed to generate captcha</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="405"/>
+        <source>Failed to download captcha</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="469"/>
+        <source>Please fill out all fields. Email is optional.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1985"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="439"/>
+        <source>Hedgewars - Success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/hwform.cpp" line="1986"/>
-        <source>Not all players are ready</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1987"/>
-        <source>Are you sure you want to start this game?
-Not all players are ready.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="340"/>
-        <source>Hedgewars - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="350"/>
-        <source>System Information Preview</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="365"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="376"/>
-        <source>Failed to generate captcha</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="393"/>
-        <source>Failed to download captcha</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="457"/>
-        <source>Please fill out all fields. Email is optional.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1928"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="427"/>
-        <source>Hedgewars - Success</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1929"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1934"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1991"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2490,46 +2601,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="114"/>
-        <location filename="../../../../QTfrontend/main.cpp" line="274"/>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="115"/>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="275"/>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="94"/>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="177"/>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="95"/>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="178"/>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="179"/>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
         <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="244"/>
         <source>Netgame - Error</source>
@@ -2570,22 +2641,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="536"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="560"/>
         <source>Room Name - Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="537"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="561"/>
         <source>Please select room from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="572"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="596"/>
         <source>Room Name - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="573"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="597"/>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
         <translation type="unfinished"></translation>
@@ -2634,7 +2705,7 @@
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="101"/>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="121"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="891"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="896"/>
         <source>File error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2645,7 +2716,7 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="122"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="892"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="897"/>
         <source>Cannot open &apos;%1&apos; for reading</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2676,26 +2747,20 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="23"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="32"/>
         <source>Hedgewars - Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="28"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="40"/>
         <source>Hedgewars - Information</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="35"/>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>QPushButton</name>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="49"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="68"/>
         <source>default</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2737,12 +2802,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="73"/>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="74"/>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="78"/>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="79"/>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="99"/>
         <source>Start</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="608"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="100"/>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="616"/>
         <source>Associate file extensions</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2775,12 +2865,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="765"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="773"/>
         <source>Set default options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="766"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="774"/>
         <source>Restore default coding parameters</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2962,6 +3052,28 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="91"/>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="168"/>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/teamselhelper.cpp" line="58"/>
@@ -2972,17 +3084,17 @@
 <context>
     <name>ThemePrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="84"/>
         <source>Search for a theme:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="120"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="124"/>
         <source>Use selected theme</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3355,7 +3467,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="156"/>
+        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="158"/>
         <source>Keyboard</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3715,147 +3827,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="2"/>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="4"/>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="5"/>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="8"/>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="17"/>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="18"/>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="21"/>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ms.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ms.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -97,7 +97,7 @@
 <context>
     <name>DataManager</name>
     <message>
-        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="149"/>
+        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="151"/>
         <source>Use Default</source>
         <translation type="unfinished"></translation>
     </message>
@@ -105,17 +105,37 @@
 <context>
     <name>FeedbackDialog</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="114"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="91"/>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="90"/>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="92"/>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="124"/>
         <source>View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="150"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="168"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="178"/>
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
@@ -205,6 +225,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/HWApplication.cpp" line="92"/>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="102"/>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="253"/>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,52 +255,67 @@
 <context>
     <name>HWChatWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="640"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="502"/>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="523"/>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="525"/>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="652"/>
         <source>%1 has been removed from your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="650"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="662"/>
         <source>%1 has been added to your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="680"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="692"/>
         <source>%1 has been removed from your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="689"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="701"/>
         <source>%1 has been added to your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="755"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="767"/>
         <source>Stylesheet imported from %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="756"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="768"/>
         <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="764"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="776"/>
         <source>Couldn&apos;t read %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="772"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="784"/>
         <source>StyleSheet discarded</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="796"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="808"/>
         <source>StyleSheet saved to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="799"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="811"/>
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -280,17 +333,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="632"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="636"/>
         <source>Game aborted</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1050"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1075"/>
         <source>Hedgewars - Nick registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1051"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1076"/>
         <source>This nick is registered, and you haven&apos;t specified a password.
 
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
@@ -299,107 +352,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1079"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1104"/>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1084"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1109"/>
         <source>
 
 Your password wasn&apos;t saved either.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1121"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1121"/>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1435"/>
         <source>No nickname supplied.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1435"/>
         <source>Hedgewars - Empty nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1152"/>
         <source>Hedgewars - Wrong password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1152"/>
         <source>You entered a wrong password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1144"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1173"/>
         <source>Try Again</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
         <source>Hedgewars - Connection error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1647"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1958"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1696"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2015"/>
         <source>Cannot save record to file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1896"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1945"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1897"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1946"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2007"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2007"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2075"/>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="374"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="386"/>
         <location filename="../../../../QTfrontend/net/recorder.cpp" line="112"/>
         <source>en.txt</source>
         <translation>ms.txt</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="415"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="427"/>
         <source>Cannot open demofile %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -407,158 +465,158 @@
 <context>
     <name>HWMapContainer</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="94"/>
         <source>Map type:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="96"/>
-        <source>Image map</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="97"/>
-        <source>Mission map</source>
+        <source>Image map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="98"/>
-        <source>Hand-drawn</source>
+        <source>Mission map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="99"/>
-        <source>Randomly generated</source>
+        <source>Hand-drawn</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="100"/>
+        <source>Randomly generated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="101"/>
         <source>Random maze</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="110"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="111"/>
         <source>Random</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="133"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="135"/>
         <source>Map preview:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="185"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="188"/>
         <source>Load map drawing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="191"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="194"/>
         <source>Edit map drawing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="204"/>
-        <source>All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="205"/>
-        <source>Small</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="206"/>
-        <source>Medium</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="207"/>
-        <source>Large</source>
+        <source>All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="208"/>
-        <source>Cavern</source>
+        <source>Small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="209"/>
+        <source>Medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="210"/>
+        <source>Large</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="211"/>
+        <source>Cavern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="212"/>
         <source>Wacky</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="219"/>
-        <source>Large tunnels</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="220"/>
-        <source>Small islands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="221"/>
-        <source>Medium islands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="222"/>
+        <source>Large tunnels</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="223"/>
+        <source>Small islands</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="224"/>
+        <source>Medium islands</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="225"/>
         <source>Large islands</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="705"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="710"/>
         <source>Map size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="712"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="717"/>
         <source>Maze style:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="725"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="730"/>
         <source>Mission:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="735"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="740"/>
         <source>Map:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="799"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="930"/>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="804"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="935"/>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>Drawn Maps</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>All files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="217"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="220"/>
         <source>Small tunnels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="218"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="221"/>
         <source>Medium tunnels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="124"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="126"/>
         <source>Seed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -584,7 +642,7 @@
 <context>
     <name>HWNewNet</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1559"/>
         <source>Quit reason: </source>
         <translation type="unfinished"></translation>
     </message>
@@ -614,35 +672,28 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="470"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="484"/>
         <source>You got kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="495"/>
-        <source>%1 *** %2 has joined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="544"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="788"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="797"/>
         <source>%1 *** %2 has left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="546"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="790"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="799"/>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="641"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="773"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="651"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="782"/>
         <source>%1 *** %2 has joined the room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="697"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="707"/>
         <source>Room destroyed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -654,6 +705,24 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="35"/>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="39"/>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="47"/>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -679,17 +748,17 @@
 <context>
     <name>HatPrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="83"/>
         <source>Search for a hat:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="119"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="123"/>
         <source>Use selected hat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -834,6 +903,19 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagedata.cpp" line="66"/>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagedata.cpp" line="126"/>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="32"/>
@@ -954,47 +1036,57 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="174"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="113"/>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="118"/>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="193"/>
         <source>The best shot award was won by &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; pts.</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="182"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="201"/>
         <source>The best killer is &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; kills in a turn.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="189"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="208"/>
         <source>A total of &lt;b&gt;%1&lt;/b&gt; hedgehog(s) were killed during this round.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="253"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="272"/>
         <source>(%1 kill)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="264"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="283"/>
         <source>&lt;b&gt;%1&lt;/b&gt; thought it&apos;s good to shoot his own hedgehogs with &lt;b&gt;%2&lt;/b&gt; pts.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="272"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="291"/>
         <source>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of his own hedgehogs.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="280"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="299"/>
         <source>&lt;b&gt;%1&lt;/b&gt; was scared and skipped turn &lt;b&gt;%2&lt;/b&gt; times.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1093,12 +1185,12 @@
 <context>
     <name>PageMultiplayer</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="50"/>
         <source>Edit game preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="64"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="62"/>
         <source>Start</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1127,6 +1219,19 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="87"/>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="138"/>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="91"/>
@@ -1245,97 +1350,97 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="369"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="371"/>
         <source>Frontend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="386"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="388"/>
         <source>Custom colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="416"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="418"/>
         <source>Reset to default colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="429"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="431"/>
         <source>Game audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="467"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="469"/>
         <source>Frontend audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="490"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="492"/>
         <source>Account</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="516"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="518"/>
         <source>Proxy settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="522"/>
-        <source>Proxy host</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="523"/>
-        <source>Proxy port</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="524"/>
-        <source>Proxy login</source>
+        <source>Proxy host</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="525"/>
+        <source>Proxy port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="526"/>
+        <source>Proxy login</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="527"/>
         <source>Proxy password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="538"/>
-        <source>No proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="539"/>
-        <source>System proxy settings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="540"/>
-        <source>Socks5 proxy</source>
+        <source>No proxy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="541"/>
+        <source>System proxy settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="542"/>
+        <source>Socks5 proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="543"/>
         <source>HTTP proxy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="576"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="578"/>
         <source>Miscellaneous</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="616"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="624"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="629"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="637"/>
         <source>Check for updates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="643"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="651"/>
         <source>Video recording options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1356,52 +1461,52 @@
 <context>
     <name>PageRoomsList</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="53"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="64"/>
         <source>Search for a room:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="80"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="91"/>
         <source>Create room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="84"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="95"/>
         <source>Join room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="131"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="153"/>
         <source>Room state</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="155"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="177"/>
         <source>Rules:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="169"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="191"/>
         <source>Weapons:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="180"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="202"/>
         <source>Clear filters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="198"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="220"/>
         <source>Admin features</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="200"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="222"/>
         <source>Open server administration page</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="585"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="609"/>
         <source>%1 players online</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1726,33 +1831,33 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="269"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="873"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
         <source>Ignore</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="273"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="897"/>
         <source>Add friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="868"/>
-        <source>Unignore</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="880"/>
+        <source>Unignore</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="892"/>
         <source>Remove friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="162"/>
         <source>Show games in lobby</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="143"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="165"/>
         <source>Show games in-progress</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1760,8 +1865,8 @@
 <context>
     <name>QCheckBox</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="59"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="507"/>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="55"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="509"/>
         <source>Save password</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1776,79 +1881,79 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="622"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="630"/>
         <source>Check for updates at startup</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="375"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="377"/>
         <source>Fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="358"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="360"/>
         <source>Alternative damage show</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="347"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="349"/>
         <source>Show FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="364"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="366"/>
         <source>Show ammo menu tooltips</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="381"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="383"/>
         <source>Visual effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="454"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="471"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="456"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="473"/>
         <source>Sound</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="455"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="457"/>
         <source>In-game sound effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="461"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="476"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="463"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="478"/>
         <source>Music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="462"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="464"/>
         <source>In-game music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="472"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="474"/>
         <source>Frontend sound effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="477"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="479"/>
         <source>Frontend music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="602"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="610"/>
         <source>Append date and time to record file name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="683"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="691"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="732"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="740"/>
         <source>Use game resolution</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1871,88 +1976,88 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="588"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="590"/>
         <source>(System default)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="311"/>
-        <source>Disabled</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="312"/>
-        <source>Red/Cyan</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="313"/>
-        <source>Cyan/Red</source>
+        <source>Disabled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="314"/>
-        <source>Red/Blue</source>
+        <source>Red/Cyan</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="315"/>
-        <source>Blue/Red</source>
+        <source>Cyan/Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="316"/>
-        <source>Red/Green</source>
+        <source>Red/Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="317"/>
+        <source>Blue/Red</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="318"/>
+        <source>Red/Green</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="319"/>
         <source>Green/Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="326"/>
+        <source>Side-by-side</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="327"/>
+        <source>Top-Bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="320"/>
+        <source>Red/Cyan grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
+        <source>Cyan/Red grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="322"/>
+        <source>Red/Blue grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="323"/>
+        <source>Blue/Red grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="324"/>
-        <source>Side-by-side</source>
+        <source>Red/Green grayscale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="325"/>
-        <source>Top-Bottom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="318"/>
-        <source>Red/Cyan grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="319"/>
-        <source>Cyan/Red grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="320"/>
-        <source>Red/Blue grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
-        <source>Blue/Red grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="322"/>
-        <source>Red/Green grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="323"/>
         <source>Green/Red grayscale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="189"/>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="262"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="211"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="286"/>
         <source>Any</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2000,7 +2105,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="255"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/>
         <source>Playing teams</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2080,47 +2185,47 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="103"/>
         <source>Your Email</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="101"/>
-        <source>Summary</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="111"/>
+        <source>Summary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="121"/>
         <source>Send system information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="126"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="136"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="154"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="164"/>
         <source>Type the security code:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="139"/>
+        <source>Tip: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
-        <source>Tip: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="135"/>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="56"/>
         <source>Server name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="59"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="63"/>
         <source>Server port:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2130,22 +2235,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="582"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="584"/>
         <source>Locale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="496"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="498"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="708"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="599"/>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="716"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="293"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="295"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2165,17 +2275,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="307"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="309"/>
         <source>Stereo rendering</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="437"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="439"/>
         <source>Initial sound volume</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="338"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="340"/>
         <source>FPS limit</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2260,27 +2370,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="652"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="660"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="672"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="680"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="697"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="705"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="738"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="746"/>
         <source>Framerate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="752"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="760"/>
         <source>Bitrate (Kbps)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2308,7 +2418,7 @@
 <context>
     <name>QLineEdit</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="933"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="952"/>
         <source>unnamed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2319,7 +2429,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="501"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="503"/>
         <source>anonymous</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2350,125 +2460,86 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="962"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="981"/>
         <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="500"/>
         <source>Cannot delete default scheme &apos;%1&apos;!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="988"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1007"/>
         <source>Please select a record from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1077"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1102"/>
         <source>Hedgewars - Nick not registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1452"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1498"/>
         <source>Unable to start server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1559"/>
         <source>Connection to server is lost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2082"/>
+        <source>Not all players are ready</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2083"/>
+        <source>Are you sure you want to start this game?
+Not all players are ready.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="352"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="24"/>
+        <source>Hedgewars - Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="362"/>
+        <source>System Information Preview</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="377"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="388"/>
+        <source>Failed to generate captcha</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="405"/>
+        <source>Failed to download captcha</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="469"/>
+        <source>Please fill out all fields. Email is optional.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1985"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="439"/>
+        <source>Hedgewars - Success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/hwform.cpp" line="1986"/>
-        <source>Not all players are ready</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1987"/>
-        <source>Are you sure you want to start this game?
-Not all players are ready.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="340"/>
-        <source>Hedgewars - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="350"/>
-        <source>System Information Preview</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="365"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="376"/>
-        <source>Failed to generate captcha</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="393"/>
-        <source>Failed to download captcha</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="457"/>
-        <source>Please fill out all fields. Email is optional.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1928"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="427"/>
-        <source>Hedgewars - Success</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1929"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1934"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1991"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="114"/>
-        <location filename="../../../../QTfrontend/main.cpp" line="274"/>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="115"/>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="275"/>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="94"/>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="177"/>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="95"/>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="178"/>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="179"/>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/dialog/upload_video.cpp" line="232"/>
         <source>Error while authenticating at google.com:
 </source>
@@ -2532,22 +2603,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="536"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="560"/>
         <source>Room Name - Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="537"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="561"/>
         <source>Please select room from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="572"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="596"/>
         <source>Room Name - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="573"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="597"/>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
         <translation type="unfinished"></translation>
@@ -2594,7 +2665,7 @@
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="101"/>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="121"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="891"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="896"/>
         <source>File error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2605,7 +2676,7 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="122"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="892"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="897"/>
         <source>Cannot open &apos;%1&apos; for reading</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2646,20 +2717,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="23"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="32"/>
         <source>Hedgewars - Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="28"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="40"/>
         <source>Hedgewars - Information</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="35"/>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>QPushButton</name>
@@ -2670,7 +2736,6 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="49"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="68"/>
         <source>default</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2712,12 +2777,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="73"/>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="74"/>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="78"/>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="79"/>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="99"/>
         <source>Start</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="608"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="100"/>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="616"/>
         <source>Associate file extensions</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2745,12 +2835,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="765"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="773"/>
         <source>Set default options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="766"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="774"/>
         <source>Restore default coding parameters</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2932,6 +3022,28 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="91"/>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="168"/>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/teamselhelper.cpp" line="58"/>
@@ -2942,17 +3054,17 @@
 <context>
     <name>ThemePrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="84"/>
         <source>Search for a theme:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="120"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="124"/>
         <source>Use selected theme</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3643,7 +3755,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="156"/>
+        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="158"/>
         <source>Keyboard</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3685,147 +3797,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="2"/>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="4"/>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="5"/>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="8"/>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="17"/>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="18"/>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="21"/>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_nl.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -223,6 +254,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -322,6 +365,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -441,10 +488,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -460,6 +503,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -503,10 +550,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1 *** %2 has joined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -533,6 +576,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -683,6 +741,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -824,6 +893,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -929,6 +1006,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1876,6 +1964,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1964,37 +2056,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Video upload - Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2139,10 +2200,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2254,6 +2311,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2364,6 +2441,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2965,119 +3061,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pl.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -5,7 +5,7 @@
     <name>About</name>
     <message>
         <source>Unknown Compiler</source>
-        <translation type="unfinished"></translation>
+        <translation>Nieznany kompilator</translation>
     </message>
 </context>
 <context>
@@ -30,73 +30,89 @@
     <name>BanDialog</name>
     <message>
         <source>IP</source>
-        <translation type="unfinished">IP</translation>
+        <translation>IP</translation>
     </message>
     <message>
         <source>Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>Nick</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Nick</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Powód</translation>
     </message>
     <message>
         <source>Duration</source>
-        <translation type="unfinished"></translation>
+        <translation>Czas trwania</translation>
     </message>
     <message>
         <source>Ok</source>
-        <translation type="unfinished"></translation>
+        <translation>Ok</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Anuluj</translation>
+        <translation>Anuluj</translation>
     </message>
     <message>
         <source>you know why</source>
-        <translation type="unfinished"></translation>
+        <translation>Wiesz za co</translation>
     </message>
     <message>
         <source>Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Ostrzeżenie</translation>
     </message>
     <message>
         <source>Please, specify %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Proszę, opisz %1</translation>
     </message>
     <message>
         <source>nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>ksywka</translation>
     </message>
     <message>
         <source>permanent</source>
-        <translation type="unfinished"></translation>
+        <translation>dożywotni</translation>
     </message>
 </context>
 <context>
     <name>DataManager</name>
     <message>
         <source>Use Default</source>
-        <translation type="unfinished"></translation>
+        <translation>Użyj domyślnych</translation>
     </message>
 </context>
 <context>
     <name>FeedbackDialog</name>
     <message>
         <source>View</source>
-        <translation type="unfinished"></translation>
+        <translation>Pokaż</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Anuluj</translation>
+        <translation>Anuluj</translation>
     </message>
     <message>
         <source>Send Feedback</source>
-        <translation type="unfinished"></translation>
+        <translation>Wyśłij opinię</translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation>Jesteśmy wdzięczni za sugestie, pomysły i znalezione błędy.</translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation>Wyślij swoją opinię!</translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation>Jeśli znalazłeś błąd, możesz sprawdzić czy został już zgłoszony w tym miejscu: </translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation>E-mail jest opcjonalny chyba, że chcesz byśmy się z tobą skontaktowali.</translation>
     </message>
 </context>
 <context>
@@ -130,59 +146,84 @@
     </message>
     <message>
         <source>Game scheme will auto-select a weapon</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Schemat gry automatycznie wybierze uzbrojenie</translation>
     </message>
     <message>
         <source>Map</source>
-        <translation type="unfinished">Mapa</translation>
+        <translation>Mapa</translation>
     </message>
     <message>
         <source>Game options</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustawienia gry</translation>
+    </message>
+</context>
+<context>
+    <name>GameUIConfig</name>
+    <message>
+        <source>Guest</source>
+        <translation>Gość</translation>
     </message>
 </context>
 <context>
     <name>HWApplication</name>
     <message numerus="yes">
         <source>%1 minutes</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 minuta</numerusform>
+            <numerusform>%1 minuty</numerusform>
+            <numerusform>%1 minut</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hour</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 godzina</numerusform>
+            <numerusform>%1 godziny</numerusform>
+            <numerusform>%1 godzin</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hours</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 godziny</numerusform>
+            <numerusform>%1 godziny</numerusform>
+            <numerusform>%1 godzin</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 day</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 dzień</numerusform>
+            <numerusform>%1 dni</numerusform>
+            <numerusform>%1 dni</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 days</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 dni</numerusform>
+            <numerusform>%1 dni</numerusform>
+            <numerusform>%1 dni</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation>Shemat &apos;%1&apos; nie jest wspierany</translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation>Nie można utworzyć katalogu %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation>Nie można otworzyć katalogu z danymi:
+%1
+
+Sprawdź poprawność instalacji!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -233,6 +274,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation>Nie można było zapisać arkusza stylów jako %1</translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation>%1 dołączył</translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation>%1 wyszedł</translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation>%1 wyszedł (%2)</translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -282,11 +335,11 @@
     </message>
     <message>
         <source>%1&apos;s Team</source>
-        <translation type="unfinished"></translation>
+        <translation>Zespół %1</translation>
     </message>
     <message>
         <source>Hedgewars - Nick registered</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Zarejestrowany nick</translation>
     </message>
     <message>
         <source>This nick is registered, and you haven&apos;t specified a password.
@@ -294,44 +347,61 @@
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
 
 Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ten nick jest zarejestrowany i musisz podać hasło.
+
+Jeżeli ten nick nie jest twój, zarejestrój własny na www.hedgewars.org
+
+Hasło:</translation>
     </message>
     <message>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
-        <translation type="unfinished"></translation>
+        <translation>Twój nick nie jest zarejestrowany.
+By zapobiec używania go przez kogoś innego
+zarejestruj go na www.hedgewars.org</translation>
     </message>
     <message>
         <source>
 
 Your password wasn&apos;t saved either.</source>
-        <translation type="unfinished"></translation>
+        <translation>
+
+Twoje hasło nie zostało zapisane.</translation>
     </message>
     <message>
         <source>Hedgewars - Empty nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Brak nicku</translation>
     </message>
     <message>
         <source>Hedgewars - Wrong password</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Złe hasło</translation>
     </message>
     <message>
         <source>You entered a wrong password.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wpisałeś złe hasło.</translation>
     </message>
     <message>
         <source>Try Again</source>
-        <translation type="unfinished"></translation>
+        <translation>Spróbuj ponownie</translation>
     </message>
     <message>
         <source>Hedgewars - Connection error</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Błąd połączenia</translation>
     </message>
     <message>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
-        <translation type="unfinished"></translation>
+        <translation>Za szybko połączyłes się ponownie.
+Poczekaj kilka sekund i spróbuj ponownie.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation>Ta strona wymaga połączenia z internetem.</translation>
+    </message>
+    <message>
+        <source>Guest</source>
+        <translation>Gość</translation>
     </message>
 </context>
 <context>
@@ -385,91 +455,91 @@
     </message>
     <message>
         <source>Map type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Typ mapy:</translation>
     </message>
     <message>
         <source>Image map</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Mapa z obrazka</translation>
     </message>
     <message>
         <source>Mission map</source>
-        <translation type="unfinished"></translation>
+        <translation>Misja</translation>
     </message>
     <message>
         <source>Hand-drawn</source>
-        <translation type="unfinished">Rys. ręcznie</translation>
+        <translation>Rysowana ręcznie</translation>
     </message>
     <message>
         <source>Randomly generated</source>
-        <translation type="unfinished"></translation>
+        <translation>Losowa mapa</translation>
     </message>
     <message>
         <source>Random maze</source>
-        <translation type="unfinished"></translation>
+        <translation>Losowe labirynty</translation>
     </message>
     <message>
         <source>Random</source>
-        <translation type="unfinished">Losowo</translation>
+        <translation>Losowo</translation>
     </message>
     <message>
         <source>Map preview:</source>
-        <translation type="unfinished"></translation>
+        <translation>Podgląd:</translation>
     </message>
     <message>
         <source>Load map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Wczytaj rysowana mapę</translation>
     </message>
     <message>
         <source>Edit map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Edytuj mapę</translation>
     </message>
     <message>
         <source>Small islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Małe wyspy</translation>
     </message>
     <message>
         <source>Medium islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Średnie wyspy</translation>
     </message>
     <message>
         <source>Large islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Duże wyspy</translation>
     </message>
     <message>
         <source>Map size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Rozmiar mapy:</translation>
     </message>
     <message>
         <source>Maze style:</source>
-        <translation type="unfinished"></translation>
+        <translation>Styl labiryntu:</translation>
     </message>
     <message>
         <source>Mission:</source>
-        <translation type="unfinished"></translation>
+        <translation>Misja:</translation>
     </message>
     <message>
         <source>Map:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
+        <translation>Mapa:</translation>
     </message>
     <message>
         <source>Load drawn map</source>
-        <translation type="unfinished">Załaduj mapę</translation>
+        <translation>Załaduj mapę</translation>
     </message>
     <message>
         <source>Drawn Maps</source>
-        <translation type="unfinished">Narysowane mapy</translation>
+        <translation>Narysowane mapy</translation>
     </message>
     <message>
         <source>All files</source>
-        <translation type="unfinished">Wszystkie pliki</translation>
+        <translation>Wszystkie pliki</translation>
     </message>
     <message>
         <source>Large tunnels</source>
-        <translation type="unfinished"></translation>
+        <translation>Duże tunele</translation>
+    </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation>Motyw: %1</translation>
     </message>
 </context>
 <context>
@@ -515,7 +585,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 dołączył</translation>
+        <translation type="obsolete">%1 *** %2 dołączył</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -542,7 +612,25 @@
     <name>HWPasswordDialog</name>
     <message>
         <source>Login</source>
-        <translation type="unfinished"></translation>
+        <translation>Login</translation>
+    </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation>Zaloguj się by połączyć się z serwerem.
+
+Jeśli nie masz konta na www.hedgewars.org,
+po prostu wpisz swój nick.</translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation>Nick:</translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation>Hasło:</translation>
     </message>
 </context>
 <context>
@@ -560,22 +648,22 @@
     <name>HatButton</name>
     <message>
         <source>Change hat (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zmień czapkę (%1)</translation>
     </message>
 </context>
 <context>
     <name>HatPrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Anuluj</translation>
+        <translation>Anuluj</translation>
     </message>
     <message>
         <source>Use selected hat</source>
-        <translation type="unfinished"></translation>
+        <translation>Użyj wybranej czapki</translation>
     </message>
     <message>
         <source>Search for a hat:</source>
-        <translation type="unfinished"></translation>
+        <translation>Szukaj czapki:</translation>
     </message>
 </context>
 <context>
@@ -589,7 +677,7 @@
     <name>KeyBinder</name>
     <message>
         <source>Category</source>
-        <translation type="unfinished"></translation>
+        <translation>Kategoria</translation>
     </message>
 </context>
 <context>
@@ -597,30 +685,30 @@
     <message>
         <source>Duration: %1m %2s
 </source>
-        <translation type="unfinished">Długość: %1m %2s </translation>
+        <translation>Długość: %1m %2s </translation>
     </message>
     <message>
         <source>Video: %1x%2, </source>
-        <translation type="unfinished">Wideo: %1x%2, </translation>
+        <translation>Wideo: %1x%2, </translation>
     </message>
     <message>
         <source>%1 fps, </source>
-        <translation type="unfinished">%1 kl/s, </translation>
+        <translation>%1 kl/s, </translation>
     </message>
     <message>
         <source>Audio: </source>
-        <translation type="unfinished">Audio: </translation>
+        <translation>Audio: </translation>
     </message>
     <message>
         <source>unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>nieznany</translation>
     </message>
 </context>
 <context>
     <name>MapModel</name>
     <message>
         <source>No description available.</source>
-        <translation type="unfinished"></translation>
+        <translation>Brak opisu.</translation>
     </message>
 </context>
 <context>
@@ -655,35 +743,35 @@
     </message>
     <message>
         <source>General</source>
-        <translation type="unfinished">Ogólne</translation>
+        <translation>Ogólne</translation>
     </message>
     <message>
         <source>Bans</source>
-        <translation type="unfinished"></translation>
+        <translation>Bany</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Nick</translation>
     </message>
     <message>
         <source>Expiration</source>
-        <translation type="unfinished"></translation>
+        <translation>Wygaśnie</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Powód</translation>
     </message>
     <message>
         <source>Refresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Odśwież</translation>
     </message>
     <message>
         <source>Add</source>
-        <translation type="unfinished"></translation>
+        <translation>Dodaj</translation>
     </message>
     <message>
         <source>Remove</source>
-        <translation type="unfinished"></translation>
+        <translation>Usuń</translation>
     </message>
 </context>
 <context>
@@ -694,6 +782,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation>Ładowanie, proszę czekać.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation>Ta strona wymaga połączenia z internetem.</translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -740,39 +839,39 @@
     </message>
     <message>
         <source>Select an action to choose a custom key bind for this team</source>
-        <translation type="unfinished"></translation>
+        <translation>Wybierz czynność by przypisać klawisz dla tego zespołu</translation>
     </message>
     <message>
         <source>Use my default</source>
-        <translation type="unfinished"></translation>
+        <translation>Użyj domyślnych</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Zresetuj przypisania</translation>
     </message>
     <message>
         <source>Custom Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Własne ustawienia</translation>
     </message>
     <message>
         <source>Hat</source>
-        <translation type="unfinished">Grzybek</translation>
+        <translation>Czapka</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Nazwa</translation>
+        <translation>Nazwa</translation>
     </message>
     <message>
         <source>This hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Imię jeża</translation>
     </message>
     <message>
         <source>Randomize this hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Losuj imię</translation>
     </message>
     <message>
         <source>Random Team</source>
-        <translation type="unfinished">Losowa Drużyna</translation>
+        <translation>Losowa Drużyna</translation>
     </message>
 </context>
 <context>
@@ -841,6 +940,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; trząsł portkami i opuścił turę &lt;b&gt;%2&lt;/b&gt; razy.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation>Zagraj ponownie</translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation>Zapisz</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -896,23 +1003,23 @@
     </message>
     <message>
         <source>Play a game across a local area network</source>
-        <translation type="unfinished"></translation>
+        <translation>Zagraj poprzez sieć lokalną</translation>
     </message>
     <message>
         <source>Play a game on an official server</source>
-        <translation type="unfinished"></translation>
+        <translation>Zagraj na oficjalnym serwerze</translation>
     </message>
     <message>
         <source>Feedback</source>
-        <translation type="unfinished"></translation>
+        <translation>Twoja opinia</translation>
     </message>
     <message>
         <source>Play local network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Zagraj poprzez LAN</translation>
     </message>
     <message>
         <source>Play official network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Zagraj na oficjalnym serwerze</translation>
     </message>
 </context>
 <context>
@@ -923,7 +1030,7 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished">Zmień ustawienia gry</translation>
+        <translation>Zmień ustawienia gry</translation>
     </message>
 </context>
 <context>
@@ -934,19 +1041,30 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished">Zmień ustawienia gry</translation>
+        <translation>Zmień ustawienia gry</translation>
     </message>
     <message>
         <source>Start</source>
-        <translation type="unfinished">Start</translation>
+        <translation>Start</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktualizuj</translation>
     </message>
     <message>
         <source>Room controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustawienia pokoju</translation>
+    </message>
+</context>
+<context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation>Pokaż szczegóły</translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation>Wprowadź adres</translation>
     </message>
 </context>
 <context>
@@ -1033,91 +1151,91 @@
     </message>
     <message>
         <source>Select an action to change what key controls it</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Wybierz czynność by przypisać do niej klawisz</translation>
     </message>
     <message>
         <source>Reset to default</source>
-        <translation type="unfinished"></translation>
+        <translation>Przywróć domyślne</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Zresetuj klawisze</translation>
     </message>
     <message>
         <source>Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Gra</translation>
     </message>
     <message>
         <source>Graphics</source>
-        <translation type="unfinished"></translation>
+        <translation>Grafika</translation>
     </message>
     <message>
         <source>Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Dźwięk</translation>
     </message>
     <message>
         <source>Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Sterowanie</translation>
     </message>
     <message>
         <source>Video Recording</source>
-        <translation type="unfinished"></translation>
+        <translation>Nagrywanie wideo</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Sieć</translation>
     </message>
     <message>
         <source>Teams</source>
-        <translation type="unfinished">Drużyny</translation>
+        <translation>Drużyny</translation>
     </message>
     <message>
         <source>Schemes</source>
-        <translation type="unfinished"></translation>
+        <translation>Schematy</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished">Uzbrojenie</translation>
+        <translation>Uzbrojenie</translation>
     </message>
     <message>
         <source>Frontend</source>
-        <translation type="unfinished"></translation>
+        <translation>Interfejs</translation>
     </message>
     <message>
         <source>Custom colors</source>
-        <translation type="unfinished">Własne kolory</translation>
+        <translation>Własne kolory</translation>
     </message>
     <message>
         <source>Game audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Dźwięki w grze</translation>
     </message>
     <message>
         <source>Frontend audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Dźwięki interfejsu</translation>
     </message>
     <message>
         <source>Account</source>
-        <translation type="unfinished"></translation>
+        <translation>Konto</translation>
     </message>
     <message>
         <source>Proxy settings</source>
-        <translation type="unfinished">Ustawienia proxy</translation>
+        <translation>Ustawienia proxy</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished">Różne</translation>
+        <translation>Różne</translation>
     </message>
     <message>
         <source>Updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktualizacja</translation>
     </message>
     <message>
         <source>Check for updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Sprawdź aktualizacje</translation>
     </message>
     <message>
         <source>Video recording options</source>
-        <translation type="unfinished">Ustawienia nagrywania</translation>
+        <translation>Ustawienia nagrywania</translation>
     </message>
 </context>
 <context>
@@ -1175,27 +1293,27 @@
     </message>
     <message>
         <source>Search for a room:</source>
-        <translation type="unfinished"></translation>
+        <translation>Szukaj pokoju:</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Stwórz pokój</translation>
     </message>
     <message>
         <source>Join room</source>
-        <translation type="unfinished"></translation>
+        <translation>Dołącz do gry</translation>
     </message>
     <message>
         <source>Room state</source>
-        <translation type="unfinished"></translation>
+        <translation>Stan gry</translation>
     </message>
     <message>
         <source>Clear filters</source>
-        <translation type="unfinished"></translation>
+        <translation>Usuń filtry</translation>
     </message>
     <message>
         <source>Open server administration page</source>
-        <translation type="unfinished"></translation>
+        <translation>Otwórz ustawienia admina</translation>
     </message>
 </context>
 <context>
@@ -1318,7 +1436,7 @@
     </message>
     <message>
         <source>Add an indestructible border along the bottom</source>
-        <translation>&gt;Dodaje niezniszczalną ramkę u dołu mapy</translation>
+        <translation>Dodaje niezniszczalną ramkę u dołu mapy</translation>
     </message>
 </context>
 <context>
@@ -1419,12 +1537,12 @@
     <message>
         <source>Date: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Data: %1</translation>
     </message>
     <message>
         <source>Size: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Rozmiar: %1</translation>
     </message>
 </context>
 <context>
@@ -1475,15 +1593,15 @@
     </message>
     <message>
         <source>Restrict Unregistered Players Join</source>
-        <translation type="unfinished"></translation>
+        <translation>Blokuj niezarejestrowanych graczy</translation>
     </message>
     <message>
         <source>Show games in lobby</source>
-        <translation type="unfinished"></translation>
+        <translation>Pokaż nierozpoczęte gry</translation>
     </message>
     <message>
         <source>Show games in-progress</source>
-        <translation type="unfinished"></translation>
+        <translation>Pokaż trwające gry</translation>
     </message>
 </context>
 <context>
@@ -1534,31 +1652,31 @@
     </message>
     <message>
         <source>Visual effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Efekty wizualne</translation>
     </message>
     <message>
         <source>Sound</source>
-        <translation type="unfinished"></translation>
+        <translation>Dźwięk</translation>
     </message>
     <message>
         <source>In-game sound effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Efekty dźwiękowe w grze</translation>
     </message>
     <message>
         <source>Music</source>
-        <translation type="unfinished"></translation>
+        <translation>Muzyka</translation>
     </message>
     <message>
         <source>In-game music</source>
-        <translation type="unfinished"></translation>
+        <translation>Muzyka w grze</translation>
     </message>
     <message>
         <source>Frontend sound effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Efekty dźwiękowe w menu</translation>
     </message>
     <message>
         <source>Frontend music</source>
-        <translation type="unfinished"></translation>
+        <translation>Muzyka w menu</translation>
     </message>
 </context>
 <context>
@@ -1903,43 +2021,47 @@
     </message>
     <message>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
-        <translation type="unfinished"></translation>
+        <translation>Ta wersja deweloperska nie jest końcową wersją gry i może być niekompatybilna z innymi wersjami i niektóre funkcje mogą być niekompletne lub nie działać w ogóle!</translation>
     </message>
     <message>
         <source>Fullscreen</source>
-        <translation type="unfinished">Pełny ekran</translation>
+        <translation>Pełny ekran</translation>
     </message>
     <message>
         <source>Fullscreen Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Rozdzielczość</translation>
     </message>
     <message>
         <source>Windowed Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Rozmiar okna</translation>
     </message>
     <message>
         <source>Your Email</source>
-        <translation type="unfinished"></translation>
+        <translation>Twój e-mail</translation>
     </message>
     <message>
         <source>Summary</source>
-        <translation type="unfinished"></translation>
+        <translation>Krótki opis</translation>
     </message>
     <message>
         <source>Send system information</source>
-        <translation type="unfinished"></translation>
+        <translation>Wyśłij informacje o systemie</translation>
     </message>
     <message>
         <source>Type the security code:</source>
-        <translation type="unfinished"></translation>
+        <translation>Wpisz litery z obrazka:</translation>
     </message>
     <message>
         <source>Revision</source>
-        <translation type="unfinished"></translation>
+        <translation>Wersja</translation>
     </message>
     <message>
         <source>This program is distributed under the %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Ten program jest rozpowszechniany na licencji %1</translation>
+    </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation>Ustawienia zadziałają po restarcie gry.</translation>
     </message>
 </context>
 <context>
@@ -1965,7 +2087,7 @@
     </message>
     <message>
         <source>-r%1 (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>-r%1 (%2)</translation>
     </message>
 </context>
 <context>
@@ -2030,37 +2152,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Błąd</translation>
+        <translation type="obsolete">Błąd</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Nie można utworzyć katalogu %1</translation>
+        <translation type="obsolete">Nie można utworzyć katalogu %1</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Nie można otworzyć katalogu z danymi:
+        <translation type="obsolete">Nie można otworzyć katalogu z danymi:
 %1
 
 Sprawdź poprawność instalacji!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Błąd</translation>
+        <translation type="obsolete">TCP - Błąd</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Nie można uruchomić serwera: %1.</translation>
+        <translation type="obsolete">Nie można uruchomić serwera: %1.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Nie można uruchomić silnika na </translation>
+        <translation type="obsolete">Nie można uruchomić silnika na </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Kod błędu: %1</translation>
+        <translation type="obsolete">Kod błędu: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2182,44 +2304,41 @@
     </message>
     <message>
         <source>Hedgewars - Nick not registered</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Niezarejestrowany nick</translation>
     </message>
     <message>
         <source>System Information Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>Podgląd informacji o systemie</translation>
     </message>
     <message>
         <source>Failed to generate captcha</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie udało się wygenerować captchy</translation>
     </message>
     <message>
         <source>Failed to download captcha</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie udało się pobrać captchy</translation>
     </message>
     <message>
         <source>Please fill out all fields. Email is optional.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wypełnij wszystkie pola. E-mail nie jest wymagany.</translation>
     </message>
     <message>
         <source>Hedgewars - Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Ostrzeżenie</translation>
     </message>
     <message>
         <source>Hedgewars - Information</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Informacja</translation>
     </message>
     <message>
         <source>Not all players are ready</source>
-        <translation type="unfinished"></translation>
+        <translation>Nie wszyscy gracze są gotowi</translation>
     </message>
     <message>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
-        <translation type="unfinished"></translation>
+        <translation>Jesteś pewien, że chcesz rozpocząc grę?
+Nie wszyscy gracze są gotowi.</translation>
     </message>
 </context>
 <context>
@@ -2286,7 +2405,7 @@
     </message>
     <message>
         <source>Set default options</source>
-        <translation>Zapisz jako domyśłne ustawienia</translation>
+        <translation>Przywróć domyślne ustawienia</translation>
     </message>
     <message>
         <source>Open videos directory</source>
@@ -2306,38 +2425,58 @@
     </message>
     <message>
         <source>Restore default coding parameters</source>
-        <translation type="unfinished"></translation>
+        <translation>Przywróć domyślne ustawienia</translation>
     </message>
     <message>
         <source>Open the video directory in your system</source>
-        <translation type="unfinished"></translation>
+        <translation>Otwórz katalog z filmami</translation>
     </message>
     <message>
         <source>Play this video</source>
-        <translation type="unfinished"></translation>
+        <translation>Odtwórz wideo</translation>
     </message>
     <message>
         <source>Delete this video</source>
-        <translation type="unfinished"></translation>
+        <translation>Usuń wideo</translation>
     </message>
     <message>
         <source>Upload this video to your Youtube account</source>
-        <translation type="unfinished"></translation>
+        <translation>Wyślij to wideo na konto Youtube</translation>
+    </message>
+    <message>
+        <source>Reset</source>
+        <translation>Zresetuj</translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation>Ustaw domyślny port serwera Hedgewars</translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation>Zaproś swoich znajomych jednym kliknięciem!</translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation>Kliknij by skopiować unikalny link twojego serwera do schowka. Wyślij link swoim znajomym aby mogli dołączyć do gry.</translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation>Uruchom prywatny serwer</translation>
     </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
     <message>
         <source>Enter a name for your room.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wprowadź nazwę pokoju.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Anuluj</translation>
+        <translation>Anuluj</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Stwórz pokój</translation>
     </message>
 </context>
 <context>
@@ -2391,19 +2530,19 @@
     <name>SeedPrompt</name>
     <message>
         <source>The map seed is the basis for all random values generated by the game.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ziarno jest podstawą wszystkich losowych wartości tworzynych przez grę.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Anuluj</translation>
+        <translation>Anuluj</translation>
     </message>
     <message>
         <source>Set seed</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustaw ziarno</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Zamknij</translation>
     </message>
 </context>
 <context>
@@ -2434,25 +2573,45 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation>Nie można uruchomić serwera na %1.</translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation>Nie można uruchomić silnika na %1
+Kod błędu: %2</translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation>Do rozpoczęcia gry potrzeba dwóch druzyn!</translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
-        <translation type="unfinished"></translation>
+        <translation>Drużyna %1</translation>
     </message>
 </context>
 <context>
     <name>ThemePrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Anuluj</translation>
+        <translation>Anuluj</translation>
     </message>
     <message>
         <source>Search for a theme:</source>
-        <translation type="unfinished"></translation>
+        <translation>Szukaj motywu:</translation>
     </message>
     <message>
         <source>Use selected theme</source>
-        <translation type="unfinished"></translation>
+        <translation>Użyj wybranego motywu</translation>
     </message>
 </context>
 <context>
@@ -2623,26 +2782,26 @@
     </message>
     <message>
         <source>hedgehog info</source>
-        <translation type="unfinished"></translation>
+        <translation>informacje o jeżu</translation>
     </message>
 </context>
 <context>
     <name>binds (categories)</name>
     <message>
         <source>Movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Ruch</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished">Uzbrojenie</translation>
+        <translation>Uzbrojenie</translation>
     </message>
     <message>
         <source>Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Kamera</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished">Różne</translation>
+        <translation>Różne</translation>
     </message>
 </context>
 <context>
@@ -2713,7 +2872,7 @@
     </message>
     <message>
         <source>Hedgehog movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Poruszanie się jeżem</translation>
     </message>
 </context>
 <context>
@@ -3035,119 +3194,4 @@
         <translation>DPad</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Não foi possível criar o diretório %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -223,6 +254,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -322,6 +365,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -442,10 +489,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Carregar mapa</translation>
     </message>
@@ -461,6 +504,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -505,7 +552,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 entrou</translation>
+        <translation type="obsolete">%1 *** %2 entrou</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -534,6 +581,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -684,6 +746,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -825,6 +898,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; estava assustado e passou o turno &lt;b&gt;%2&lt;/b&gt; vezes.&lt;/p&gt;.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Salvar</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -934,6 +1015,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1917,6 +2009,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2005,35 +2101,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Não foi possível criar o diretório %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Não foi possível criar o diretório %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Não foi possível iniciar o servidor: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Não foi possível iniciar o servidor: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2181,10 +2254,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2296,6 +2365,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2407,6 +2496,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3013,119 +3121,4 @@
         <translation>DPad</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -5,14 +5,14 @@
     <name>About</name>
     <message>
         <source>Unknown Compiler</source>
-        <translation type="unfinished"></translation>
+        <translation>Compilador Desconhecido</translation>
     </message>
 </context>
 <context>
     <name>AbstractPage</name>
     <message>
         <source>Go back</source>
-        <translation>Retrodecer</translation>
+        <translation>Retroceder</translation>
     </message>
 </context>
 <context>
@@ -23,80 +23,96 @@
     </message>
     <message>
         <source>copy of</source>
-        <translation>copia de</translation>
+        <translation>cópia de</translation>
     </message>
 </context>
 <context>
     <name>BanDialog</name>
     <message>
         <source>IP</source>
-        <translation type="unfinished">IP</translation>
+        <translation>IP</translation>
     </message>
     <message>
         <source>Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>Utilizador</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Utilizador</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Motivo</translation>
     </message>
     <message>
         <source>Duration</source>
-        <translation type="unfinished"></translation>
+        <translation>Duração</translation>
     </message>
     <message>
         <source>Ok</source>
-        <translation type="unfinished"></translation>
+        <translation>Ok</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Cancelar</translation>
+        <translation>Cancelar</translation>
     </message>
     <message>
         <source>you know why</source>
-        <translation type="unfinished"></translation>
+        <translation>tu sabes porquê</translation>
     </message>
     <message>
         <source>Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Aviso</translation>
     </message>
     <message>
         <source>Please, specify %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Por favor, especifica %1</translation>
     </message>
     <message>
         <source>nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>utilizador</translation>
     </message>
     <message>
         <source>permanent</source>
-        <translation type="unfinished"></translation>
+        <translation>permanente</translation>
     </message>
 </context>
 <context>
     <name>DataManager</name>
     <message>
         <source>Use Default</source>
-        <translation type="unfinished"></translation>
+        <translation>Utilizar configuração por omissão</translation>
     </message>
 </context>
 <context>
     <name>FeedbackDialog</name>
     <message>
         <source>View</source>
-        <translation type="unfinished"></translation>
+        <translation>Ver</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Cancelar</translation>
+        <translation>Cancelar</translation>
     </message>
     <message>
         <source>Send Feedback</source>
-        <translation type="unfinished"></translation>
+        <translation>Enviar Feedback</translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation>Estamos sempre abertos a novas sugestões, ideias, ou submissões de bugs encontrados.</translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation>Envia-nos feedback!</translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation>Se encontraste um bug, podes verificar se já foi submetido aqui: </translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation>O teu e-mail é opcional, mas necessário se quiseres que te contactemos de volta.</translation>
     </message>
 </context>
 <context>
@@ -129,54 +145,72 @@
     </message>
     <message>
         <source>Game scheme will auto-select a weapon</source>
-        <translation type="unfinished"></translation>
+        <translation>O esquema de jogo irá auto-selecionar uma arma</translation>
     </message>
     <message>
         <source>Map</source>
-        <translation type="unfinished">Mapa</translation>
+        <translation>Mapa</translation>
     </message>
     <message>
         <source>Game options</source>
-        <translation type="unfinished"></translation>
+        <translation>Opções de jogo</translation>
     </message>
 </context>
 <context>
     <name>HWApplication</name>
     <message numerus="yes">
         <source>%1 minutes</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 minuto</numerusform>
+            <numerusform>%1 minutos</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hour</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 hora</numerusform>
+            <numerusform>%1 horas</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hours</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 hora</numerusform>
+            <numerusform>%1 horas</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 day</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 dia</numerusform>
+            <numerusform>%1 dias</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 days</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 dia</numerusform>
+            <numerusform>%1 dias</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation>Esquema &apos;%1&apos; não suportado</translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation>Não foi possível criar o diretório %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation>Erro ao abrir o diretório:
+%1
+
+Por favor verifica a tua instalação!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -213,7 +247,7 @@
     </message>
     <message>
         <source>Couldn&apos;t read %1</source>
-        <translation>Não foi possivel carregar %1</translation>
+        <translation>Não foi possível carregar %1</translation>
     </message>
     <message>
         <source>StyleSheet discarded</source>
@@ -227,6 +261,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation>Não foi possível gravar o StyleSheet em %1</translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation>%1 entrou</translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation>%1 saíu</translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation>%1 saíu (%2)</translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -271,16 +317,16 @@
     <message>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
-        <translation>Alguem já está a utilizar o teu nome de utilizador %1 no servidor.
+        <translation>Alguém já está a utilizar o teu nome de utilizador %1 no servidor.
 Por favor escolhe outro nome de utilizador:</translation>
     </message>
     <message>
         <source>%1&apos;s Team</source>
-        <translation type="unfinished"></translation>
+        <translation>Equipa de %1</translation>
     </message>
     <message>
         <source>Hedgewars - Nick registered</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Utilizador registado</translation>
     </message>
     <message>
         <source>This nick is registered, and you haven&apos;t specified a password.
@@ -288,44 +334,57 @@
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
 
 Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Este utilizador está registado, e não foi especificada uma palavra-passe.
+		
+Se este utilizador não te pertence, acede a www.hedgewars.org e regista o teu próprio utilizador.
+
+Palavra-passe:</translation>
     </message>
     <message>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
-        <translation type="unfinished"></translation>
+        <translation>O teu nome de utilizador não está registado.
+De forma a prevenir que alguém o utilize,
+por favor regista-o em www.hedgewars.org</translation>
     </message>
     <message>
         <source>
 
 Your password wasn&apos;t saved either.</source>
-        <translation type="unfinished"></translation>
+        <translation>
+
+A tua palavra-passe também não foi gravada.</translation>
     </message>
     <message>
         <source>Hedgewars - Empty nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Utilizador vazio</translation>
     </message>
     <message>
         <source>Hedgewars - Wrong password</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Palavra-passe incorreta</translation>
     </message>
     <message>
         <source>You entered a wrong password.</source>
-        <translation type="unfinished"></translation>
+        <translation>Introduziste a palavra-passe errada.</translation>
     </message>
     <message>
         <source>Try Again</source>
-        <translation type="unfinished"></translation>
+        <translation>Tenta Novamente</translation>
     </message>
     <message>
         <source>Hedgewars - Connection error</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Erro na ligação</translation>
     </message>
     <message>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tentás-te voltar ao servidor num espaço de tempo demasiado curto.
+Por favor, aguarda alguns segundos e tenta novamente.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation>Esta página requer ligação à internet</translation>
     </message>
 </context>
 <context>
@@ -367,11 +426,11 @@
     </message>
     <message>
         <source>Small tunnels</source>
-        <translation>Túneis pequenos</translation>
+        <translation>Túneis estreitos</translation>
     </message>
     <message>
         <source>Medium tunnels</source>
-        <translation>Túneis medios</translation>
+        <translation>Túneis médios</translation>
     </message>
     <message>
         <source>Seed</source>
@@ -379,91 +438,95 @@
     </message>
     <message>
         <source>Map type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Mapa:</translation>
     </message>
     <message>
         <source>Image map</source>
-        <translation type="unfinished"></translation>
+        <translation>Imagem</translation>
     </message>
     <message>
         <source>Mission map</source>
-        <translation type="unfinished"></translation>
+        <translation>Missão</translation>
     </message>
     <message>
         <source>Hand-drawn</source>
-        <translation type="unfinished">Desenhado à mão</translation>
+        <translation>Desenhado à mão</translation>
     </message>
     <message>
         <source>Randomly generated</source>
-        <translation type="unfinished"></translation>
+        <translation>Aleatoriamente gerado</translation>
     </message>
     <message>
         <source>Random maze</source>
-        <translation type="unfinished"></translation>
+        <translation>Labirinto aleatório</translation>
     </message>
     <message>
         <source>Random</source>
-        <translation type="unfinished">Aleatório</translation>
+        <translation>Aleatório</translation>
     </message>
     <message>
         <source>Map preview:</source>
-        <translation type="unfinished"></translation>
+        <translation>Pré-visualização do mapa:</translation>
     </message>
     <message>
         <source>Load map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Carregar mapa desenhado</translation>
     </message>
     <message>
         <source>Edit map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Editar mapa desenhado</translation>
+    </message>
+    <message>
+        <source>Large tunnels</source>
+        <translation>Túneis largos</translation>
     </message>
     <message>
         <source>Small islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Ilhas pequenas</translation>
     </message>
     <message>
         <source>Medium islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Ilhas médias</translation>
     </message>
     <message>
         <source>Large islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Ilhas grandes</translation>
     </message>
     <message>
         <source>Map size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Tamanho do mapa:</translation>
     </message>
     <message>
         <source>Maze style:</source>
-        <translation type="unfinished"></translation>
+        <translation>Estilo de labirinto:</translation>
     </message>
     <message>
         <source>Mission:</source>
-        <translation type="unfinished"></translation>
+        <translation>Missão:</translation>
     </message>
     <message>
         <source>Map:</source>
-        <translation type="unfinished"></translation>
+        <translation>Mapa:</translation>
     </message>
     <message>
         <source>Theme: </source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Tema: </translation>
     </message>
     <message>
         <source>Load drawn map</source>
-        <translation type="unfinished">Carregar mapa desenhado</translation>
+        <translation>Carregar mapa desenhado</translation>
     </message>
     <message>
         <source>Drawn Maps</source>
-        <translation type="unfinished">Mapas Desenhados</translation>
+        <translation>Mapas Desenhados</translation>
     </message>
     <message>
         <source>All files</source>
-        <translation type="unfinished">Todos os ficheiros</translation>
-    </message>
-    <message>
-        <source>Large tunnels</source>
-        <translation type="unfinished"></translation>
+        <translation>Todos os ficheiros</translation>
+    </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation>Tema: %1</translation>
     </message>
 </context>
 <context>
@@ -501,7 +564,7 @@
     </message>
     <message>
         <source>You got kicked</source>
-        <translation>Foi expulso</translation>
+        <translation>Foste expulso</translation>
     </message>
     <message>
         <source>%1 *** %2 has joined the room</source>
@@ -509,7 +572,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 juntou-se</translation>
+        <translation type="obsolete">%1 *** %2 entrou</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -536,7 +599,25 @@
     <name>HWPasswordDialog</name>
     <message>
         <source>Login</source>
-        <translation type="unfinished"></translation>
+        <translation>Login</translation>
+    </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation>Por favor faz login para aceder ao servidor.
+		
+Se ainda não tens uma conta em www.hedgewars.org,
+simplesmente insere o teu nome de utilizador.</translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation>Utilizador:</translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation>Password:</translation>
     </message>
 </context>
 <context>
@@ -554,36 +635,36 @@
     <name>HatButton</name>
     <message>
         <source>Change hat (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Trocar chapéu (%1)</translation>
     </message>
 </context>
 <context>
     <name>HatPrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Cancelar</translation>
+        <translation>Cancelar</translation>
     </message>
     <message>
         <source>Use selected hat</source>
-        <translation type="unfinished"></translation>
+        <translation>Utiliza o chapéu selecionado</translation>
     </message>
     <message>
         <source>Search for a hat:</source>
-        <translation type="unfinished"></translation>
+        <translation>Procurar:</translation>
     </message>
 </context>
 <context>
     <name>KB</name>
     <message>
         <source>SDL_ttf returned error while rendering text, most propably it is related to the bug in freetype2. It&apos;s recommended to update your freetype lib.</source>
-        <translation>SDL_ttf retornou um erro ao renderizar o texto, muito provavelmente está relacionado com o bug no freetype2. É recomendado actualizar a sua lib freetype.</translation>
+        <translation>SDL_ttf retornou um erro ao renderizar o texto, muito provavelmente está relacionado com o bug no freetype2. É recomendado atualizar a sua lib freetype.</translation>
     </message>
 </context>
 <context>
     <name>KeyBinder</name>
     <message>
         <source>Category</source>
-        <translation type="unfinished"></translation>
+        <translation>Categoria</translation>
     </message>
 </context>
 <context>
@@ -604,18 +685,18 @@
     </message>
     <message>
         <source>Audio: </source>
-        <translation>Audio: </translation>
+        <translation>Áudio: </translation>
     </message>
     <message>
         <source>unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>desconhecido</translation>
     </message>
 </context>
 <context>
     <name>MapModel</name>
     <message>
         <source>No description available.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nenhuma descrição disponível.</translation>
     </message>
 </context>
 <context>
@@ -650,35 +731,35 @@
     </message>
     <message>
         <source>General</source>
-        <translation type="unfinished">Geral</translation>
+        <translation>Geral</translation>
     </message>
     <message>
         <source>Bans</source>
-        <translation type="unfinished"></translation>
+        <translation>Expulsões</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Utilizador</translation>
     </message>
     <message>
         <source>Expiration</source>
-        <translation type="unfinished"></translation>
+        <translation>Expiração</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Motivo</translation>
     </message>
     <message>
         <source>Refresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Atualizar</translation>
     </message>
     <message>
         <source>Add</source>
-        <translation type="unfinished"></translation>
+        <translation>Adicionar</translation>
     </message>
     <message>
         <source>Remove</source>
-        <translation type="unfinished"></translation>
+        <translation>Remover</translation>
     </message>
 </context>
 <context>
@@ -689,6 +770,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation>A carregar, aguarda por favor.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation>Esta página requer ligação à internet.</translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -735,39 +827,39 @@
     </message>
     <message>
         <source>Select an action to choose a custom key bind for this team</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleciona uma ação para personalizar uma tecla com esta equipa</translation>
     </message>
     <message>
         <source>Use my default</source>
-        <translation type="unfinished"></translation>
+        <translation>Configuração por omissão</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Repor todos os valores</translation>
     </message>
     <message>
         <source>Custom Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Controlos Personalizados</translation>
     </message>
     <message>
         <source>Hat</source>
-        <translation type="unfinished">Chapéu</translation>
+        <translation>Chapéu</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Nome</translation>
+        <translation>Nome</translation>
     </message>
     <message>
         <source>This hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Nome deste ouriço</translation>
     </message>
     <message>
         <source>Randomize this hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Escolhe um nome para este ouriço aleatoriamente</translation>
     </message>
     <message>
         <source>Random Team</source>
-        <translation type="unfinished">Equipa aleatória</translation>
+        <translation>Gerar Equipa Aleatória</translation>
     </message>
 </context>
 <context>
@@ -830,6 +922,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; estava tão amedrontado que passou &lt;b&gt;%2&lt;/b&gt; turnos.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation>Jogar novamente</translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation>Gravar</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -861,7 +961,7 @@
     </message>
     <message>
         <source>Read about who is behind the Hedgewars Project</source>
-        <translation>Lê sobre quem está por trás do Projecto Hedgewars</translation>
+        <translation>Descobre quem está por trás do Projecto Hedgewars</translation>
     </message>
     <message>
         <source>Leave a feedback here reporting issues, suggesting features or just saying how you like Hedgewars</source>
@@ -881,27 +981,27 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation>Editar as preferencias de jogo</translation>
+        <translation>Editar as preferências de jogo</translation>
     </message>
     <message>
         <source>Play a game across a local area network</source>
-        <translation type="unfinished"></translation>
+        <translation>Joga na rede local</translation>
     </message>
     <message>
         <source>Play a game on an official server</source>
-        <translation type="unfinished"></translation>
+        <translation>Joga num servidor oficial</translation>
     </message>
     <message>
         <source>Feedback</source>
-        <translation type="unfinished"></translation>
+        <translation>Feedback</translation>
     </message>
     <message>
         <source>Play local network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Jogar na rede local</translation>
     </message>
     <message>
         <source>Play official network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Jogar no servidor oficial</translation>
     </message>
 </context>
 <context>
@@ -912,30 +1012,37 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished">Editar as preferencias de jogo</translation>
+        <translation>Editar preferências de jogo</translation>
     </message>
 </context>
 <context>
     <name>PageNetGame</name>
     <message>
-        <source>Control</source>
-        <translation type="obsolete">Controlo</translation>
-    </message>
-    <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished">Editar as preferencias de jogo</translation>
+        <translation>Editar preferências de jogo</translation>
     </message>
     <message>
         <source>Start</source>
-        <translation type="unfinished">Iniciar</translation>
+        <translation>Iniciar</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished">Actualizar</translation>
+        <translation>Atualizar</translation>
     </message>
     <message>
         <source>Room controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Restrições</translation>
+    </message>
+</context>
+<context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation>Clica aqui para detalhes</translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation>Insere aqui o teu endereço</translation>
     </message>
 </context>
 <context>
@@ -986,7 +1093,7 @@
     </message>
     <message>
         <source>Reset to default colors</source>
-        <translation>Repor cores por omisão</translation>
+        <translation>Repor cores por omissão</translation>
     </message>
     <message>
         <source>Proxy host</source>
@@ -1022,91 +1129,91 @@
     </message>
     <message>
         <source>Select an action to change what key controls it</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleciona uma ação para alterar a tecla que a controla</translation>
     </message>
     <message>
         <source>Reset to default</source>
-        <translation type="unfinished"></translation>
+        <translation>Repor valor por omissão</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Repor todos os valores</translation>
     </message>
     <message>
         <source>Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Jogo</translation>
     </message>
     <message>
         <source>Graphics</source>
-        <translation type="unfinished"></translation>
+        <translation>Gráficos</translation>
     </message>
     <message>
         <source>Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Áudio</translation>
     </message>
     <message>
         <source>Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Controlos</translation>
     </message>
     <message>
         <source>Video Recording</source>
-        <translation type="unfinished"></translation>
+        <translation>Vídeo Gravação</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Rede</translation>
     </message>
     <message>
         <source>Teams</source>
-        <translation type="unfinished">Equipas</translation>
+        <translation>Equipas</translation>
     </message>
     <message>
         <source>Schemes</source>
-        <translation type="unfinished"></translation>
+        <translation>Esquemas</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished"></translation>
+        <translation>Armamento</translation>
     </message>
     <message>
         <source>Frontend</source>
-        <translation type="unfinished"></translation>
+        <translation>Frontend</translation>
     </message>
     <message>
         <source>Custom colors</source>
-        <translation type="unfinished">Cores personalizadas</translation>
+        <translation>Cores personalizadas</translation>
     </message>
     <message>
         <source>Game audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Áudio de jogo</translation>
     </message>
     <message>
         <source>Frontend audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Áudio do frontend</translation>
     </message>
     <message>
         <source>Account</source>
-        <translation type="unfinished"></translation>
+        <translation>Conta</translation>
     </message>
     <message>
         <source>Proxy settings</source>
-        <translation type="unfinished">Definições do Proxy</translation>
+        <translation>Definições do Proxy</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished">Outras opções</translation>
+        <translation>Outras opções</translation>
     </message>
     <message>
         <source>Updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Atualizações</translation>
     </message>
     <message>
         <source>Check for updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Procurar atualizações</translation>
     </message>
     <message>
         <source>Video recording options</source>
-        <translation type="unfinished">Opções de criação de vídeo</translation>
+        <translation>Opções de criação de vídeo</translation>
     </message>
 </context>
 <context>
@@ -1123,22 +1230,10 @@
 <context>
     <name>PageRoomsList</name>
     <message>
-        <source>Create</source>
-        <translation type="obsolete">Criar</translation>
-    </message>
-    <message>
-        <source>Join</source>
-        <translation type="obsolete">Entrar</translation>
-    </message>
-    <message>
         <source>Admin features</source>
         <translation>Recursos de administrador</translation>
     </message>
     <message>
-        <source>Room Name:</source>
-        <translation type="obsolete">Nome da Sala:</translation>
-    </message>
-    <message>
         <source>Rules:</source>
         <translation>Regras:</translation>
     </message>
@@ -1146,14 +1241,6 @@
         <source>Weapons:</source>
         <translation>Armamento:</translation>
     </message>
-    <message>
-        <source>Search:</source>
-        <translation type="obsolete">Pesquisa:</translation>
-    </message>
-    <message>
-        <source>Clear</source>
-        <translation type="obsolete">Limpar</translation>
-    </message>
     <message numerus="yes">
         <source>%1 players online</source>
         <translation>
@@ -1163,27 +1250,27 @@
     </message>
     <message>
         <source>Search for a room:</source>
-        <translation type="unfinished"></translation>
+        <translation>Procurar sala:</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Criar sala</translation>
     </message>
     <message>
         <source>Join room</source>
-        <translation type="unfinished"></translation>
+        <translation>Entrar no jogo</translation>
     </message>
     <message>
         <source>Room state</source>
-        <translation type="unfinished"></translation>
+        <translation>Estado da sala</translation>
     </message>
     <message>
         <source>Clear filters</source>
-        <translation type="unfinished"></translation>
+        <translation>Limpar filtros</translation>
     </message>
     <message>
         <source>Open server administration page</source>
-        <translation type="unfinished"></translation>
+        <translation>Abrir menu de administração do servidor</translation>
     </message>
 </context>
 <context>
@@ -1222,7 +1309,7 @@
     </message>
     <message>
         <source>Your hogs are unable to move, put your artillery skills to the test</source>
-        <translation>Os teus ouriços serão impossibilidados de se mover, testa as tuas capacidades no modo artilharia</translation>
+        <translation>Os teus ouriços serão impossibilitados de se mover, testa as tuas capacidades no modo artilharia</translation>
     </message>
     <message>
         <source>Random</source>
@@ -1254,15 +1341,15 @@
     </message>
     <message>
         <source>Ammo is shared between all teams that share a colour.</source>
-        <translation>As armas são partilhadas entre todas as equipas da mesma cor.</translation>
+        <translation>O armamento é partilhado entre todas as equipas da mesma cor.</translation>
     </message>
     <message>
         <source>Disable girders when generating random maps.</source>
-        <translation>Desactivar vigas em mapas gerados aleatoriamente.</translation>
+        <translation>Desativar vigas em mapas gerados aleatoriamente.</translation>
     </message>
     <message>
         <source>Disable land objects when generating random maps.</source>
-        <translation>Não adicionar objectos no terreno ao gerar mapas aleatórios.</translation>
+        <translation>Não adicionar objetos no terreno ao gerar mapas aleatórios.</translation>
     </message>
     <message>
         <source>AI respawns on death.</source>
@@ -1290,7 +1377,7 @@
     </message>
     <message>
         <source>Wind will affect almost everything.</source>
-        <translation>O vento afecta praticamente tudo.</translation>
+        <translation>O vento afeta praticamente tudo.</translation>
     </message>
     <message>
         <source>Copy</source>
@@ -1363,7 +1450,7 @@
     </message>
     <message>
         <source>Select a mission!</source>
-        <translation>Selecciona uma missão!</translation>
+        <translation>Seleciona uma missão!</translation>
     </message>
     <message>
         <source>Pick the mission or training to play</source>
@@ -1406,12 +1493,14 @@
     <message>
         <source>Date: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Data: %1
+</translation>
     </message>
     <message>
         <source>Size: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Tamanho: %1
+</translation>
     </message>
 </context>
 <context>
@@ -1426,11 +1515,11 @@
     </message>
     <message>
         <source>Restrict Joins</source>
-        <translation>Restringir entradas</translation>
+        <translation>Impedir a entrada de novos utilizadores</translation>
     </message>
     <message>
         <source>Restrict Team Additions</source>
-        <translation>Restringir adição de equipas</translation>
+        <translation>Trancar a adição de equipas</translation>
     </message>
     <message>
         <source>Ban</source>
@@ -1457,27 +1546,23 @@
         <translation>Remover amigo</translation>
     </message>
     <message>
-        <source>Update</source>
-        <translation type="obsolete">Actualizar</translation>
-    </message>
-    <message>
         <source>Restrict Unregistered Players Join</source>
-        <translation type="unfinished"></translation>
+        <translation>Impedir a entrada de utilizadores não registados</translation>
     </message>
     <message>
         <source>Show games in lobby</source>
-        <translation type="unfinished"></translation>
+        <translation>Mostrar jogos a aguardar jogadores</translation>
     </message>
     <message>
         <source>Show games in-progress</source>
-        <translation type="unfinished"></translation>
+        <translation>Mostrar jogos em progresso</translation>
     </message>
 </context>
 <context>
     <name>QCheckBox</name>
     <message>
         <source>Check for updates at startup</source>
-        <translation>Verificar por actualizações no arranque</translation>
+        <translation>Verificar por atualizações no arranque</translation>
     </message>
     <message>
         <source>Fullscreen</source>
@@ -1497,7 +1582,7 @@
     </message>
     <message>
         <source>Show ammo menu tooltips</source>
-        <translation>Mostrar a ajuda no menu das armas</translation>
+        <translation>Mostrar a ajuda no menu de armamento</translation>
     </message>
     <message>
         <source>Save password</source>
@@ -1513,7 +1598,7 @@
     </message>
     <message>
         <source>Record audio</source>
-        <translation>Gravar audio</translation>
+        <translation>Gravar áudio</translation>
     </message>
     <message>
         <source>Use game resolution</source>
@@ -1521,31 +1606,31 @@
     </message>
     <message>
         <source>Visual effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Efeitos visuais</translation>
     </message>
     <message>
         <source>Sound</source>
-        <translation type="unfinished"></translation>
+        <translation>Som</translation>
     </message>
     <message>
         <source>In-game sound effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Efeitos sonoros durante o jogo</translation>
     </message>
     <message>
         <source>Music</source>
-        <translation type="unfinished"></translation>
+        <translation>Musica</translation>
     </message>
     <message>
         <source>In-game music</source>
-        <translation type="unfinished"></translation>
+        <translation>Musica durante o jogo</translation>
     </message>
     <message>
         <source>Frontend sound effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Efeitos sonoros no frontend</translation>
     </message>
     <message>
         <source>Frontend music</source>
-        <translation type="unfinished"></translation>
+        <translation>Musica no frontend</translation>
     </message>
 </context>
 <context>
@@ -1571,16 +1656,8 @@
         <translation>Qualquer</translation>
     </message>
     <message>
-        <source>In lobby</source>
-        <translation type="obsolete">No lobby</translation>
-    </message>
-    <message>
-        <source>In progress</source>
-        <translation type="obsolete">Em progresso</translation>
-    </message>
-    <message>
         <source>Disabled</source>
-        <translation>Desactivado</translation>
+        <translation>Desativado</translation>
     </message>
     <message>
         <source>Red/Cyan</source>
@@ -1689,12 +1766,8 @@
         <translation>Minas</translation>
     </message>
     <message>
-        <source>Version</source>
-        <translation type="obsolete">Versão</translation>
-    </message>
-    <message>
         <source>Weapons</source>
-        <translation>Armas</translation>
+        <translation>Armamento</translation>
     </message>
     <message>
         <source>Host:</source>
@@ -1798,7 +1871,7 @@
     </message>
     <message>
         <source>Sudden Death Water Rise</source>
-        <translation>Súbida da Água durante Morte Súbita</translation>
+        <translation>Subida da Água durante Morte Súbita</translation>
     </message>
     <message>
         <source>Sudden Death Health Decrease</source>
@@ -1825,14 +1898,10 @@
         <translation>% Tempo Para Retirar</translation>
     </message>
     <message>
-        <source>This program is distributed under the GNU General Public License v2</source>
-        <translation type="obsolete">Esta aplicação é distribuída sob a GNU General Public License v2</translation>
-    </message>
-    <message>
         <source>There are videos that are currently being processed.
 Exiting now will abort them.
 Do you really want to quit?</source>
-        <translation>Existem vídeos a serem currentemente processados.
+        <translation>Existem vídeos a serem correntemente processados.
 Sair irá cancela-los.
 Deseja mesmo sair?</translation>
     </message>
@@ -1874,7 +1943,7 @@
     </message>
     <message>
         <source>Audio codec</source>
-        <translation>Codec de Audio</translation>
+        <translation>Codec de Áudio</translation>
     </message>
     <message>
         <source>Video codec</source>
@@ -1890,43 +1959,47 @@
     </message>
     <message>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
-        <translation type="unfinished"></translation>
+        <translation>Esta versão de desenvolvimento demonstra um &quot;trabalho em progresso&quot; o qual pode não ser compatível com outras versões do jogo, enquanto algumas funcionalidades podem estar inutilizáveis ou incompletas!</translation>
     </message>
     <message>
         <source>Fullscreen</source>
-        <translation type="unfinished">Ecrã completo</translation>
+        <translation>Ecrã completo</translation>
     </message>
     <message>
         <source>Fullscreen Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Resolução Ecrã Completo</translation>
     </message>
     <message>
         <source>Windowed Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Resolução da Janela</translation>
     </message>
     <message>
         <source>Your Email</source>
-        <translation type="unfinished"></translation>
+        <translation>E-mail</translation>
     </message>
     <message>
         <source>Summary</source>
-        <translation type="unfinished"></translation>
+        <translation>Sumário</translation>
     </message>
     <message>
         <source>Send system information</source>
-        <translation type="unfinished"></translation>
+        <translation>Enviar informações de sistema</translation>
     </message>
     <message>
         <source>Type the security code:</source>
-        <translation type="unfinished"></translation>
+        <translation>Digita o código de segurança:</translation>
     </message>
     <message>
         <source>Revision</source>
-        <translation type="unfinished"></translation>
+        <translation>Revisão</translation>
     </message>
     <message>
         <source>This program is distributed under the %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Este programa é distribuído sob a %1</translation>
+    </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation>Esta opção entrará em efeito quando o jogo for reiniciado.</translation>
     </message>
 </context>
 <context>
@@ -1952,7 +2025,7 @@
     </message>
     <message>
         <source>-r%1 (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>-r%1 (%2)</translation>
     </message>
 </context>
 <context>
@@ -1967,7 +2040,7 @@
     </message>
     <message>
         <source>File association failed.</source>
-        <translation>Não foi possivel associar os ficheiros.</translation>
+        <translation>Não foi possível associar os ficheiros.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -1995,7 +2068,7 @@
     </message>
     <message>
         <source>Cannot delete default scheme &apos;%1&apos;!</source>
-        <translation>Não é possivel apagar o esquema por omisão &apos;%1&apos;!</translation>
+        <translation>Não é possível apagar o esquema por omissão &apos;%1&apos;!</translation>
     </message>
     <message>
         <source>Please select a record from the list</source>
@@ -2019,37 +2092,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Main - Erro</translation>
+        <translation type="obsolete">Main - Erro</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Não foi possível criar o diretório %1</translation>
+        <translation type="obsolete">Não foi possível criar o diretório %1</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Erro ao abrir o diretório:
+        <translation type="obsolete">Erro ao abrir o diretório:
 %1
 
 Por favor verifica a tua instalação!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Erro</translation>
+        <translation type="obsolete">TCP - Erro</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Não foi possível iniciar o servidor: %1.</translation>
+        <translation type="obsolete">Não foi possível iniciar o servidor: %1.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Não foi possivel lançar o motor de jogo em </translation>
+        <translation type="obsolete">Não foi possível lançar o motor de jogo em </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Código de erro: %1</translation>
+        <translation type="obsolete">Código de erro: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2073,15 +2146,15 @@
     </message>
     <message>
         <source>Please select record from the list</source>
-        <translation>Por favor selecciona uma gravação da lista</translation>
+        <translation>Por favor seleciona uma gravação da lista</translation>
     </message>
     <message>
         <source>Cannot rename to </source>
-        <translation>Não é possivel renomear para </translation>
+        <translation>Não é possível renomear para </translation>
     </message>
     <message>
         <source>Cannot delete file </source>
-        <translation>Não é possivel apagar o ficheiro </translation>
+        <translation>Não é possível apagar o ficheiro </translation>
     </message>
     <message>
         <source>Room Name - Error</source>
@@ -2089,7 +2162,7 @@
     </message>
     <message>
         <source>Please select room from the list</source>
-        <translation>Por favor selecciona uma sala da lista</translation>
+        <translation>Por favor seleciona uma sala da lista</translation>
     </message>
     <message>
         <source>Room Name - Are you sure?</source>
@@ -2138,31 +2211,31 @@
     </message>
     <message>
         <source>Cannot open &apos;%1&apos; for writing</source>
-        <translation>Impossivel abrir &apos;%1&apos; para escrita</translation>
+        <translation>Impossível abrir &apos;%1&apos; para escrita</translation>
     </message>
     <message>
         <source>Cannot open &apos;%1&apos; for reading</source>
-        <translation>Impossivel abrir &apos;%1&apos; para leitura</translation>
+        <translation>Impossível abrir &apos;%1&apos; para leitura</translation>
     </message>
     <message>
         <source>Cannot use the ammo &apos;%1&apos;!</source>
-        <translation>Impossivel utilizar as munições &apos;%1&apos;!</translation>
+        <translation>Impossível utilizar as munições &apos;%1&apos;!</translation>
     </message>
     <message>
         <source>Weapons - Warning</source>
-        <translation>Armas - Aviso</translation>
+        <translation>Armamento - Aviso</translation>
     </message>
     <message>
         <source>Cannot overwrite default weapon set &apos;%1&apos;!</source>
-        <translation>Não é possivel substituir o esquema de armas &apos;%1&apos;!</translation>
+        <translation>Não é possível substituir o esquema de armas &apos;%1&apos;!</translation>
     </message>
     <message>
         <source>Cannot delete default weapon set &apos;%1&apos;!</source>
-        <translation>Não é possivel apagar o esquema de armas por omisão &apos;%1&apos;!</translation>
+        <translation>Não é possível apagar o esquema de armas por omissão &apos;%1&apos;!</translation>
     </message>
     <message>
         <source>Weapons - Are you sure?</source>
-        <translation>Armas - Tens a certeza?</translation>
+        <translation>Armamento - Tens a certeza?</translation>
     </message>
     <message>
         <source>Do you really want to delete the weapon set &apos;%1&apos;?</source>
@@ -2170,44 +2243,45 @@
     </message>
     <message>
         <source>Hedgewars - Nick not registered</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Utilizador não registado</translation>
     </message>
     <message>
         <source>System Information Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>Pré-visualizar Informação do Sistema</translation>
     </message>
     <message>
         <source>Failed to generate captcha</source>
-        <translation type="unfinished"></translation>
+        <translation>Não foi possível gerar o captcha</translation>
     </message>
     <message>
         <source>Failed to download captcha</source>
-        <translation type="unfinished"></translation>
+        <translation>Não foi possível descarregar o captcha</translation>
     </message>
     <message>
         <source>Please fill out all fields. Email is optional.</source>
-        <translation type="unfinished"></translation>
+        <translation>Por favor preenche todos os campos. O e-mail é opcional.</translation>
     </message>
     <message>
         <source>Hedgewars - Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Aviso</translation>
     </message>
     <message>
         <source>Hedgewars - Information</source>
-        <translation type="unfinished"></translation>
+        <translation>Hedgewars - Informação</translation>
     </message>
     <message>
         <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Hedgewars</translation>
     </message>
     <message>
         <source>Not all players are ready</source>
-        <translation type="unfinished"></translation>
+        <translation>Nem todos os jogadores se encontram prontos</translation>
     </message>
     <message>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tens a certeza que queres iniciar este jogo?
+Nem todos os jogadores estão prontos.</translation>
     </message>
 </context>
 <context>
@@ -2234,7 +2308,7 @@
     </message>
     <message>
         <source>Update</source>
-        <translation>Actualizar</translation>
+        <translation>Atualizar</translation>
     </message>
     <message>
         <source>Specify</source>
@@ -2274,7 +2348,7 @@
     </message>
     <message>
         <source>Set default options</source>
-        <translation>Restaurar opções por omisão</translation>
+        <translation>Restaurar opções por omissão</translation>
     </message>
     <message>
         <source>Open videos directory</source>
@@ -2294,7 +2368,7 @@
     </message>
     <message>
         <source>Restore default coding parameters</source>
-        <translation>Restaurar os parametros de conversão por omisão</translation>
+        <translation>Restaurar os parâmetros de conversão por omissão</translation>
     </message>
     <message>
         <source>Open the video directory in your system</source>
@@ -2312,20 +2386,40 @@
         <source>Upload this video to your Youtube account</source>
         <translation>Enviar este vídeo para a tua conta do Youtube</translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation>Repor</translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation>Define a porta por omisão do servidor Hedgewars</translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation>Convida os teus amigos para o teu servidor com apenas 1 click!</translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation>Clica para copiar o URL do teu servidor. Partilha este link com os teus amigos para que se possam juntar a ti.</translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation>Iniciar o servidor privado</translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
     <message>
         <source>Enter a name for your room.</source>
-        <translation type="unfinished"></translation>
+        <translation>Introduz um nome para a tua sala de jogo.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Cancelar</translation>
+        <translation>Cancelar</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Criar sala</translation>
     </message>
 </context>
 <context>
@@ -2379,19 +2473,19 @@
     <name>SeedPrompt</name>
     <message>
         <source>The map seed is the basis for all random values generated by the game.</source>
-        <translation type="unfinished"></translation>
+        <translation>A semente do mapa é a base de todos os valores aleatórios gerados pelo jogo.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Cancelar</translation>
+        <translation>Cancelar</translation>
     </message>
     <message>
         <source>Set seed</source>
-        <translation type="unfinished"></translation>
+        <translation>Definir semente</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Fechar</translation>
     </message>
 </context>
 <context>
@@ -2406,7 +2500,7 @@
     </message>
     <message>
         <source>Ammo in boxes</source>
-        <translation>Caixas de armas</translation>
+        <translation>Munições por caixa</translation>
     </message>
     <message>
         <source>Delays</source>
@@ -2422,25 +2516,45 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation>Não foi possível iniciar o servidor em %1.</translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation>Não foi possível iniciar o motor de jogo em %1
+Código de erro:: %2</translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation>São necessárias pelo menos 2 equipas (para jogar)!</translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
-        <translation type="unfinished"></translation>
+        <translation>Equipa de %1</translation>
     </message>
 </context>
 <context>
     <name>ThemePrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Cancelar</translation>
+        <translation>Cancelar</translation>
     </message>
     <message>
         <source>Search for a theme:</source>
-        <translation type="unfinished"></translation>
+        <translation>Procurar:</translation>
     </message>
     <message>
         <source>Use selected theme</source>
-        <translation type="unfinished"></translation>
+        <translation>Utilizar o tema selecionado</translation>
     </message>
 </context>
 <context>
@@ -2483,7 +2597,7 @@
     </message>
     <message>
         <source>ammo menu</source>
-        <translation>menu de armas</translation>
+        <translation>menu de armamento</translation>
     </message>
     <message>
         <source>slot 1</source>
@@ -2603,7 +2717,7 @@
     </message>
     <message>
         <source>mute audio</source>
-        <translation>Silenciar audio</translation>
+        <translation>silenciar áudio</translation>
     </message>
     <message>
         <source>record</source>
@@ -2611,65 +2725,65 @@
     </message>
     <message>
         <source>hedgehog info</source>
-        <translation type="unfinished"></translation>
+        <translation>informação do ouriço</translation>
     </message>
 </context>
 <context>
     <name>binds (categories)</name>
     <message>
         <source>Movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Movimento</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished"></translation>
+        <translation>Armamento</translation>
     </message>
     <message>
         <source>Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Câmara</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished">Outras opções</translation>
+        <translation>Outras opções</translation>
     </message>
 </context>
 <context>
     <name>binds (descriptions)</name>
     <message>
         <source>Traverse gaps and obstacles by jumping:</source>
-        <translation>Ultrapassar fendas e obstaculos saltando:</translation>
+        <translation>Ultrapassar fendas e obstáculos:</translation>
     </message>
     <message>
         <source>Fire your selected weapon or trigger an utility item:</source>
-        <translation>Disparar a arma currentemente seleccionada ou utilizar um utilitario:</translation>
+        <translation>Disparar a arma correntemente selecionada ou utilizar um utilitario:</translation>
     </message>
     <message>
         <source>Pick a weapon or a target location under the cursor:</source>
-        <translation>Seleccionar uma arma ou escolher um alvo com o cursor:</translation>
+        <translation>Selecionar uma arma ou escolher um alvo com o cursor:</translation>
     </message>
     <message>
         <source>Switch your currently active hog (if possible):</source>
-        <translation>Trocar de ouriço currentemente seleccionado (se possivel):</translation>
+        <translation>Trocar de ouriço correntemente selecionado (se possível):</translation>
     </message>
     <message>
         <source>Pick a weapon or utility item:</source>
-        <translation>Apanhar armas ou utilitarios:</translation>
+        <translation>Selecionar armas ou utilitários:</translation>
     </message>
     <message>
         <source>Set the timer on bombs and timed weapons:</source>
-        <translation>Escolher o tempo nas bombas e outras armas temporizadas:</translation>
+        <translation>Definir o temporizador nas bombas e em outras armas temporizadas:</translation>
     </message>
     <message>
         <source>Move the camera to the active hog:</source>
-        <translation>Mover a camara para o ouriço currentemente activo:</translation>
+        <translation>Mover a câmara para o ouriço correntemente activo:</translation>
     </message>
     <message>
         <source>Move the cursor or camera without using the mouse:</source>
-        <translation>Mover o cursor ou camara sem usar o rato:</translation>
+        <translation>Mover o cursor ou câmara sem utilizar o rato:</translation>
     </message>
     <message>
         <source>Modify the camera&apos;s zoom level:</source>
-        <translation>Modificar o nível de zoom da camara:</translation>
+        <translation>Modificar o nível de zoom da câmara:</translation>
     </message>
     <message>
         <source>Talk to your team or all participants:</source>
@@ -2685,7 +2799,7 @@
     </message>
     <message>
         <source>Toggle fullscreen mode:</source>
-        <translation>Alterar para modo de ecrã inteiro:</translation>
+        <translation>Ativar ou desativar o modo ecrã inteiro:</translation>
     </message>
     <message>
         <source>Take a screenshot:</source>
@@ -2701,7 +2815,7 @@
     </message>
     <message>
         <source>Hedgehog movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Movimentar ouriço</translation>
     </message>
 </context>
 <context>
@@ -3027,115 +3141,115 @@
     <name>server</name>
     <message>
         <source>Not room master</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Não és o anfitrião da sala</translation>
     </message>
     <message>
         <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Informação dos ouriços corrompida</translation>
     </message>
     <message>
         <source>too many teams</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">demasiadas equipas</translation>
     </message>
     <message>
         <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">demasiados ouriços</translation>
     </message>
     <message>
         <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Já existe uma equipa com o mesmo nome na lista</translation>
     </message>
     <message>
         <source>round in progress</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">partida em progresso</translation>
     </message>
     <message>
         <source>restricted</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">limitada</translation>
     </message>
     <message>
         <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">REMOVE_TEAM: equipa inexistente</translation>
     </message>
     <message>
         <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">A equipa não te pertence!</translation>
     </message>
     <message>
         <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Menos de 2 clãs!</translation>
     </message>
     <message>
         <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Já existe uma sala com esse nome</translation>
     </message>
     <message>
         <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Utilizador já em uso</translation>
     </message>
     <message>
         <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nome de utilizador ilegal</translation>
     </message>
     <message>
         <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Protocolo já conhecido</translation>
     </message>
     <message>
         <source>Bad number</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Número inválido</translation>
     </message>
     <message>
         <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nome de utilizador já em uso</translation>
     </message>
     <message>
         <source>No checker rights</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Não possui permissões para verificar</translation>
     </message>
     <message>
         <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">A autenticação falhou</translation>
     </message>
     <message>
         <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">É necessário aguardar 60 segundos após uma expulsão</translation>
     </message>
     <message>
         <source>kicked</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">expulso</translation>
     </message>
     <message>
         <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Ping timeout</translation>
     </message>
     <message>
         <source>bye</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">tchau (bye)</translation>
     </message>
     <message>
         <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nome da sala ilegal</translation>
     </message>
     <message>
         <source>No such room</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Sala inexistente</translation>
     </message>
     <message>
         <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Entrada restrita</translation>
     </message>
     <message>
         <source>Registered users only</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Apenas utilizadores registados</translation>
     </message>
     <message>
         <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Estás banido desta sala</translation>
     </message>
     <message>
         <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Campo vazio na configuração</translation>
     </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ro.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ro.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -179,6 +195,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Cannot create directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -229,6 +260,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -328,6 +371,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -447,10 +494,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -466,6 +509,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -510,7 +557,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 has joined</translation>
+        <translation type="obsolete">%1 *** %2 has joined</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -539,6 +586,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -689,6 +751,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -836,6 +909,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -945,6 +1026,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1914,6 +2006,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1988,35 +2084,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Cannot create directory %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Cannot create directory %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Unable to start the server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Unable to start the server: %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2179,10 +2252,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2294,6 +2363,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2404,6 +2493,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3005,119 +3113,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ru.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -5,7 +5,7 @@
     <name>About</name>
     <message>
         <source>Unknown Compiler</source>
-        <translation type="unfinished"></translation>
+        <translation>Неизвестный компилятор</translation>
     </message>
 </context>
 <context>
@@ -30,31 +30,31 @@
     <name>BanDialog</name>
     <message>
         <source>IP</source>
-        <translation type="unfinished">IP</translation>
+        <translation>IP</translation>
     </message>
     <message>
         <source>Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>Псевдоним</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Псевдоним</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Причина</translation>
     </message>
     <message>
         <source>Duration</source>
-        <translation type="unfinished"></translation>
+        <translation>Длительность</translation>
     </message>
     <message>
         <source>Ok</source>
-        <translation type="unfinished"></translation>
+        <translation>ОК</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <source>you know why</source>
@@ -62,41 +62,57 @@
     </message>
     <message>
         <source>Warning</source>
-        <translation type="unfinished"></translation>
+        <translation>Предупреждение</translation>
     </message>
     <message>
         <source>Please, specify %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Пожалуйста, укажите %1</translation>
     </message>
     <message>
         <source>nickname</source>
-        <translation type="unfinished"></translation>
+        <translation>псевдоним</translation>
     </message>
     <message>
         <source>permanent</source>
-        <translation type="unfinished"></translation>
+        <translation>постоянный</translation>
     </message>
 </context>
 <context>
     <name>DataManager</name>
     <message>
         <source>Use Default</source>
-        <translation type="unfinished"></translation>
+        <translation>Использовать значение по умолчанию</translation>
     </message>
 </context>
 <context>
     <name>FeedbackDialog</name>
     <message>
         <source>View</source>
-        <translation type="unfinished"></translation>
+        <translation>Вид</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <source>Send Feedback</source>
-        <translation type="unfinished"></translation>
+        <translation>Отослать отзыв</translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation>Мы всегда рады новым предложениям, идям или сообщениям об ошибках.</translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation>Пришлите нам отзыв!</translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation>Если вы нашли ошибку, можете проверить, не было ли уже сообщения о ней здесь:</translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation>Адрес e-mail необязателен, но необходим, если вы хотите получить ответ.</translation>
     </message>
 </context>
 <context>
@@ -130,59 +146,77 @@
     </message>
     <message>
         <source>Game scheme will auto-select a weapon</source>
-        <translation type="unfinished"></translation>
+        <translation>Схема игры определяет набор оружия</translation>
     </message>
     <message>
         <source>Map</source>
-        <translation type="unfinished">Карта</translation>
+        <translation>Карта</translation>
     </message>
     <message>
         <source>Game options</source>
-        <translation type="unfinished"></translation>
+        <translation>Настройки игры</translation>
     </message>
 </context>
 <context>
     <name>HWApplication</name>
     <message numerus="yes">
         <source>%1 minutes</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 минута</numerusform>
+            <numerusform>%1 минуты</numerusform>
+            <numerusform>%1 минут</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hour</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 час</numerusform>
+            <numerusform>%1 часа</numerusform>
+            <numerusform>%1 часов</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 hours</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 час</numerusform>
+            <numerusform>%1 часа</numerusform>
+            <numerusform>%1 часов</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 day</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 день</numerusform>
+            <numerusform>%1 дня</numerusform>
+            <numerusform>%1 дней</numerusform>
         </translation>
     </message>
     <message numerus="yes">
         <source>%1 days</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>%1 день</numerusform>
+            <numerusform>%1 дня</numerusform>
+            <numerusform>%1 дней</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation>Схема &quot;%1&quot; не поддерживается</translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation>Не могу создать папку %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation>Не могу открыть папку:
+%1
+
+Пожалуйста, проверьте установку приложения!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -233,6 +267,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation>Ошибка при сохранении стиля в %1</translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation>%1 вошёл</translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation>%1 вышел</translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation>%1 вышел (%2)</translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -282,7 +328,7 @@
     </message>
     <message>
         <source>%1&apos;s Team</source>
-        <translation type="unfinished"></translation>
+        <translation>Команда %1</translation>
     </message>
     <message>
         <source>Hedgewars - Nick registered</source>
@@ -331,6 +377,11 @@
     <message>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
+        <translation>Вы переподключились слишком быстро.
+Пожалуйста, попробуйте снова через несколько секунд.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -385,91 +436,91 @@
     </message>
     <message>
         <source>Map type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Тип карты:</translation>
     </message>
     <message>
         <source>Image map</source>
-        <translation type="unfinished"></translation>
+        <translation>Изображение</translation>
     </message>
     <message>
         <source>Mission map</source>
-        <translation type="unfinished"></translation>
+        <translation>Миссия</translation>
     </message>
     <message>
         <source>Hand-drawn</source>
-        <translation type="unfinished">Рисованная карта</translation>
+        <translation>Рисованная карта</translation>
     </message>
     <message>
         <source>Randomly generated</source>
-        <translation type="unfinished"></translation>
+        <translation>Случайно сгенерированная</translation>
     </message>
     <message>
         <source>Random maze</source>
-        <translation type="unfinished"></translation>
+        <translation>Случайный лабиринт</translation>
     </message>
     <message>
         <source>Random</source>
-        <translation type="unfinished">Случайно</translation>
+        <translation>Случайно</translation>
     </message>
     <message>
         <source>Map preview:</source>
-        <translation type="unfinished"></translation>
+        <translation>Предпросмотр карты:</translation>
     </message>
     <message>
         <source>Load map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Загрузить рисованную карту</translation>
     </message>
     <message>
         <source>Edit map drawing</source>
-        <translation type="unfinished"></translation>
+        <translation>Редактировать рисованную карту</translation>
     </message>
     <message>
         <source>Small islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Маленькие острова</translation>
     </message>
     <message>
         <source>Medium islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Средние острова</translation>
     </message>
     <message>
         <source>Large islands</source>
-        <translation type="unfinished"></translation>
+        <translation>Большие острова</translation>
     </message>
     <message>
         <source>Map size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Размер карты:</translation>
     </message>
     <message>
         <source>Maze style:</source>
-        <translation type="unfinished"></translation>
+        <translation>Стиль лабиринта:</translation>
     </message>
     <message>
         <source>Mission:</source>
-        <translation type="unfinished"></translation>
+        <translation>Миссия:</translation>
     </message>
     <message>
         <source>Map:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
+        <translation>Карта:</translation>
     </message>
     <message>
         <source>Load drawn map</source>
-        <translation type="unfinished">Загрузить рисованную карту</translation>
+        <translation>Загрузить рисованную карту</translation>
     </message>
     <message>
         <source>Drawn Maps</source>
-        <translation type="unfinished">Рисованные карты</translation>
+        <translation>Рисованные карты</translation>
     </message>
     <message>
         <source>All files</source>
-        <translation type="unfinished">Все файлы</translation>
+        <translation>Все файлы</translation>
     </message>
     <message>
         <source>Large tunnels</source>
-        <translation type="unfinished"></translation>
+        <translation>Большие туннели</translation>
+    </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation>Тема: %1</translation>
     </message>
 </context>
 <context>
@@ -515,7 +566,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 вошёл</translation>
+        <translation type="obsolete">%1 *** %2 вошёл</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -544,6 +595,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation>Псевдоним:</translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation>Пароль:</translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -560,22 +626,22 @@
     <name>HatButton</name>
     <message>
         <source>Change hat (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Сменить шляпу (%1)</translation>
     </message>
 </context>
 <context>
     <name>HatPrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <source>Use selected hat</source>
-        <translation type="unfinished"></translation>
+        <translation>Использовать выбранную шляпу</translation>
     </message>
     <message>
         <source>Search for a hat:</source>
-        <translation type="unfinished"></translation>
+        <translation>Поиск по шляпам:</translation>
     </message>
 </context>
 <context>
@@ -589,7 +655,7 @@
     <name>KeyBinder</name>
     <message>
         <source>Category</source>
-        <translation type="unfinished"></translation>
+        <translation>Категория</translation>
     </message>
 </context>
 <context>
@@ -597,30 +663,30 @@
     <message>
         <source>Duration: %1m %2s
 </source>
-        <translation type="unfinished">Длительность: %1мин %2сек</translation>
+        <translation>Длительность: %1мин %2сек</translation>
     </message>
     <message>
         <source>Video: %1x%2, </source>
-        <translation type="unfinished">Видео: %1x%2, </translation>
+        <translation>Видео: %1x%2, </translation>
     </message>
     <message>
         <source>%1 fps, </source>
-        <translation type="unfinished">%1 кадров/сек,</translation>
+        <translation>%1 кадров/сек,</translation>
     </message>
     <message>
         <source>Audio: </source>
-        <translation type="unfinished">Аудио: </translation>
+        <translation>Аудио: </translation>
     </message>
     <message>
         <source>unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>неизвестно</translation>
     </message>
 </context>
 <context>
     <name>MapModel</name>
     <message>
         <source>No description available.</source>
-        <translation type="unfinished"></translation>
+        <translation>Описание отсутствует.</translation>
     </message>
 </context>
 <context>
@@ -655,35 +721,35 @@
     </message>
     <message>
         <source>General</source>
-        <translation type="unfinished">Основные настройки</translation>
+        <translation>Основные настройки</translation>
     </message>
     <message>
         <source>Bans</source>
-        <translation type="unfinished"></translation>
+        <translation>Баны</translation>
     </message>
     <message>
         <source>IP/Nick</source>
-        <translation type="unfinished"></translation>
+        <translation>IP/Псевдоним</translation>
     </message>
     <message>
         <source>Expiration</source>
-        <translation type="unfinished"></translation>
+        <translation>Окончание</translation>
     </message>
     <message>
         <source>Reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Причина</translation>
     </message>
     <message>
         <source>Refresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Обновить</translation>
     </message>
     <message>
         <source>Add</source>
-        <translation type="unfinished"></translation>
+        <translation>Добавить</translation>
     </message>
     <message>
         <source>Remove</source>
-        <translation type="unfinished"></translation>
+        <translation>Удалить</translation>
     </message>
 </context>
 <context>
@@ -694,6 +760,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation>Идёт загрузка пожалуйста, подождите.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -744,35 +821,35 @@
     </message>
     <message>
         <source>Use my default</source>
-        <translation type="unfinished"></translation>
+        <translation>Использовать мои настройки по умолчанию</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Сбросить все привязки</translation>
     </message>
     <message>
         <source>Custom Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Настройка управления</translation>
     </message>
     <message>
         <source>Hat</source>
-        <translation type="unfinished">Шляпа</translation>
+        <translation>Шляпа</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Название</translation>
+        <translation>Название</translation>
     </message>
     <message>
         <source>This hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Имя этого ежа</translation>
     </message>
     <message>
         <source>Randomize this hedgehog&apos;s name</source>
-        <translation type="unfinished"></translation>
+        <translation>Выбрать случайное имя для этого ежа</translation>
     </message>
     <message>
         <source>Random Team</source>
-        <translation type="unfinished">Случайная команда</translation>
+        <translation>Случайная команда</translation>
     </message>
 </context>
 <context>
@@ -841,6 +918,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; испугался и пропустил &lt;b&gt;%2&lt;/b&gt; ходов.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Сохранить</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -896,23 +981,23 @@
     </message>
     <message>
         <source>Play a game across a local area network</source>
-        <translation type="unfinished"></translation>
+        <translation>Играть по локальной сети</translation>
     </message>
     <message>
         <source>Play a game on an official server</source>
-        <translation type="unfinished"></translation>
+        <translation>Играть на официальном сервере</translation>
     </message>
     <message>
         <source>Feedback</source>
-        <translation type="unfinished"></translation>
+        <translation>Отзыв</translation>
     </message>
     <message>
         <source>Play local network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Играть по локальной сети</translation>
     </message>
     <message>
         <source>Play official network game</source>
-        <translation type="unfinished"></translation>
+        <translation>Играть на официальном сервере</translation>
     </message>
 </context>
 <context>
@@ -923,7 +1008,7 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished">Редактировать настройки игры</translation>
+        <translation>Редактировать настройки игры</translation>
     </message>
 </context>
 <context>
@@ -934,18 +1019,29 @@
     </message>
     <message>
         <source>Edit game preferences</source>
-        <translation type="unfinished">Редактировать настройки игры</translation>
+        <translation>Редактировать настройки игры</translation>
     </message>
     <message>
         <source>Start</source>
-        <translation type="unfinished">Старт</translation>
+        <translation>Старт</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished">Обновить</translation>
+        <translation>Обновить</translation>
     </message>
     <message>
         <source>Room controls</source>
+        <translation>Управление комнатой</translation>
+    </message>
+</context>
+<context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -1037,47 +1133,47 @@
     </message>
     <message>
         <source>Reset to default</source>
-        <translation type="unfinished"></translation>
+        <translation>Сбросить на значения по умолчанию</translation>
     </message>
     <message>
         <source>Reset all binds</source>
-        <translation type="unfinished"></translation>
+        <translation>Сбросить все привязки</translation>
     </message>
     <message>
         <source>Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Игра</translation>
     </message>
     <message>
         <source>Graphics</source>
-        <translation type="unfinished"></translation>
+        <translation>Графика</translation>
     </message>
     <message>
         <source>Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Звук</translation>
     </message>
     <message>
         <source>Controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Управление</translation>
     </message>
     <message>
         <source>Video Recording</source>
-        <translation type="unfinished"></translation>
+        <translation>Запись видео</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Сеть</translation>
     </message>
     <message>
         <source>Teams</source>
-        <translation type="unfinished">Команды</translation>
+        <translation>Команды</translation>
     </message>
     <message>
         <source>Schemes</source>
-        <translation type="unfinished"></translation>
+        <translation>Схемы</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished">Оружие</translation>
+        <translation>Оружие</translation>
     </message>
     <message>
         <source>Frontend</source>
@@ -1085,7 +1181,7 @@
     </message>
     <message>
         <source>Custom colors</source>
-        <translation type="unfinished">Свои цвета</translation>
+        <translation>Свои цвета</translation>
     </message>
     <message>
         <source>Game audio</source>
@@ -1101,23 +1197,23 @@
     </message>
     <message>
         <source>Proxy settings</source>
-        <translation type="unfinished">Настройки прокси</translation>
+        <translation>Настройки прокси</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished">Разное</translation>
+        <translation>Разное</translation>
     </message>
     <message>
         <source>Updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Обновления</translation>
     </message>
     <message>
         <source>Check for updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Проверить обновления</translation>
     </message>
     <message>
         <source>Video recording options</source>
-        <translation type="unfinished">Настройки видео</translation>
+        <translation>Настройки видео</translation>
     </message>
 </context>
 <context>
@@ -1175,27 +1271,27 @@
     </message>
     <message>
         <source>Search for a room:</source>
-        <translation type="unfinished"></translation>
+        <translation>Искать комнату:</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Создать комнату</translation>
     </message>
     <message>
         <source>Join room</source>
-        <translation type="unfinished"></translation>
+        <translation>Войти в комнату</translation>
     </message>
     <message>
         <source>Room state</source>
-        <translation type="unfinished"></translation>
+        <translation>Состояние комнаты</translation>
     </message>
     <message>
         <source>Clear filters</source>
-        <translation type="unfinished"></translation>
+        <translation>Очистить фильтры</translation>
     </message>
     <message>
         <source>Open server administration page</source>
-        <translation type="unfinished"></translation>
+        <translation>Открыть страницу администрирования сервера</translation>
     </message>
 </context>
 <context>
@@ -1419,12 +1515,12 @@
     <message>
         <source>Date: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Дата: %1</translation>
     </message>
     <message>
         <source>Size: %1
 </source>
-        <translation type="unfinished"></translation>
+        <translation>Размер: %1</translation>
     </message>
 </context>
 <context>
@@ -1475,7 +1571,7 @@
     </message>
     <message>
         <source>Restrict Unregistered Players Join</source>
-        <translation type="unfinished"></translation>
+        <translation>Запретить вход незарегистрированным игрокам</translation>
     </message>
     <message>
         <source>Show games in lobby</source>
@@ -1483,7 +1579,7 @@
     </message>
     <message>
         <source>Show games in-progress</source>
-        <translation type="unfinished"></translation>
+        <translation>Показать текущие игры</translation>
     </message>
 </context>
 <context>
@@ -1534,11 +1630,11 @@
     </message>
     <message>
         <source>Visual effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Визуальные эффекты</translation>
     </message>
     <message>
         <source>Sound</source>
-        <translation type="unfinished"></translation>
+        <translation>Звук</translation>
     </message>
     <message>
         <source>In-game sound effects</source>
@@ -1546,7 +1642,7 @@
     </message>
     <message>
         <source>Music</source>
-        <translation type="unfinished"></translation>
+        <translation>Музыка</translation>
     </message>
     <message>
         <source>In-game music</source>
@@ -1907,15 +2003,15 @@
     </message>
     <message>
         <source>Fullscreen</source>
-        <translation type="unfinished">Полный экран</translation>
+        <translation>Полный экран</translation>
     </message>
     <message>
         <source>Fullscreen Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Разрешение в полноэкранном режиме</translation>
     </message>
     <message>
         <source>Windowed Resolution</source>
-        <translation type="unfinished"></translation>
+        <translation>Разрешение в оконном режиме</translation>
     </message>
     <message>
         <source>Your Email</source>
@@ -1941,6 +2037,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2029,35 +2129,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation>Не могу создать папку %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Не могу создать папку %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Ошибка запуска сервера: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Ошибка запуска сервера: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2206,17 +2283,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
-        <translation type="unfinished"></translation>
+        <translation>Не все игроки готовы</translation>
     </message>
     <message>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
-        <translation type="unfinished"></translation>
+        <translation>Вы действительно хотите запустить игру?
+Не все игроки готовы.</translation>
     </message>
 </context>
 <context>
@@ -2321,20 +2395,40 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
     <message>
         <source>Enter a name for your room.</source>
-        <translation type="unfinished"></translation>
+        <translation>Введите название для вашей комнаты.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <source>Create room</source>
-        <translation type="unfinished"></translation>
+        <translation>Создать комнату</translation>
     </message>
 </context>
 <context>
@@ -2388,19 +2482,19 @@
     <name>SeedPrompt</name>
     <message>
         <source>The map seed is the basis for all random values generated by the game.</source>
-        <translation type="unfinished"></translation>
+        <translation>Зерно карты - это основа для всех псведослучайных значений, используемых в игре.</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <source>Set seed</source>
-        <translation type="unfinished"></translation>
+        <translation>Установить зерно</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Закрыть</translation>
     </message>
 </context>
 <context>
@@ -2431,25 +2525,44 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation>Для игры нужны как минимум две команды!</translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
-        <translation type="unfinished"></translation>
+        <translation>Команда %1</translation>
     </message>
 </context>
 <context>
     <name>ThemePrompt</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <source>Search for a theme:</source>
-        <translation type="unfinished"></translation>
+        <translation>Искать тему:</translation>
     </message>
     <message>
         <source>Use selected theme</source>
-        <translation type="unfinished"></translation>
+        <translation>Использовать выбранную тему</translation>
     </message>
 </context>
 <context>
@@ -2620,26 +2733,26 @@
     </message>
     <message>
         <source>hedgehog info</source>
-        <translation type="unfinished"></translation>
+        <translation>информация о еже</translation>
     </message>
 </context>
 <context>
     <name>binds (categories)</name>
     <message>
         <source>Movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Передвижение</translation>
     </message>
     <message>
         <source>Weapons</source>
-        <translation type="unfinished">Оружие</translation>
+        <translation>Оружие</translation>
     </message>
     <message>
         <source>Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Камера</translation>
     </message>
     <message>
         <source>Miscellaneous</source>
-        <translation type="unfinished">Разное</translation>
+        <translation>Разное</translation>
     </message>
 </context>
 <context>
@@ -2710,7 +2823,7 @@
     </message>
     <message>
         <source>Hedgehog movement</source>
-        <translation type="unfinished"></translation>
+        <translation>Движение ежа</translation>
     </message>
 </context>
 <context>
@@ -3032,119 +3145,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_sk.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -183,6 +199,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Nepodarilo sa vytvoriť adresár %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished">Chyba pri otváraní adresára s dátami:
+%1
+
+Skontrolujte, prosím, inštaláciu!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -233,6 +267,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation>Nepodarilo sa uložiť súbor so štýlom do %1</translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -332,6 +378,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -451,10 +501,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Načítať nakreslenú mapu</translation>
     </message>
@@ -470,6 +516,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -514,7 +564,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 sa pridal</translation>
+        <translation type="obsolete">%1 *** %2 sa pridal</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -543,6 +593,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -693,6 +758,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -840,6 +916,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; sa zľakol a preskočil ťah &lt;b&gt;%2&lt;/b&gt;krát.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Uložiť</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -949,6 +1033,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1938,6 +2033,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2027,37 +2126,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Hlavné okno - Chyba</translation>
+        <translation type="obsolete">Hlavné okno - Chyba</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Nepodarilo sa vytvoriť adresár %1</translation>
+        <translation type="obsolete">Nepodarilo sa vytvoriť adresár %1</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Chyba pri otváraní adresára s dátami:
+        <translation type="obsolete">Chyba pri otváraní adresára s dátami:
 %1
 
 Skontrolujte, prosím, inštaláciu!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Chyba</translation>
+        <translation type="obsolete">TCP - Chyba</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Nepodarilo sa spustiť server: %1.</translation>
+        <translation type="obsolete">Nepodarilo sa spustiť server: %1.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Nepodarilo sa spustiť enginu na </translation>
+        <translation type="obsolete">Nepodarilo sa spustiť enginu na </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Kód chyby: %1</translation>
+        <translation type="obsolete">Kód chyby: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2206,10 +2305,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2321,6 +2416,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation>Uploadovať video na váš účet YouTube</translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2431,6 +2546,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3032,119 +3166,4 @@
         <translation>Pravý joystick (Doľava)</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_sv.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Kan inte skapa katalog %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -227,6 +258,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -326,6 +369,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -445,10 +492,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Läs in ritad karta</translation>
     </message>
@@ -464,6 +507,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -508,7 +555,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 har gått med</translation>
+        <translation type="obsolete">%1 *** %2 har gått med</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -537,6 +584,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -687,6 +749,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -828,6 +901,14 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; var rädd och hoppade över turer &lt;b&gt;%2&lt;/b&gt; gånger.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Spara</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -937,6 +1018,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1920,6 +2012,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2008,35 +2104,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Kan inte skapa katalog %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Kan inte skapa katalog %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Kunde inte starta servern: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Kunde inte starta servern: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2184,10 +2257,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2299,6 +2368,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2409,6 +2498,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3010,119 +3118,4 @@
         <translation>Styrkors</translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -167,6 +183,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">%1 dizini oluşturulamadı</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,6 +248,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -316,6 +359,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -435,10 +482,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -454,6 +497,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -497,10 +544,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1 *** %2 has joined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>%1 *** %2 has left</source>
         <translation type="unfinished"></translation>
     </message>
@@ -527,6 +570,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -677,6 +735,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -812,6 +881,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -921,6 +998,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1882,6 +1970,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1970,35 +2062,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">%1 dizini oluşturulamadı</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">%1 dizini oluşturulamadı</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Sunucu başlatılamadı: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Sunucu başlatılamadı: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2144,10 +2213,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2259,6 +2324,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2369,6 +2454,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2970,119 +3074,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_uk.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -183,6 +199,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Не можу створити директорію %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -233,6 +264,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -332,6 +375,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -451,10 +498,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished">Завантажити намальовану мапу</translation>
     </message>
@@ -470,6 +513,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -514,7 +561,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1 *** %2 приєднався</translation>
+        <translation type="obsolete">%1 *** %2 приєднався</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -543,6 +590,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -693,6 +755,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -840,6 +913,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished">Зберегти</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -949,6 +1030,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1934,6 +2026,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -2022,35 +2118,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Не можу створити директорію %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Не можу створити директорію %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Помилка запуску сервера: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Помилка запуску сервера: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2199,10 +2272,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2314,6 +2383,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2424,6 +2513,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3025,119 +3133,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -97,7 +97,7 @@
 <context>
     <name>DataManager</name>
     <message>
-        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="149"/>
+        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="151"/>
         <source>Use Default</source>
         <translation type="unfinished"></translation>
     </message>
@@ -105,17 +105,37 @@
 <context>
     <name>FeedbackDialog</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="114"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="91"/>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="90"/>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="92"/>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="124"/>
         <source>View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="150"/>
         <source>Cancel</source>
         <translation type="unfinished">取消</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="168"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="178"/>
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
@@ -205,6 +225,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/HWApplication.cpp" line="92"/>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="102"/>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="253"/>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,52 +255,67 @@
 <context>
     <name>HWChatWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="640"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="502"/>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="523"/>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="525"/>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="652"/>
         <source>%1 has been removed from your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="650"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="662"/>
         <source>%1 has been added to your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="680"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="692"/>
         <source>%1 has been removed from your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="689"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="701"/>
         <source>%1 has been added to your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="755"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="767"/>
         <source>Stylesheet imported from %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="756"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="768"/>
         <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="764"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="776"/>
         <source>Couldn&apos;t read %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="772"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="784"/>
         <source>StyleSheet discarded</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="796"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="808"/>
         <source>StyleSheet saved to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="799"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="811"/>
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -280,17 +333,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="632"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="636"/>
         <source>Game aborted</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1050"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1075"/>
         <source>Hedgewars - Nick registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1051"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1076"/>
         <source>This nick is registered, and you haven&apos;t specified a password.
 
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
@@ -299,93 +352,98 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1079"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1104"/>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1084"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1109"/>
         <source>
 
 Your password wasn&apos;t saved either.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1121"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1121"/>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1435"/>
         <source>No nickname supplied.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1435"/>
         <source>Hedgewars - Empty nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1152"/>
         <source>Hedgewars - Wrong password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1152"/>
         <source>You entered a wrong password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1144"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1173"/>
         <source>Try Again</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
         <source>Hedgewars - Connection error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1539"/>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1896"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1945"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1897"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1946"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2007"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2007"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1647"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1958"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2075"/>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1696"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2015"/>
         <source>Cannot save record to file %1</source>
         <translation>无法录入文件 %1</translation>
     </message>
@@ -393,13 +451,13 @@
 <context>
     <name>HWGame</name>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="374"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="386"/>
         <location filename="../../../../QTfrontend/net/recorder.cpp" line="112"/>
         <source>en.txt</source>
         <translation>zh_CN.txt</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="415"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="427"/>
         <source>Cannot open demofile %1</source>
         <translation>DEMO %1 打不开</translation>
     </message>
@@ -407,158 +465,158 @@
 <context>
     <name>HWMapContainer</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="217"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="220"/>
         <source>Small tunnels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="218"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="221"/>
         <source>Medium tunnels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="124"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="126"/>
         <source>Seed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="94"/>
         <source>Map type:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="96"/>
-        <source>Image map</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="97"/>
-        <source>Mission map</source>
+        <source>Image map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="98"/>
-        <source>Hand-drawn</source>
+        <source>Mission map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="99"/>
-        <source>Randomly generated</source>
+        <source>Hand-drawn</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="100"/>
+        <source>Randomly generated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="101"/>
         <source>Random maze</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="110"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="111"/>
         <source>Random</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="133"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="135"/>
         <source>Map preview:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="185"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="188"/>
         <source>Load map drawing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="191"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="194"/>
         <source>Edit map drawing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="204"/>
-        <source>All</source>
-        <translation>全部</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="205"/>
-        <source>Small</source>
-        <translation>小型</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="206"/>
-        <source>Medium</source>
-        <translation>中型</translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="207"/>
-        <source>Large</source>
-        <translation>大型</translation>
+        <source>All</source>
+        <translation>全部</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="208"/>
-        <source>Cavern</source>
-        <translation>洞穴</translation>
+        <source>Small</source>
+        <translation>小型</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="209"/>
+        <source>Medium</source>
+        <translation>中型</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="210"/>
+        <source>Large</source>
+        <translation>大型</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="211"/>
+        <source>Cavern</source>
+        <translation>洞穴</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="212"/>
         <source>Wacky</source>
         <translation>曲折</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="219"/>
-        <source>Large tunnels</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="220"/>
-        <source>Small islands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="221"/>
-        <source>Medium islands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="222"/>
+        <source>Large tunnels</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="223"/>
+        <source>Small islands</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="224"/>
+        <source>Medium islands</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="225"/>
         <source>Large islands</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="705"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="710"/>
         <source>Map size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="712"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="717"/>
         <source>Maze style:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="725"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="730"/>
         <source>Mission:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="735"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="740"/>
         <source>Map:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="799"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="930"/>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="804"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="935"/>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>Drawn Maps</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="881"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="886"/>
         <source>All files</source>
         <translation type="unfinished"></translation>
     </message>
@@ -609,40 +667,33 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="495"/>
-        <source>%1 *** %2 has joined</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="544"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="788"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="797"/>
         <source>%1 *** %2 has left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="546"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="790"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="799"/>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="641"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="773"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="651"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="782"/>
         <source>%1 *** %2 has joined the room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1559"/>
         <source>Quit reason: </source>
         <translation>退出原因:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="697"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="707"/>
         <source>Room destroyed</source>
         <translation>房间损坏</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="470"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="484"/>
         <source>You got kicked</source>
         <translation>被踢出</translation>
     </message>
@@ -654,6 +705,24 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="35"/>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="39"/>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="47"/>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -679,17 +748,17 @@
 <context>
     <name>HatPrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="83"/>
         <source>Search for a hat:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="119"/>
         <source>Cancel</source>
         <translation type="unfinished">取消</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="123"/>
         <source>Use selected hat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -834,6 +903,19 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagedata.cpp" line="66"/>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagedata.cpp" line="126"/>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="32"/>
@@ -954,47 +1036,57 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="174"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="113"/>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="118"/>
+        <source>Save</source>
+        <translation type="unfinished">保存</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="193"/>
         <source>The best shot award was won by &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; pts.</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="182"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="201"/>
         <source>The best killer is &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; kills in a turn.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="189"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="208"/>
         <source>A total of &lt;b&gt;%1&lt;/b&gt; hedgehog(s) were killed during this round.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="253"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="272"/>
         <source>(%1 kill)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="264"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="283"/>
         <source>&lt;b&gt;%1&lt;/b&gt; thought it&apos;s good to shoot his own hedgehogs with &lt;b&gt;%2&lt;/b&gt; pts.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="272"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="291"/>
         <source>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of his own hedgehogs.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="280"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="299"/>
         <source>&lt;b&gt;%1&lt;/b&gt; was scared and skipped turn &lt;b&gt;%2&lt;/b&gt; times.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1093,12 +1185,12 @@
 <context>
     <name>PageMultiplayer</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="50"/>
         <source>Edit game preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="64"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="62"/>
         <source>Start</source>
         <translation>开始</translation>
     </message>
@@ -1131,6 +1223,19 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="87"/>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="138"/>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="91"/>
@@ -1249,97 +1354,97 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="369"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="371"/>
         <source>Frontend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="386"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="388"/>
         <source>Custom colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="416"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="418"/>
         <source>Reset to default colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="429"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="431"/>
         <source>Game audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="467"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="469"/>
         <source>Frontend audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="490"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="492"/>
         <source>Account</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="516"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="518"/>
         <source>Proxy settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="522"/>
-        <source>Proxy host</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="523"/>
-        <source>Proxy port</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="524"/>
-        <source>Proxy login</source>
+        <source>Proxy host</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="525"/>
+        <source>Proxy port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="526"/>
+        <source>Proxy login</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="527"/>
         <source>Proxy password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="538"/>
-        <source>No proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="539"/>
-        <source>System proxy settings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="540"/>
-        <source>Socks5 proxy</source>
+        <source>No proxy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="541"/>
+        <source>System proxy settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="542"/>
+        <source>Socks5 proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="543"/>
         <source>HTTP proxy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="576"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="578"/>
         <source>Miscellaneous</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="616"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="624"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="629"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="637"/>
         <source>Check for updates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="643"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="651"/>
         <source>Video recording options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1360,42 +1465,42 @@
 <context>
     <name>PageRoomsList</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="53"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="64"/>
         <source>Search for a room:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="80"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="91"/>
         <source>Create room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="84"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="95"/>
         <source>Join room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="131"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="153"/>
         <source>Room state</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="155"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="177"/>
         <source>Rules:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="169"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="191"/>
         <source>Weapons:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="180"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="202"/>
         <source>Clear filters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="200"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="222"/>
         <source>Open server administration page</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1408,14 +1513,14 @@
         <translation type="obsolete">加入</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="585"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="609"/>
         <source>%1 players online</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="198"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="220"/>
         <source>Admin features</source>
         <translation>管理员功能</translation>
     </message>
@@ -1742,33 +1847,33 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="269"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="873"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
         <source>Ignore</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="273"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="897"/>
         <source>Add friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="868"/>
-        <source>Unignore</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="880"/>
+        <source>Unignore</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="892"/>
         <source>Remove friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="162"/>
         <source>Show games in lobby</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="143"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="165"/>
         <source>Show games in-progress</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1776,75 +1881,75 @@
 <context>
     <name>QCheckBox</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="375"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="377"/>
         <source>Fullscreen</source>
         <translation>游戏全屏幕</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="347"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="349"/>
         <source>Show FPS</source>
         <translation>显示帧率 (FPS)</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="358"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="360"/>
         <source>Alternative damage show</source>
         <translation>另一种伤害显示方式</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="381"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="383"/>
         <source>Visual effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="454"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="471"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="456"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="473"/>
         <source>Sound</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="455"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="457"/>
         <source>In-game sound effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="461"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="476"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="463"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="478"/>
         <source>Music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="462"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="464"/>
         <source>In-game music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="472"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="474"/>
         <source>Frontend sound effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="477"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="479"/>
         <source>Frontend music</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="622"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="630"/>
         <source>Check for updates at startup</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="364"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="366"/>
         <source>Show ammo menu tooltips</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="602"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="610"/>
         <source>Append date and time to record file name</source>
         <translation>记录名称中包含具体时间日期</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="59"/>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="507"/>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="55"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="509"/>
         <source>Save password</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1859,12 +1964,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="683"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="691"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="732"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="740"/>
         <source>Use game resolution</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1887,88 +1992,88 @@
         <translation>Lv 级别</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="588"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="590"/>
         <source>(System default)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="311"/>
-        <source>Disabled</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="312"/>
-        <source>Red/Cyan</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="313"/>
-        <source>Cyan/Red</source>
+        <source>Disabled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="314"/>
-        <source>Red/Blue</source>
+        <source>Red/Cyan</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="315"/>
-        <source>Blue/Red</source>
+        <source>Cyan/Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="316"/>
-        <source>Red/Green</source>
+        <source>Red/Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="317"/>
+        <source>Blue/Red</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="318"/>
+        <source>Red/Green</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="319"/>
         <source>Green/Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="326"/>
+        <source>Side-by-side</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="327"/>
+        <source>Top-Bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="320"/>
+        <source>Red/Cyan grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
+        <source>Cyan/Red grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="322"/>
+        <source>Red/Blue grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="323"/>
+        <source>Blue/Red grayscale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="324"/>
-        <source>Side-by-side</source>
+        <source>Red/Green grayscale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="325"/>
-        <source>Top-Bottom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="318"/>
-        <source>Red/Cyan grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="319"/>
-        <source>Cyan/Red grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="320"/>
-        <source>Red/Blue grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
-        <source>Blue/Red grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="322"/>
-        <source>Red/Green grayscale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="323"/>
         <source>Green/Red grayscale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="189"/>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="262"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="211"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="286"/>
         <source>Any</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1991,7 +2096,7 @@
         <translation>城堡模式</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="255"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/>
         <source>Playing teams</source>
         <translation>玩家队伍</translation>
     </message>
@@ -2024,22 +2129,27 @@
 <context>
     <name>QLabel</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="582"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="584"/>
         <source>Locale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="496"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="498"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="708"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="599"/>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="716"/>
         <source>Resolution</source>
         <translation>分辨率</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="293"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="295"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2059,12 +2169,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="307"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="309"/>
         <source>Stereo rendering</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="338"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="340"/>
         <source>FPS limit</source>
         <translation>FPS 上限</translation>
     </message>
@@ -2079,12 +2189,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="56"/>
         <source>Server name:</source>
         <translation>服务器名:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="59"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="63"/>
         <source>Server port:</source>
         <translation>服务器端口:</translation>
     </message>
@@ -2108,7 +2218,7 @@
         <translation type="obsolete">版本</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="437"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="439"/>
         <source>Initial sound volume</source>
         <translation>初始音量</translation>
     </message>
@@ -2255,62 +2365,62 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="103"/>
         <source>Your Email</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="101"/>
-        <source>Summary</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="111"/>
+        <source>Summary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="121"/>
         <source>Send system information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="126"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="136"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="154"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="164"/>
         <source>Type the security code:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="139"/>
+        <source>Tip: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
-        <source>Tip: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="135"/>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="652"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="660"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="672"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="680"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="697"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="705"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="738"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="746"/>
         <source>Framerate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="752"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="760"/>
         <source>Bitrate (Kbps)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2328,7 +2438,7 @@
 <context>
     <name>QLineEdit</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="933"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="952"/>
         <source>unnamed</source>
         <translation>无名</translation>
     </message>
@@ -2339,7 +2449,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="501"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="503"/>
         <source>anonymous</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2380,81 +2490,82 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="962"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="981"/>
         <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="500"/>
         <source>Cannot delete default scheme &apos;%1&apos;!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="988"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1007"/>
         <source>Please select a record from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1077"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1102"/>
         <source>Hedgewars - Nick not registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1452"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1498"/>
         <source>Unable to start server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1559"/>
         <source>Connection to server is lost</source>
         <translation>服务器连接丢失</translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2082"/>
+        <source>Not all players are ready</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2083"/>
+        <source>Are you sure you want to start this game?
+Not all players are ready.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="352"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="24"/>
+        <source>Hedgewars - Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="362"/>
+        <source>System Information Preview</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="377"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="388"/>
+        <source>Failed to generate captcha</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="405"/>
+        <source>Failed to download captcha</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="469"/>
+        <source>Please fill out all fields. Email is optional.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1985"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="439"/>
+        <source>Hedgewars - Success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/hwform.cpp" line="1986"/>
-        <source>Not all players are ready</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1987"/>
-        <source>Are you sure you want to start this game?
-Not all players are ready.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="340"/>
-        <source>Hedgewars - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="350"/>
-        <source>System Information Preview</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="365"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="376"/>
-        <source>Failed to generate captcha</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="393"/>
-        <source>Failed to download captcha</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="457"/>
-        <source>Please fill out all fields. Email is optional.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1928"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="427"/>
-        <source>Hedgewars - Success</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1929"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1934"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1991"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2482,46 +2593,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="114"/>
-        <location filename="../../../../QTfrontend/main.cpp" line="274"/>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="115"/>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="275"/>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="94"/>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="177"/>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="95"/>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="178"/>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="179"/>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
         <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="244"/>
         <source>Netgame - Error</source>
@@ -2562,22 +2633,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="536"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="560"/>
         <source>Room Name - Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="537"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="561"/>
         <source>Please select room from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="572"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="596"/>
         <source>Room Name - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="573"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="597"/>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
         <translation type="unfinished"></translation>
@@ -2624,7 +2695,7 @@
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="101"/>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="121"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="891"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="896"/>
         <source>File error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2635,7 +2706,7 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="122"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="892"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="897"/>
         <source>Cannot open &apos;%1&apos; for reading</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2666,20 +2737,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="23"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="32"/>
         <source>Hedgewars - Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="28"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="40"/>
         <source>Hedgewars - Information</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="35"/>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>QPushButton</name>
@@ -2701,11 +2767,36 @@
         <translation>上场!</translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="73"/>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="74"/>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="78"/>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="79"/>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="99"/>
         <source>Start</source>
         <translation>开始</translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="100"/>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="73"/>
         <source>Start server</source>
         <translation>开始服务端</translation>
@@ -2727,7 +2818,6 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="49"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="68"/>
         <source>default</source>
         <translation>默认</translation>
     </message>
@@ -2760,17 +2850,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="608"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="616"/>
         <source>Associate file extensions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="765"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="773"/>
         <source>Set default options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="766"/>
+        <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="774"/>
         <source>Restore default coding parameters</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2952,6 +3042,28 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="91"/>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="168"/>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/teamselhelper.cpp" line="58"/>
@@ -2962,17 +3074,17 @@
 <context>
     <name>ThemePrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="84"/>
         <source>Search for a theme:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="120"/>
         <source>Cancel</source>
         <translation type="unfinished">取消</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="124"/>
         <source>Use selected theme</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3663,7 +3775,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="156"/>
+        <location filename="../../../../QTfrontend/util/DataManager.cpp" line="158"/>
         <source>Keyboard</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3705,147 +3817,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="2"/>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="4"/>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="5"/>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="8"/>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="17"/>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="18"/>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="21"/>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts	Thu Jun 13 22:27:23 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -167,6 +183,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">無法創建路徑 %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,6 +248,18 @@
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWForm</name>
@@ -316,6 +359,10 @@
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWGame</name>
@@ -435,10 +482,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Theme: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Load drawn map</source>
         <translation type="unfinished"></translation>
     </message>
@@ -454,6 +497,10 @@
         <source>Large tunnels</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWNetServersModel</name>
@@ -498,7 +545,7 @@
     </message>
     <message>
         <source>%1 *** %2 has joined</source>
-        <translation>%1***%2已經進入</translation>
+        <translation type="obsolete">%1***%2已經進入</translation>
     </message>
     <message>
         <source>%1 *** %2 has left (%3)</source>
@@ -527,6 +574,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -677,6 +739,17 @@
     </message>
 </context>
 <context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageDrawMap</name>
     <message>
         <source>Undo</source>
@@ -812,6 +885,14 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Play again</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -921,6 +1002,17 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1890,6 +1982,10 @@
         <source>This program is distributed under the %1</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>QLineEdit</name>
@@ -1978,35 +2074,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">無法創建路徑 %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">無法創建路徑 %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">無法開始服務端: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">無法開始服務端: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2152,10 +2225,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2267,6 +2336,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2377,6 +2466,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -2978,119 +3086,4 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
-<context>
-    <name>server</name>
-    <message>
-        <source>Not room master</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Corrupted hedgehogs info</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many teams</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>too many hedgehogs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>round in progress</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not team owner!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Room with such name already exists</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname already chosen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal nickname</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Protocol already known</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bad number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No checker rights</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Authentication failed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>60 seconds cooldown after kick</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>kicked</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ping timeout</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>bye</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Illegal room name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>No such room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Joining restricted</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Registered users only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>You are banned in this room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Empty config entry</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
 </TS>
--- a/share/hedgewars/Data/Locale/hu.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/hu.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -146,7 +146,6 @@
 02:01=%1 Eccot, a delfint játssza
 02:01=%1 meglátogatja Aquaria-t
 02:01=%1 meglelte Atlantiszt
-02:01=%1 a Bioshock 3 főszerepére vágyik
 02:01=A kutyaúszásod még nem tőkéletes, %1
 02:01=%1 hozhatott volna jet ski-t is
 02:01=%1 nem szereti a vízisportokat
--- a/share/hedgewars/Data/Locale/it.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/it.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -56,7 +56,7 @@
 00:53=Macchina Spazio-Temporale
 ; 00:54=Attrezzi da Costruzione
 00:54=Terreno Spray
-00:55=Congelatore
+00:55=Raggio Congelatore
 00:56=Mannarino
 
 01:00=Combattiamo!
@@ -451,10 +451,10 @@
 03:51=Terreno al 100%
 03:52=NON USATO
 03:53=TARDIS Modello 40
-03:54=(Arma in sviluppo)
-03:55=Utilità di costruzione
-03:56=(Arma in sviluppo)
-03:57=Ecco il grande chef!
+;03:54=(Arma in sviluppo)
+03:54=Utilità di costruzione
+03:55=Arma di ibernazione di massa
+03:56=Ecco il grande chef!
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Attacca i tuoi nemici con una semplice granata.|Esploderà quando il timer arriverà a zero secondi.|1-5: Imposta il timer della granata|Attacco: Tieni premuto per lanciare con più forza|Mirino di Precisione + 1-5: Imposta livello di rimbalzo
@@ -511,10 +511,10 @@
 04:51=Spingete i nemici in acqua o sopra le mine!|Questa semplice arma non farà molti danni ma|spingerà con forza i nemici che colpisce!|Nei temi Snow e Christmas è una palla di neve!|Attacco: Tieni premuto per lanciare con più forza
 04:52=NON USATO
 04:53=Parti per un'avventura unica attraverso spazio e tempo,|lasciando i tuoi compagni da soli a combattere.|Preparati a ritornare in qualsiasi momento,|o per il Sudden Death o se sei l'ultimo sopravvissuto.|Attenzione! Non è utilizzabile durante il Sudden Death,|se sei rimasto da solo, o se sei il Re.|Attacco: Inzia la tua avventura nello spazio-tempo!
-04:54=DESCRIZIONE NON DISPONIBILE (arma ancora in sviluppo)
-04:55=Con questo terreno spray non ti mancherà mai la terra |sotto ai piedi. Utilissimo per costruire ponti, |seppellire nemici e sigillare tunnel.|Ma fai attenzione a non usarlo a tuo svantaggio!|Attacco: Attiva|Su/Giù: Continua a mirare|Sinistra/Destra: Modifica la potenza di fuoriuscita del terreno
-04:56=DESCRIZIONE NON DISPONIBILE (arma ancora in sviluppo)
-04:57=Lancia due mannarini da cucina verso i tuoi nemici, se |lanciati con potenza possono rappresentare una... tagliente sorpresa!|Ricorda che rimarranno sul terreno dopo averli lanciati!|Attacco: Tieni premuto per lanciare con più forza
+;04:54=DESCRIZIONE NON DISPONIBILE (arma ancora in sviluppo)
+04:54=Con questo terreno spray non ti mancherà mai la terra |sotto ai piedi. Utilissimo per costruire ponti, |seppellire nemici e sigillare tunnel.|Ma fai attenzione a non usarlo a tuo svantaggio!|Attacco: Attiva|Su/Giù: Continua a mirare|Sinistra/Destra: Modifica la potenza di fuoriuscita del terreno
+04:55=L'era glaciale non è mai stata così imminente!|Con questo potente raggio potrai congelare i ricci nemici,|rendere il terreno scivoloso e salvarti dalle cadute|in acqua trasformando il mare in una distesa di ghiaccio!|Attacco: Attiva|Su/Giù: Continua a mirare
+04:56=Lancia due mannarini da cucina verso i tuoi nemici, se |lanciati con potenza possono rappresentare una... tagliente sorpresa!|Ricorda che rimarranno sul terreno dopo averli lanciati!|Attacco: Tieni premuto per lanciare con più forza
 
 ; Game goal strings
 05:00=Modalità di Gioco
--- a/share/hedgewars/Data/Locale/ja.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/ja.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -177,7 +177,6 @@
 02:01=%1はエコーザのイルカを再生したい
 02:01=%1は水族館を訪問してしまった
 02:01=%1がアトランティスの失われた都市を発見した
-02:01=%1でBioshock3の先導的な役割を目指して
 02:01=あなたの犬のパドルは、少し作業は、%1を使用することができます
 02:01=%1はジェットスキーを持っている必要があります
 02:01=%1はウォータースポーツが好きではありません。
@@ -466,8 +465,8 @@
 03:51=地上で発見
 03:52=UNUSED
 03:53=タイプ40
-03:54=何かを構築
-03:55=ユーティリティ
+;03:54=何かを構築
+03:54=ユーティリティ
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=シンプルな手榴弾を使って敵を攻撃。|そのタイマーがゼロに達するとそれが爆発する。|1-5:セットグレネードのタイマー攻撃:より多くの電力をスローするようにホールド
@@ -524,8 +523,8 @@
 04:51=泥のボールを投げつけることによって自由なショットで取得します。|刺されは、ビット、豚をバックノックする。
 04:52=UNUSED
 04:53=あなたの仲間が単独で戦うために残しながら、時間と空間を介して冒険に出る。|いつでも返すように準備する、または突然死の場合、または、それらはすべて敗北しています。|免責事項。|あなたは一人である場合は、突然死で機能するか、キングである場合ではありません。
-04:54=INCOMPLETE
-04:55=スティッキーフレークのストリームをスプレー。|トンネルを封鎖、敵を埋める、ブリッジを構築します。|あなたが上の任意のを取得しないように注意してください!
+;04:54=INCOMPLETE
+04:54=スティッキーフレークのストリームをスプレー。|トンネルを封鎖、敵を埋める、ブリッジを構築します。|あなたが上の任意のを取得しないように注意してください!
 
 ; Game goal strings
 05:00=ゲームモード
--- a/share/hedgewars/Data/Locale/lt.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/lt.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -175,7 +175,6 @@
 02:01=%1 nori žaisti delfinus
 02:01=%1 nuejo i Aquaria
 02:01=%1 rado prarasta atlantijos miesta
-02:01=%1 bando pajimti pagrindini vaidmeni Bioshock 3
 02:01=Tavo šuniuko stylius galėtu panaudoti šiek tiek daugiau praktikos, %1
 02:01=%1 galėjo atsinešti laiva
 02:01=%1 nepatinka vandens sportas
@@ -447,7 +446,7 @@
 03:51=Rastas Ant Žemės
 03:52=UNUSED
 03:53=Tipas 40
-03:54=Pastatyk Ka Nors
+;03:54=Pastatyk Ka Nors
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Atakuok savo priešus su paprasta granata.|Ji sprogs kaip jos laikmatis pasieks nuli.|1-5: Nustatyk granatos laikmati|Ataka: Laikyk kad mestum stipriau
--- a/share/hedgewars/Data/Locale/missions_en.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/missions_en.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -43,8 +43,11 @@
 User_Mission_-_Rope_Knock_Challenge.name=Challenge: Rope Knocking
 User_Mission_-_Rope_Knock_Challenge.desc="Look behind you!"
 
+User_Mission_-_Nobody_Laugh.name=Mission: Nobody Laugh
+User_Mission_-_Nobody_Laugh.desc="This ain't no joke."
+
 User_Mission_-_RCPlane_Challenge.name=Challenge: RC Plane
 User_Mission_-_RCPlane_Challenge.desc="Feeling pretty confident, eh, flyboy?"
 
-portal.name= Mission: Portal training mission
+portal.name=Mission: Portal Mind Challenge
 portal.desc="Use the portal to move fast and far, use it to kill, use it with caution!"
--- a/share/hedgewars/Data/Locale/missions_fr.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/missions_fr.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -13,7 +13,7 @@
 Basic_Training_-_Sniper_Rifle.name=Initiation au Sniper
 Basic_Training_-_Sniper_Rifle.desc="Pan ! En pleine tête !"
 
-Basic_Training_-_Rope.name=Initiation à la Corde Ninja
+Basic_Training_-_Rope.name=Initiation au Grappin
 Basic_Training_-_Rope.desc="Bouge de là et Balance toi !"
 
 User_Mission_-_Dangerous_Ducklings.name=Mission: Canards dangereux
@@ -40,8 +40,11 @@
 User_Mission_-_The_Great_Escape.name=Mission: La grande évasion
 User_Mission_-_The_Great_Escape.desc="Tu pense que tu peux me capturer ?!"
 
-User_Mission_-_Rope_Knock_Challenge.name=Challenge: A coup de Corde Ninja
+User_Mission_-_Rope_Knock_Challenge.name=Challenge: A coup de Grappin
 User_Mission_-_Rope_Knock_Challenge.desc="Regarde derrière toi !"
 
 User_Mission_-_RCPlane_Challenge.name=Challenge: Avion télécommandé
-User_Mission_-_RCPlane_Challenge.desc="Plutôt confiant, hein, aviateur ?"
\ No newline at end of file
+User_Mission_-_RCPlane_Challenge.desc="Plutôt confiant, hein, aviateur ?"
+
+portal.name=Portal Casse Tête
+portal.desc="Utilisez le fusil à portail pour voyager loin et rapidemment ou pour tuer ! Utiliser avec prudence !"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/missions_pt.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,50 @@
+Basic_Training_-_Bazooka.name=Treino Básico com Bazuca
+Basic_Training_-_Bazooka.desc="Saber utilizar o vento para tua vantagem é a chave!"
+
+Basic_Training_-_Grenade.name=Treino Básico com Granada
+Basic_Training_-_Grenade.desc="Lembra-te, tens de retirar a cavilha E ATIRAR!"
+
+Basic_Training_-_Cluster_Bomb.name=Treino Básico com Bomba de Fragmentos
+Basic_Training_-_Cluster_Bomb.desc="Alguem está a precisar de um duche bem quente!"
+
+Basic_Training_-_Shotgun.name=Treino Básico com Caçadeira
+Basic_Training_-_Shotgun.desc="Dispara primeiro, questiona depois!"
+
+Basic_Training_-_Sniper_Rifle.name=Treino Básico com Sniper
+Basic_Training_-_Sniper_Rifle.desc="Boom, headshot!"
+
+Basic_Training_-_Rope.name=Treino Básico com Corda
+Basic_Training_-_Rope.desc="Get out there and swing!"
+
+User_Mission_-_Dangerous_Ducklings.name=Missão: Dangerous Ducklings
+User_Mission_-_Dangerous_Ducklings.desc="Alright, rookie! Time to put what we learned in Basic Training into practice!"
+
+User_Mission_-_Diver.name=Missão: Diver
+User_Mission_-_Diver.desc="Esta coisa do 'assalto anfíbio' é mais difícil do que parece..."
+
+User_Mission_-_Teamwork.name=Missão: Teamwork
+User_Mission_-_Teamwork.desc="Por vezes, o amor doi."
+
+User_Mission_-_Spooky_Tree.name=Missão: Spooky Tree
+User_Mission_-_Spooky_Tree.desc="Imensas caixas por todo o lado. Só espero que este pássaro não se esteja a sentir com fome."
+
+User_Mission_-_Bamboo_Thicket.name=Missão: Bamboo Thicket
+User_Mission_-_Bamboo_Thicket.desc="Death comes from above."
+
+User_Mission_-_That_Sinking_Feeling.name=Missão: That Sinking Feeling
+User_Mission_-_That_Sinking_Feeling.desc="A água está a subir rapidamente e o tempo é limitado. Muitos tentaram e falharam. Consegues salvá-los todos?"
+
+User_Mission_-_Newton_and_the_Hammock.name=Missão: Newton and the Hammock
+User_Mission_-_Newton_and_the_Hammock.desc="Remember hoglets: The velocity of a body remains constant unless the body is acted upon by an external force!"
+
+User_Mission_-_The_Great_Escape.name=Missão: The Great Escape
+User_Mission_-_The_Great_Escape.desc="Pensas que me consegues enjaular!?"
+
+User_Mission_-_Rope_Knock_Challenge.name=Desafio: Rope Knocking
+User_Mission_-_Rope_Knock_Challenge.desc="Look behind you!"
+
+User_Mission_-_RCPlane_Challenge.name=Desafio: Avião Telecomandado
+User_Mission_-_RCPlane_Challenge.desc="Feeling pretty confident, eh, flyboy?"
+
+portal.name=Missão: Treino com Portais
+portal.desc="Use the portal to move fast and far, use it to kill, use it with caution!"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/missions_tr.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,50 @@
+Basic_Training_-_Bazooka.name=Temel Roketatar Eğitimi
+Basic_Training_-_Bazooka.desc="Rüzgarı yararına kullanmak bir anahtar!"
+
+Basic_Training_-_Grenade.name=Temel Bomba Eğitimi
+Basic_Training_-_Grenade.desc="Unutma, pimi çek VE at!"
+
+Basic_Training_-_Cluster_Bomb.name=Temel Parça Tesirli Bomba Eğitimi
+Basic_Training_-_Cluster_Bomb.desc="Birinin sıcak duşa ihtiyacı var!"
+
+Basic_Training_-_Shotgun.name=Temel Tüfek Eğitimi
+Basic_Training_-_Shotgun.desc="Önce atış yap, soruları sonra sor!"
+
+Basic_Training_-_Sniper_Rifle.name=Temel Keskin Nişancı Tüfeği Eğitimi
+Basic_Training_-_Sniper_Rifle.desc="Bum, kafadan!"
+
+Basic_Training_-_Rope.name=Temel Halat Eğitimi
+Basic_Training_-_Rope.desc="Ordan çık ve sallan!"
+
+User_Mission_-_Dangerous_Ducklings.name=Görev: Tehlikeli Ördek Yavruları
+User_Mission_-_Dangerous_Ducklings.desc="Peki acemi! Şimdi Temel Eğitimde öğrendiklerini uygulamanın zamanı!"
+
+User_Mission_-_Diver.name=Görev: Dalıcı
+User_Mission_-_Diver.desc="Bu 'iki yönlü saldırı' göründüğünden daha zor..."
+
+User_Mission_-_Teamwork.name=Görev: Takım Çalışması
+User_Mission_-_Teamwork.desc="Bazen, aşk acıtır."
+
+User_Mission_-_Spooky_Tree.name=Görev: Korkak Ağaç
+User_Mission_-_Spooky_Tree.desc="Burada çok fazla kasa var. Eminim bu kuş aç değildir."
+
+User_Mission_-_Bamboo_Thicket.name=Görev: Bambu Ormanı
+User_Mission_-_Bamboo_Thicket.desc="Ölüm yukardan gelir."
+
+User_Mission_-_That_Sinking_Feeling.name=Görev: Batıyormuş Hissi
+User_Mission_-_That_Sinking_Feeling.desc="Su hızlıca yükseliyor ve zaman kısıtlı. Çoğu denedi ve kaybetti. Hepsini kurtarabilecek misin?"
+
+User_Mission_-_Newton_and_the_Hammock.name=Görev: Newton ve Hamak
+User_Mission_-_Newton_and_the_Hammock.desc="Kirpişleri unutma: Bir vücudun hızı harici bir kuvvetle itilmedikçe sabit kalır!"
+
+User_Mission_-_The_Great_Escape.name=Görev: Büyük Kaçış
+User_Mission_-_The_Great_Escape.desc="Beni hapsedebileceğini mi sanıyorsun!?"
+
+User_Mission_-_Rope_Knock_Challenge.name=Mücadele: Halat Vuruşu
+User_Mission_-_Rope_Knock_Challenge.desc="Arkana bak!"
+
+User_Mission_-_RCPlane_Challenge.name=Mücadele: RC Uçağı
+User_Mission_-_RCPlane_Challenge.desc="Çok emin görünüyorsun değil mi, uçan çocuk?"
+
+portal.name= Görev: Portal eğitim görevi
+portal.desc="Hızlı ve uzak yerlere hareket için portalı kullan, öldürmek için kullan, dikkatli kullan!"
--- a/share/hedgewars/Data/Locale/nl.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/nl.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -164,7 +164,6 @@
 02:01=%1 wants to play Ecco the dolphin
 02:01=%1 has gone to visit Aquaria
 02:01=%1 has found the lost city of Atlantis
-02:01=%1 aims for the lead role in Bioshock 3
 02:01=Your doggy paddle could use a little work, %1
 02:01=%1 should have brought a jet ski
 02:01=%1 doesn't like watersports
--- a/share/hedgewars/Data/Locale/pl.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/pl.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -174,7 +174,7 @@
 02:01=%1 śpi z rybami
 02:01=%1 uważa, że fizyka płynów w tej grze jest do bani!
 02:01=%1 wygląda na spragnionego
-02:01=Morze Ciebie wzywa, %1
+02:01=Morze Cię wzywa, %1
 02:01=%1 zaginął na morzu
 02:01=%1 powinien przynieść zestaw do nurkowania
 02:01=%1 ma pogrzeb na morzu
@@ -193,7 +193,6 @@
 02:01=%1 będzie grał w "Uwolnić Orkę"
 02:01=%1 szuka rybek do akwarium!
 02:01=%1 odnalazł Atlantydę!
-02:01=%1 chce być główną postacią w Bioshock 3
 02:01=Trzeba było się uczyć pływać...
 02:01=%1 powinien ze sobą zabrać narty wodne
 02:01=%1 nie lubi sportów wodnych
@@ -287,7 +286,7 @@
 02:05=Dobre życie... w formie skrzyneczki!
 02:05=Ktoś dzwonił po doktora?
 02:05=Świeże bandaże!
-02:05=To pomoże poczuć się Tobie lepiej
+02:05=Po tym poczujesz sie lepiej!
 02:05=Pomniejszy Eliksir Żywotności! Eeee... To chyba nie ta nazwa.
 02:05=Zbierz mnie!
 02:05=Zbierz to!
@@ -310,6 +309,7 @@
 02:05=W Hedgewars opieka zdrowotna naprawdę wymiata!
 02:05=Na zdrowie!
 02:05=Szczepionka!
+02:05=Ostatnio coś niewyraźnie wyglądasz. Weź tę apteczkę!
 
 ; New ammo crate
 02:06=Więcej broni!
@@ -540,8 +540,10 @@
 03:51=Znalezione na ziemi
 03:52=UNUSED
 03:53=Typ 40
-03:54=Zbuduj coś przydatnego
-03:55=Narzędzie
+;03:54=Zbuduj coś przydatnego
+03:54=Narzędzie
+03:55=Przełammy lody!
+03:56=Nie przytnij sobie igieł!
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Atakuj przeciwników zwykłym granatem.|Wybuchnie kiedy zapalnik skończy odliczanie.|1-5: Ustawia zapalnik|Atak: Przytrzymaj by rzucić z większą siłą
@@ -598,8 +600,10 @@
 04:51=Obrzuć kogoś błotem! Broń ta nie zadaje dużych|obrażeń ale może Gogol zepchnąć z krawędzi!|Atak: Przytrzymaj by strzelić z większą siłą
 04:52=UNUSED
 04:53=Wybierz się na podróż w czasie i przestrzeni|zostawiając inne jeże na polu walki.|Bądź przygotowany na powrót w dowolnym momencie.|Gdy rozpocznie się|Nagła Śmierć lub większość jeży zostanie wybita.|Uwaga. Nie zadziała podczas Nagłej Śmierci,|gdy jesteś sam lub jeśli jesteś Królem.
-04:54=INCOMPLETE
-04:55=Wystrzel strumień kleistej mazi.|Buduj mosty, zasypuj wrogów, zatykaj tunele.|Uważaj by nie zasypać samego siebie!
+;04:54=INCOMPLETE
+04:54=Wystrzel strumień kleistej mazi.|Buduj mosty, zasypuj wrogów, zatykaj tunele.|Uważaj by nie zasypać samego siebie!
+04:55=Epoka lodowcowa powraca!!|Zamroź jeże, uczyń podłoże śliskim lub zapobiegnij|utonięciu zamrażając wodę.|Atak: Strzał
+04:56=Rzuć w przeciwnika dwoma tasakami i zablokuj mu |drogę lub użyj ich do wspinaczki! Jednak uważaj! |Te tasaki są naprawdę ostre!|Atak: Przytrzymaj by rzucić z większą siłą (dwukrotnie)
 
 ; Game goal strings
 05:00=Ustawienia gry
--- a/share/hedgewars/Data/Locale/pt_BR.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/pt_BR.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -328,8 +328,8 @@
 03:51=Encontrei no chão
 03:52=Sem uso
 03:53=Tipo 40
-03:54=Constrói algo
-03:55=Utilidade
+;03:54=Constrói algo
+03:54=Utilidade
 
 
 ; Weapon Descriptions (use | as line breaks)
@@ -392,8 +392,8 @@
 04:51=Ganhe um tiro de graça, atirando uma bola de barro.|Fará com que o inimigo saia voando|e arde a vista.
 04:52=Sem Uso
 04:53=Viage através do tempo e espaço,|deixando seus camaradas na mão.|Esteja preparado para retornar a qualquer momento,|ou para a Morte Súbita se todos os aliados foram mortos.|Aviso. Não funciona na Morte Súbita,|se você estiversozinho, ou se você for o Rei.
-04:54=INCOMPLETO
-04:55=Atira um jorro de barro pegajoso.|Constrói pontes, enterra inimigos, sela túneis.|Cuidado para que não pegue em você!
+;04:54=INCOMPLETO
+04:54=Atira um jorro de barro pegajoso.|Constrói pontes, enterra inimigos, sela túneis.|Cuidado para que não pegue em você!
 
 ; Game goal strings
 05:00=Modos de Jogo
--- a/share/hedgewars/Data/Locale/pt_PT.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/pt_PT.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -5,19 +5,19 @@
 	["011101000"] = "011101000", -- A_Classic_Fairytale:dragon
 	["011101001"] = "011101001", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
 	["30 minutes later..."] = "30 minutos depois...", -- A_Classic_Fairytale:shadow
---      ["About a month ago, a cyborg came and told us that you're the cannibals!"] = "ácerca de\aproximadamente um mês atrás, um cyborg veio e disse-nos que voces é que eram os cabinais!", -- A_Classic_Fairytale:enemy
+	["About a month ago, a cyborg came and told us that you're the cannibals!"] = "À volta de um mês atrás, apareceu um cyborg e disse-nos que voces é que eram os cabinais!", -- A_Classic_Fairytale:enemy
 	["Accuracy Bonus!"] = "Bónus de Precisão!",
 	["Ace"] = "Ás", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
 	["Achievement Unlocked"] = "Proeza Desbloqueada", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
 	["???"] = "???", -- A_Classic_Fairytale:backstab
 	["A Classic Fairytale"] = "Um Clássico Conto de Fadas", -- A_Classic_Fairytale:first_blood
---      ["Actually, you aren't worthy of life! Take this..."] = "Pensando melhor, não mereçes viver\a vida que te foi dada\não mereces o ar que respiras! Toma\Pega isto...", -- A_Classic_Fairytale:shadow
+	["Actually, you aren't worthy of life! Take this..."] = "Pensando melhor, não mereçes viver! Toma isto...", -- A_Classic_Fairytale:shadow
 	["A cy-what?"] = "Um cy-quê?", -- A_Classic_Fairytale:enemy
 	["Adventurous"] = "Aventureiro", -- A_Classic_Fairytale:journey
 	["Africa"] = "África", -- Continental_supplies
---      ["After Leaks A Lot betrayed his tribe, he joined the cannibals..."] = "Depois do Leaks A Lot ter traido a sua tribo, ele juntou-se aos canibais...", -- A_Classic_Fairytale:first_blood
+	["After Leaks A Lot betrayed his tribe, he joined the cannibals..."] = "Depois do Leaks A Lot ter traído a sua tribo, ele juntou-se aos canibais...", -- A_Classic_Fairytale:first_blood
 	["After the shock caused by the enemy spy, Leaks A Lot and Dense Cloud went hunting to relax."] = "Depois do choque causado pelo espião inimigo, Leaks A Lot e Nuvem Densa foram caçar para relaxar.", -- A_Classic_Fairytale:shadow
---      ["Again with the 'cannibals' thing!"] = "Outra vez com a cena dos 'canibais'!", -- A_Classic_Fairytale:enemy
+	["Again with the 'cannibals' thing!"] = "Outra vez com a cena dos 'canibais'!", -- A_Classic_Fairytale:enemy
 	["a Hedgewars challenge"] = "um desafio Hedgewars", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
 	["a Hedgewars mini-game"] = "um mini-jogo Hedgewars", -- Space_Invasion, The_Specialists
 	["Aiming Practice"] = "Pratica a tua pontaria", --Bazooka, Shotgun, SniperRifle
@@ -31,27 +31,27 @@
 	["Ammo is reset at the end of your turn."] = "O armamento é reposto no fim do teu turno.",
 --      ["Ammo Maniac!"] = "",
 	["Ammo"] = "Munições",
---      ["And how am I alive?!"] = "E como (raio) estou eu ainda vivo?!", -- A_Classic_Fairytale:enemy
+	["And how am I alive?!"] = "E como raio estou eu vivo ainda?!", -- A_Classic_Fairytale:enemy
 --      ["And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."] = "", -- A_Classic_Fairytale:first_blood
 	["And so it began..."] = "E assim começou...", -- A_Classic_Fairytale:first_blood
---      ["...and so the cyborgs took over the world..."] = "...e então os cyborgs tomaram conta\apoderaram-se do mundo...", -- A_Classic_Fairytale:shadow
---      ["And so they discovered that cyborgs weren't invulnerable..."] = "", -- A_Classic_Fairytale:journey
---      ["And where's all the weed?"] = "E onde está a erva toda?", -- A_Classic_Fairytale:dragon
---      ["And you believed me? Oh, god, that's cute!"] = "E tu acreditaste em mim? Ai Jesus, tão fofo!", -- A_Classic_Fairytale:journey
+	["...and so the cyborgs took over the world..."] = "...e então os cyborgs apoderaram-se do mundo...", -- A_Classic_Fairytale:shadow
+	["And so they discovered that cyborgs weren't invulnerable..."] = "E então descobriram que os cyborgs não eram invulneráveis...", -- A_Classic_Fairytale:journey
+	["And where's all the weed?"] = "E onde está a erva toda?", -- A_Classic_Fairytale:dragon
+	["And you believed me? Oh, god, that's cute!"] = "E tu acreditaste em mim? Ai meu deus, tão fofo!", -- A_Classic_Fairytale:journey
 --      ["Anno 1032: [The explosion will make a strong push ~ wide range, wont affect hogs close to the target]"] = "", -- Continental_supplies
 	["Antarctica"] = "Antártica", -- Continental_supplies
 	["Are we there yet?"] = "Já chegámos?", -- A_Classic_Fairytale:shadow
 --      ["Are you accusing me of something?"] = "Estás a acusar-me de alguma coisa?", -- A_Classic_Fairytale:backstab
 --      ["Are you saying that many of us have died for your entertainment?"] = "Estás a tentar dizer-me que estas quantidade de nós morreu para o teu entertenimento?", -- A_Classic_Fairytale:enemy
 --      ["Artur Detour"] = "", -- A_Classic_Fairytale:queen
---      ["As a reward for your performance, here's some new technology!"] = "", -- A_Classic_Fairytale:dragon
+	["As a reward for your performance, here's some new technology!"] = "De forma a recompensar o teu desempenho, aqui tens alguma nova tecnologia!", -- A_Classic_Fairytale:dragon
 	["a shoppa minigame"] = "um minijogo shoppa", -- WxW
 	["Asia"] = "Ásia", -- Continental_supplies
 --      ["Assault Team"] = "", -- A_Classic_Fairytale:backstab
---      ["As the ammo is sparse, you might want to reuse ropes while mid-air.|"] = "Como o armamento\munições é escaço, podes querer re-usar as cordas enquanto no ar.|", -- A_Classic_Fairytale:dragon
+	["As the ammo is sparse, you might want to reuse ropes while mid-air.|"] = "Como o armamento está muito disperso, podes querer reutilizar a corda enquanto no ar.|", -- A_Classic_Fairytale:dragon
 --      ["As the challenge was completed, Leaks A Lot set foot on the ground..."] = "", -- A_Classic_Fairytale:first_blood
---      ["As you can see, there is no way to get on the other side!"] = "", -- A_Classic_Fairytale:dragon
---      ["Attack From Rope"] = "", -- WxW
+	["As you can see, there is no way to get on the other side!"] = "Como podes ver, não existe forma de passarmos para o outro lado!", -- A_Classic_Fairytale:dragon
+	["Attack From Rope"] = "Ataca Da Corda", -- WxW
 	["Australia"] = "Austrália", -- Continental_supplies
 --      ["Available points remaining: "] = "Pontos activos restantes: ",
 --      ["Back Breaker"] = "Parte Costas", -- A_Classic_Fairytale:backstab
@@ -136,7 +136,7 @@
 --      ["Corpse Thrower"] = "", -- A_Classic_Fairytale:epil
 --      ["Crates Left:"] = "", -- User_Mission_-_RCPlane_Challenge
 	["Cybernetic Empire"] = "Império Cibernético",
---      ["Cyborg. It's what the aliens call themselves."] = "Cyborg. É o que os extra terrestres se chamam a eles mesmos(errrr)", -- A_Classic_Fairytale:enemy
+--      ["Cyborg. It's what the aliens call themselves."] = "Cyborg. É o que os extra terrestres se chamam a eles mesmos(errrr)\autointitulam", -- A_Classic_Fairytale:enemy
 --      ["Dahmer"] = "", -- A_Classic_Fairytale:backstab
 --      ["DAMMIT, ROOKIE!"] = "",
 --      ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "",
@@ -147,7 +147,7 @@
 --      ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
 --      ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon selection menu"] = "", -- A_Classic_Fairytale:shadow
---      ["Demolition is fun!"] = "Demolir é divertido!",
+	["Demolition is fun!"] = "Demolir é divertido!",
 	["Dense Cloud"] = "Nuvem Densa", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
 	["Dense Cloud must have already told them everything..."] = "O Nuvem Densa já lhes deve ter dito tudo...", -- A_Classic_Fairytale:shadow
 --      ["Depleted Kamikaze!"] = "",
@@ -155,10 +155,10 @@
 --      ["Destroy invaders to score points."] = "",
 --      ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
---      ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
+	["Did anyone follow you?"] = "Foste seguido por alguém?", -- A_Classic_Fairytale:united
 --      ["Did you see him coming?"] = "", -- A_Classic_Fairytale:shadow
---      ["Did you warn the village?"] = "", -- A_Classic_Fairytale:shadow
---      ["Die, die, die!"] = "", -- A_Classic_Fairytale:dragon
+	["Did you warn the village?"] = "Avisaste a aldeia?", -- A_Classic_Fairytale:shadow
+	["Die, die, die!"] = "Morre, morre, morre!", -- A_Classic_Fairytale:dragon
 --      ["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"] = "", -- Continental_supplies
 --      ["Dist: "] = "", -- Space_Invasion
 --      ["Do not laugh, inexperienced one, for he speaks the truth!"] = "", -- A_Classic_Fairytale:backstab
@@ -324,11 +324,11 @@
 --      ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
 --      ["His arms are so strong!"] = "Os braços dele são tão fortes!", -- A_Classic_Fairytale:first_blood
 --      ["Hit Combo!"] = "",
---      ["Hmmm...actually...I didn't either."] = "", -- A_Classic_Fairytale:enemy
+	["Hmmm...actually...I didn't either."] = "Hmmm...na verdade...uu também não fazia ideia.", -- A_Classic_Fairytale:enemy
 	["Hmmm..."] = "Hmmm...",
 --      ["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."] = "", -- portal
 	["Hmmm...it's a draw. How unfortunate!"] = "Hmmm...é um empate. Que azar!", -- A_Classic_Fairytale:enemy
---      ["Hmmm...perhaps a little more time will help."] = "", -- A_Classic_Fairytale:first_blood
+	["Hmmm...perhaps a little more time will help."] = "Hmmm...talvez um pouco mais de tempo ajude.", -- A_Classic_Fairytale:first_blood
 --      ["Hogminator"] = "", -- A_Classic_Fairytale:family
 --      ["Hogs in sight!"] = "", -- Continental_supplies
 --      ["HOLY SHYTE!"] = "", -- Mutant
@@ -337,7 +337,7 @@
 --      ["Hostage Situation"] = "", -- A_Classic_Fairytale:family
 --      ["How can I ever repay you for saving my life?"] = "Como posso eu (possivelmente) recompensar-te por teres salvo a minha vida?", -- A_Classic_Fairytale:journey
 --      ["How come in a village full of warriors, it's up to me to save it?"] = "", -- A_Classic_Fairytale:dragon
---      ["How difficult would you like it to be?"] = "", -- A_Classic_Fairytale:first_blood
+	["How difficult would you like it to be?"] = "Quão difícil gostarias que fosse?", -- A_Classic_Fairytale:first_blood
 --      ["HOW DO THEY KNOW WHERE WE ARE???"] = "", -- A_Classic_Fairytale:united
 --      ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
 --      ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
@@ -779,7 +779,7 @@
 	["TIME: "] = "TEMPO: ",
 --      ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "", -- Basic_Training_-_Rope
 	["Toggle Shield"] = "Ligar\Desligar Escudo",
---      ["To help you, of course!"] = "", -- A_Classic_Fairytale:journey
+	["To help you, of course!"] = "Para te ajudar claro!", -- A_Classic_Fairytale:journey
 --      ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
 --      ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
 --      [" to save the village."] = "", -- A_Classic_Fairytale:dragon
@@ -848,14 +848,14 @@
 --      ["We have to unite and defeat those cylergs!"] = "Temos de nos unir e derrotar estes ciber-pernudos!", -- A_Classic_Fairytale:enemy
 	["Welcome, Leaks A Lot!"] = "Bem vindo, Leaks a Lot!", -- A_Classic_Fairytale:journey
 	["Well done."] = "Bom trabalho.",
---      ["We'll give you a problem then!"] = "", -- A_Classic_Fairytale:enemy
+	["We'll give you a problem then!"] = "Nós arranjamos-te um problema então!", -- A_Classic_Fairytale:enemy
 --      ["We'll spare your life for now!"] = "Vamos poupar a tua vida para ja!", -- A_Classic_Fairytale:backstab
 --      ["Well, that was a waste of time."] = "Bem, isto foi um desperdicio de tempo.", -- A_Classic_Fairytale:dragon
---      ["Well, well! Isn't that the cutest thing you've ever seen?"] = "", -- A_Classic_Fairytale:journey
---      ["Well, yes. This was a cyborg television show."] = "Bem, claro. Isto era um programa de televisão para cyborgs.", -- A_Classic_Fairytale:enemy
---      ["We made sure noone followed us!"] = "Certificamo-nos que ninguem nos seguiu!", -- A_Classic_Fairytale:backstab
---      ["We need to move!"] = "Temos de nos mover!", -- A_Classic_Fairytale:united
---      ["We need to prevent their arrival!"] = "Temos de prevenir que cheguem!", -- A_Classic_Fairytale:backstab
+--      ["Well, well! Isn't that the cutest thing you've ever seen?"] = "Bem, bem! Não isto é coisa mais fofa que já alguma vez viste?", -- A_Classic_Fairytale:journey
+	["Well, yes. This was a cyborg television show."] = "Bem, claro. Isto era um programa de televisão para cyborgs.", -- A_Classic_Fairytale:enemy
+	["We made sure noone followed us!"] = "Certificá-mo-nos que ninguém nos seguiu! que ninguem nos seguiu!", -- A_Classic_Fairytale:backstab
+	["We need to move!"] = "Temos de ir!", -- A_Classic_Fairytale:united
+--      ["We need to prevent their arrival!"] = "Temos de prevenir a sua chegada!", -- A_Classic_Fairytale:backstab
 	["We need to warn the village."] = "Temos de avisar a aldeia.", -- A_Classic_Fairytale:shadow
 --      ["We should head back to the village now."] = "", -- A_Classic_Fairytale:shadow
 --      ["We were trying to save her and we got lost."] = "Estavamos a tentar salva-la e acabamos por nos perder.", -- A_Classic_Fairytale:family
@@ -863,18 +863,18 @@
 --      ["What?! A cannibal? Here? There is no time to waste! Come, you are prepared."] = "O quê? Um canibal? Aqui? Não ha tempo a perder! Vem, estás preparado.", -- A_Classic_Fairytale:first_blood
 	["What a douche!"] = "Que otário!", -- A_Classic_Fairytale:enemy
 --      ["What am I gonna...eat, yo?"] = "", -- A_Classic_Fairytale:family
---      ["What are you doing at a distance so great, young one?"] = "O que estás a tão grande distancia, jovem?", -- A_Classic_Fairytale:first_blood
+--      ["What are you doing at a distance so great, young one?"] = "O que estás a fazer a tão grande distancia, jovem?", -- A_Classic_Fairytale:first_blood
 --      ["What are you doing? Let her go!"] = "Que estás a fazer? Larga-a!", -- A_Classic_Fairytale:journey
 	["What a ride!"] = "Que viagem!", -- A_Classic_Fairytale:shadow
 	["What a strange cave!"] = "Que caverna estranha!", -- A_Classic_Fairytale:dragon
---      ["What a strange feeling!"] = "", -- A_Classic_Fairytale:backstab
+--      ["What a strange feeling!"] = "Tenho um mau persentimento!", -- A_Classic_Fairytale:backstab
 	["What do my faulty eyes observe? A spy!"] = "O que vêm observam os meus defeituoso olhos? Um espião!", -- A_Classic_Fairytale:first_blood
 --      ["Whatever floats your boat..."] = "O que quer que seja que faz o teu barco flutuar... (preciso melhor expressão verdadeiramente portuguesa)", -- A_Classic_Fairytale:shadow
 	[" What !! For all of this struggle i just win some ... TIME o0"] = " O quê !! Por todo este esforço tudo o que ganho é ... TEMPO o0", -- portal
 --      ["What has "] = "Foi aquilo ", -- A_Classic_Fairytale:backstab
 	["What? Here? How did they find us?!"] = "O quê? Aqui? Como raio nos encontraram?!", -- A_Classic_Fairytale:backstab
 --      ["What is this place?"] = "O que é este sitio?\Que (raio de) sitio é este?", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy
---      ["What shall we do with the traitor?"] = "O que fazemos com o traidor?", -- A_Classic_Fairytale:backstab
+	["What shall we do with the traitor?"] = "O que fazemos com o traidor?", -- A_Classic_Fairytale:backstab
 --      ["WHAT?! You're the ones attacking us!"] = "O QUÊ?! Voces é que nos atacaram\estão a atacar!", -- A_Classic_Fairytale:enemy
 	["When?"] = "Quando?", -- A_Classic_Fairytale:enemy
 	["When I find it..."] = "Quando o encontrar...", -- A_Classic_Fairytale:dragon
--- a/share/hedgewars/Data/Locale/pt_PT.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/pt_PT.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -78,7 +78,7 @@
 01:16=Pouco
 01:17=Normal
 01:18=Muito
-01:19=Excessivo
+01:19=Imenso
 01:20=Ressalto: %1
 01:21=Áudio Silenciado
 
@@ -178,7 +178,6 @@
 02:01=%1 foi brincar com os golfinhos
 02:01=%1 foi visitar o Oceanário
 02:01=%1 encontrou a Atlântida perdida
-02:01=%1 inscreve-se no papel principal do Bioshock 3
 02:01=O teu pato insuflável ficou triste %1
 02:01=%1 devia ter comprado uma mota de água
 02:01=%1 não gosta de desportos náuticos
@@ -450,8 +449,8 @@
 03:51=Encontrado no chão
 03:52=UNUSED
 03:53=Modelo 40
-03:54=Constroi qualquer coisa
-03:55=Utilitário
+;03:54=Constroi qualquer coisa
+03:54=Utilitário
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Ataca os teus inimigos usando uma simples granada.|Explodirá quando o tempo chegar a zero.|1-5: Define o temporizador da granada|Ataque: Deixa premido para lançar com mais força
@@ -508,8 +507,8 @@
 04:51=Empurra um ouriço sem perder o turno|criando uma bola de lama tu mesmo!
 04:52=UNUSED
 04:53=Parte numa aventura pelo tempo e espaço,|deixando os teus colegas para se defenderem sozinhos.|Está preparado para regressar a qualquer altura,|para Morte Súbita ou se todos forem derrotados.|Atenção: Não funciona em Morte Súbita,|se estiveres sozinho, ou se fores o Rei.
-04:54=INCOMPLETO
-04:55=Aplica estas particulas de terreno em spray onde quiseres.|Constroi pontes, enterra inimigos ou fecha túneis.|Tem apenas cuidado, não o uses em ti proprio!
+;04:54=INCOMPLETO
+04:54=Aplica estas particulas de terreno em spray onde quiseres.|Constroi pontes, enterra inimigos ou fecha túneis.|Tem apenas cuidado, não o uses em ti proprio!
 
 ; Game goal strings
 05:00=Modos de Jogo
--- a/share/hedgewars/Data/Locale/ro.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/ro.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -175,7 +175,6 @@
 02:01=%1 wants to play Ecco the dolphin
 02:01=%1 has gone to visit Aquaria
 02:01=%1 has found the lost city of Atlantis
-02:01=%1 aims for the lead role in Bioshock 3
 02:01=Your doggy paddle could use a little work, %1
 02:01=%1 should have brought a jet ski
 02:01=%1 doesn't like watersports
@@ -447,8 +446,8 @@
 03:51=Found on the ground
 03:52=UNUSED
 03:53=Type 40
-03:54=Build something
-03:55=Utility
+;03:54=Build something
+03:54=Utility
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Attack your enemies using a simple grenade.|It will explode once its timer reaches zero.|1-5: Set grenade's timer|Attack: Hold to throw with more power
@@ -505,8 +504,8 @@
 04:51=Get in a free shot by hurling a ball of mud.|Stings a bit, and knocks hogs back.
 04:52=UNUSED
 04:53=Go on an adventure through time and space,|while leaving your comrades to fight on alone.|Be prepared to return at any time,|or for Sudden Death or if they are all defeated.|Disclaimer. Does not function in Sudden Death,|if you are alone, or if you are a King.
-04:54=INCOMPLETE
-04:55=Spray a stream of sticky flakes.|Build bridges, bury enemies, seal off tunnels.|Be careful you don't get any on you!
+;04:54=INCOMPLETE
+04:54=Spray a stream of sticky flakes.|Build bridges, bury enemies, seal off tunnels.|Be careful you don't get any on you!
 
 ; Game goal strings
 05:00=Game Modes
--- a/share/hedgewars/Data/Locale/ru.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/ru.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -177,7 +177,6 @@
 02:01=%1 хочет поиграть в Ecco the Dolphin
 02:01=%1 пошел посмотреть аквариум
 02:01=%1 нашёл потерянный город Атлантиды
-02:01=%1 стремится к главной роли в игре Bioshock 3
 02:01=Твое плаванье по-собачьи принесло мало пользы, %1
 02:01=%1 забыл взять гидроцикл
 02:01=%1 не любит водный спорт
@@ -450,8 +449,8 @@
 03:51=Найденный на земле
 03:52=Не используется
 03:53=Модель 40
-03:54=Построй что нибудь
-03:55=Полезная вещь
+;03:54=Построй что нибудь
+03:54=Полезная вещь
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Атакуй своих врагов обычной гранатой.|Она взорвется сразу, как только таймер|достигнет нуля.|1-5: Установить таймер гранаты|Атака: Удерживай для более дальнего броска
--- a/share/hedgewars/Data/Locale/sk.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/sk.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -269,8 +269,8 @@
 03:51=Nájdené na zemi
 03:52=NEPOUŽÍVANÉ
 03:53=Typ 40
-03:54=Postavte niečo
-03:55=Pomôcka
+;03:54=Postavte niečo
+03:54=Pomôcka
 
 ; Popis zbraní (ako oddeľovač riadkov použite |)
 04:00=Zaútočte na vašich nepriateľov obyčajným granátom.|Vybuchne vtedy, keď vyprší časomiera.|1‐5: Nastavenie časovača granátu|Útok: Držanie tlačidla zvyšuje silu hodu|
@@ -327,8 +327,8 @@
 04:51=Nemíňajte muníciu - hod blatom je zdarma.|Trošku štípe a dokáže ježka zhodiť.
 04:52=NEPOUŽITÉ
 04:53=Vyberte sa na cestu časom a priestorom|a nechajte vašich priateľov bojovať bez vás.|Buďte pripravený vrátiť sa kedykoľvek,|buď pri Náhlej smrti alebo keď sú všetci porazení.|Poznámka: Nefunguje počas Náhlej smrti,|ak ste sám alebo ak ste kráľom.
-04:54=NEKOMPLETNÉ
-04:55=Rozprášte prúd lepkavej hliny.|Postavte mosty, pochovajte nepriateľov,|zapečaťte tunely. Buďte|však opatrný a nezašpinte sa|od nej aj vy.
+;04:54=NEKOMPLETNÉ
+04:54=Rozprášte prúd lepkavej hliny.|Postavte mosty, pochovajte nepriateľov,|zapečaťte tunely. Buďte|však opatrný a nezašpinte sa|od nej aj vy.
 
 
 ; Reťazce pre ciele hry
--- a/share/hedgewars/Data/Locale/sv.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/sv.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -180,7 +180,6 @@
 02:01=%1 vill leka Ecco the dolphin
 02:01=%1 har gått för att besöka Aquaria
 02:01=%1 har funnit den förlorade staden Atlantis
-02:01=%1 siktar på huvudrollen i Bioshock 3
 02:01=Du borde träna på ditt hundsim, %1
 02:01=%1 skulle ha tagit med sig vattenskidor
 02:01=%1 gillar inte vattensporter
@@ -477,8 +476,8 @@
 03:51=Upphittad på marken
 03:52=UNUSED
 03:53=Typ 40
-03:54=Bygg något
-03:55=Verktyg
+;03:54=Bygg något
+03:54=Verktyg
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Attackera fienden med en enkel granat.|Exploderar när tiden når noll.|1-5: Ställ in granatens tid|Attack: Håll ner för att kasta med mer kraft
@@ -535,8 +534,8 @@
 04:51=Få till en gratisträff genom att kasta en boll med|jord. Känns lite gran, och knuffar tillbaka|igelkottar.
 04:52=UNUSED
 04:53=Åk på ett äventyr genom tid och rymd, medan dina|kamrater blir kvar själva att slåss. Var beredd|att komma tillbaka när som helst, eller till|Sudden Death eller om de andra blir besegrade.|Varning. Fungerar inte under Sudden Death, om du|är ensam, eller om du är en kung.
-04:54=INCOMPLETE
-04:55=Spruta en ström av fästande jord.|Bygg broar, gräv ner fienden, stäng igen tunnlar.|Var försiktig så att du inte får något på dig!
+;04:54=INCOMPLETE
+04:54=Spruta en ström av fästande jord.|Bygg broar, gräv ner fienden, stäng igen tunnlar.|Var försiktig så att du inte får något på dig!
 
 ; Game goal strings
 05:00=Spellägen
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/tr.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,989 @@
+locale = {
+--      [":("] = "",
+--      ["!!!"] = "",
+--      ["..."] = "",
+--      ["011101000"] = "", -- A_Classic_Fairytale:dragon
+--      ["011101001"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
+	["30 minutes later..."] = "30 dakika sonra...", -- A_Classic_Fairytale:shadow
+--      ["About a month ago, a cyborg came and told us that you're the cannibals!"] = "", -- A_Classic_Fairytale:enemy
+	["Accuracy Bonus!"] = "Güzel Nişan Bonusu!",
+--      ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
+--      ["Achievement Unlocked"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
+--      ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
+--      ["???"] = "", -- A_Classic_Fairytale:backstab
+--      ["Actually, you aren't worthy of life! Take this..."] = "", -- A_Classic_Fairytale:shadow
+--      ["A cy-what?"] = "", -- A_Classic_Fairytale:enemy
+--      ["Adventurous"] = "", -- A_Classic_Fairytale:journey
+--      ["Africa"] = "", -- Continental_supplies
+--      ["After Leaks A Lot betrayed his tribe, he joined the cannibals..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["After the shock caused by the enemy spy, Leaks A Lot and Dense Cloud went hunting to relax."] = "", -- A_Classic_Fairytale:shadow
+--      ["Again with the 'cannibals' thing!"] = "", -- A_Classic_Fairytale:enemy
+--      ["a Hedgewars challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
+	["a Hedgewars mini-game"] = "Hedgewars mini oyunu", -- Space_Invasion, The_Specialists
+	["Aiming Practice"] = "Atış Eğitimi", --Bazooka, Shotgun, SniperRifle
+--      ["A leap in a leap"] = "", -- A_Classic_Fairytale:first_blood
+--      ["A little gift from the cyborgs"] = "", -- A_Classic_Fairytale:shadow
+--      ["All gone...everything!"] = "", -- A_Classic_Fairytale:enemy
+--      ["All right, we just need to get to the other side of the island!"] = "", -- A_Classic_Fairytale:journey
+--      ["All walls touched!"] = "", -- WxW
+	["Ammo Depleted!"] = "Munition erschöpft!",
+	["ammo extended!"] = "Munition aufgestockt!",
+	["Ammo is reset at the end of your turn."] = "Munition wird am Ende des Spielzuges zurückgesetzt.",
+	["Ammo Maniac!"] = "Munitionsverrückter!",
+	["Ammo"] = "Mermi",
+--      ["And how am I alive?!"] = "", -- A_Classic_Fairytale:enemy
+--      ["And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["And so it began..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["...and so the cyborgs took over the world..."] = "", -- A_Classic_Fairytale:shadow
+--      ["And so they discovered that cyborgs weren't invulnerable..."] = "", -- A_Classic_Fairytale:journey
+--      ["And where's all the weed?"] = "", -- A_Classic_Fairytale:dragon
+--      ["And you believed me? Oh, god, that's cute!"] = "", -- A_Classic_Fairytale:journey
+--      ["Anno 1032: [The explosion will make a strong push ~ wide range, wont affect hogs close to the target]"] = "", -- Continental_supplies
+--      ["Antarctica"] = "", -- Continental_supplies
+--      ["Are we there yet?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Are you accusing me of something?"] = "", -- A_Classic_Fairytale:backstab
+--      ["Are you saying that many of us have died for your entertainment?"] = "", -- A_Classic_Fairytale:enemy
+--      ["Artur Detour"] = "", -- A_Classic_Fairytale:queen
+--      ["As a reward for your performance, here's some new technology!"] = "", -- A_Classic_Fairytale:dragon
+--      ["a shoppa minigame"] = "", -- WxW
+--      ["Asia"] = "", -- Continental_supplies
+--      ["Assault Team"] = "", -- A_Classic_Fairytale:backstab
+--      ["As the ammo is sparse, you might want to reuse ropes while mid-air.|"] = "", -- A_Classic_Fairytale:dragon
+--      ["As the challenge was completed, Leaks A Lot set foot on the ground..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["As you can see, there is no way to get on the other side!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Attack From Rope"] = "", -- WxW
+--      ["Australia"] = "", -- Continental_supplies
+	["Available points remaining: "] = "Verfügbare Punkte verbleibend:",
+--      ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
+--      ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
+--      ["[Backspace]"] = "",
+--      ["Backstab"] = "", -- A_Classic_Fairytale:backstab
+--      ["Bad Team"] = "", -- User_Mission_-_The_Great_Escape
+--      ["Bamboo Thicket"] = "",
+	["Barrel Eater!"] = "Fassfresser!",
+	["Barrel Launcher"] = "Fasswerfer",
+--      ["Baseballbat"] = "", -- Continental_supplies
+	["Bat balls at your enemies and|push them into the sea!"] = "Schlage Bälle auf deine Widersacher|und lass sie ins Meer fallen!",
+	["Bat your opponents through the|baskets and out of the map!"] = "Schlage deine Widersacher durch|die Körbe und aus der Karte hinaus!",
+	["Bazooka Training"] = "Bazooka-Training",
+--      ["Beep Loopers"] = "", -- A_Classic_Fairytale:queen
+	["Best laps per team: "] = "Beste Rundenzeiten pro Team: ",
+	["Best Team Times: "] = "Beste Team-Zeiten: ",
+--      ["Beware, though! If you are slow, you die!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Biomechanic Team"] = "", -- A_Classic_Fairytale:family
+--      ["Blender"] = "", -- A_Classic_Fairytale:family
+--      ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
+--      ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
+--      ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
+	["Bloody Rookies"] = "Blutige Anfänger", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
+--      ["Bone Jackson"] = "", -- A_Classic_Fairytale:backstab
+--      ["Bonely"] = "", -- A_Classic_Fairytale:shadow
+	["Boom!"] = "Bumm!",
+	["BOOM!"] = "KABUMM!",
+	["Boss defeated!"] = "Boss wurde besiegt!",
+	["Boss Slayer!"] = "Boss-Töter!",
+--      ["Brain Blower"] = "", -- A_Classic_Fairytale:journey
+--      ["Brainiac"] = "", -- A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
+--      ["Brainila"] = "", -- A_Classic_Fairytale:united
+--      ["Brain Stu"] = "", -- A_Classic_Fairytale:united
+--      ["Brain Teaser"] = "", -- A_Classic_Fairytale:backstab
+--      ["Brutal Lily"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil
+--      ["Brutus"] = "", -- A_Classic_Fairytale:backstab
+    ["Build a track and race."] = "Konstruiere eine Strecke und mach ein Wettrennen.",
+--      ["Bullseye"] = "", -- A_Classic_Fairytale:dragon
+--      ["But it proved to be no easy task!"] = "", -- A_Classic_Fairytale:dragon
+--      ["But that's impossible!"] = "", -- A_Classic_Fairytale:backstab
+--      ["But the ones alive are stronger in their heart!"] = "", -- A_Classic_Fairytale:enemy
+--      ["But...we died!"] = "", -- A_Classic_Fairytale:backstab
+--      ["But where can we go?"] = "", -- A_Classic_Fairytale:united
+--      ["But why would they help us?"] = "", -- A_Classic_Fairytale:backstab
+--      ["But you're cannibals. It's what you do."] = "", -- A_Classic_Fairytale:enemy
+--      ["But you said you'd let her go!"] = "", -- A_Classic_Fairytale:journey
+--      ["Call me Beep! Well, 'cause I'm such a nice...person!"] = "", -- A_Classic_Fairytale:family
+--      ["Cannibals"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood
+--      ["Cannibal Sentry"] = "", -- A_Classic_Fairytale:journey
+--      ["Cannibals?! You're the cannibals!"] = "", -- A_Classic_Fairytale:enemy
+	["CAPTURE THE FLAG"] = "EROBERE DIE FAHNE",
+	["Careless"] = "Achtlos",
+--      ["Carol"] = "", -- A_Classic_Fairytale:family
+--      ["CHALLENGE COMPLETE"] = "", -- User_Mission_-_RCPlane_Challenge
+	["Change Weapon"] = "Waffenwechsel",
+--      ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
+	["Clumsy"] = "Hoppla",
+--      ["Cluster Bomb MASTER!"] = "", -- Basic_Training_-_Cluster_Bomb
+--      ["Cluster Bomb Training"] = "", -- Basic_Training_-_Cluster_Bomb
+	["Codename: Teamwork"] = "Code-Name: Teamwork",
+--      ["Collateral Damage"] = "", -- A_Classic_Fairytale:journey
+--      ["Collateral Damage II"] = "", -- A_Classic_Fairytale:journey
+--      ["Collect all the crates, but remember, our time in this life is limited!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Come closer, so that your training may continue!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Compete to use as few planes as possible!"] = "", -- User_Mission_-_RCPlane_Challenge
+	["Complete the track as fast as you can!"] = "Durchlaufe die Strecke so schnell du kannst!",
+--      ["COMPLETION TIME"] = "", -- User_Mission_-_Rope_Knock_Challenge
+--      ["Configuration accepted."] = "", -- WxW
+--      ["Congratulations"] = "", -- Basic_Training_-_Rope
+	["Congratulations!"] = "Gratulation!",
+--      ["Congratulations! You needed only half of time|to eliminate all targets."] = "", -- Basic_Training_-_Cluster_Bomb
+--      ["Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"] = "", -- Basic_Training_-_Rope
+	["Congratulations! You've eliminated all targets|within the allowed time frame."] = "Gratulation! Du hast alle Ziele innerhalb der|verfügbaren Zeit ausgeschaltet.", --Bazooka, Shotgun, SniperRifle
+--      ["Continental supplies"] = "", -- Continental_supplies
+	["Control pillars to score points."] = "Kontrolliere die Säulen um Punkte zu erhalten.",
+--      ["Corporationals"] = "", -- A_Classic_Fairytale:queen
+--      ["Corpsemonger"] = "", -- A_Classic_Fairytale:shadow
+--      ["Corpse Thrower"] = "", -- A_Classic_Fairytale:epil
+--      ["Crates Left:"] = "", -- User_Mission_-_RCPlane_Challenge
+	["Cybernetic Empire"] = "Kybernetisches Imperium",
+--      ["Cyborg. It's what the aliens call themselves."] = "", -- A_Classic_Fairytale:enemy
+--      ["Dahmer"] = "", -- A_Classic_Fairytale:backstab
+	["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "VERDAMMT, REKRUT! RUNTER VON MEINEM KOPF!",
+	["DAMMIT, ROOKIE!"] = "VERDAMMT, REKRUT!",
+--      ["Dangerous Ducklings"] = "",
+	["Deadweight"] = "Gravitus",
+--      ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
+--      ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
+--      ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
+--      ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon selection menu"] = "", -- A_Classic_Fairytale:shadow
+	["Demolition is fun!"] = "Zerstörung macht Spaß!",
+--      ["Dense Cloud"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
+--      ["Dense Cloud must have already told them everything..."] = "", -- A_Classic_Fairytale:shadow
+	["Depleted Kamikaze!"] = "Munitionsloses Kamikaze!",
+--      ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
+	["Destroy invaders to score points."] = "Zerstöre die Angreifer um Punkte zu erhalten.",
+--      ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
+--      ["Did you see him coming?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Did you warn the village?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Die, die, die!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"] = "", -- Continental_supplies
+--      ["Dist: "] = "", -- Space_Invasion
+--      ["Do not laugh, inexperienced one, for he speaks the truth!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Do the deed"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Double Kill!"] = "",
+--      ["DOUBLE KILL"] = "", -- Mutant
+--      ["Do you have any idea how valuable grass is?"] = "", -- A_Classic_Fairytale:enemy
+--      ["Do you think you're some kind of god?"] = "", -- A_Classic_Fairytale:enemy
+--      ["Dragon's Lair"] = "", -- A_Classic_Fairytale:dragon
+--      ["Drills"] = "", -- A_Classic_Fairytale:backstab
+--      ["Drone Hunter!"] = "",
+--      ["Drop a bomb: [drop some heroic wind that will turn into a bomb on impact]"] = "", -- Continental_supplies
+	["Drowner"] = "Absäufer",
+--      ["Dude, all the plants are gone!"] = "", -- A_Classic_Fairytale:family
+--      ["Dude, can you see Ramon and Spiky?"] = "", -- A_Classic_Fairytale:journey
+--      ["Dude, that's so cool!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Dude, we really need a new shaman..."] = "", -- A_Classic_Fairytale:shadow
+--      ["Dude, what's this place?!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Dude, where are we?"] = "", -- A_Classic_Fairytale:backstab
+--      ["Dude, wow! I just had the weirdest high!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Duration"] = "", -- Continental_supplies
+--      ["Dust storm: [Deals 20 damage to all enemies in the circle]"] = "", -- Continental_supplies
+	["Each turn you get 1-3 random weapons"] = "Du bekommst jede Runde 1-3 zufällig gewählte Waffen",
+	["Each turn you get one random weapon"] = "Du bekommst jede Runde eine zufällig gewählte Waffe.",
+--      ["Eagle Eye"] = "", -- A_Classic_Fairytale:backstab
+--      ["Eagle Eye: [Blink to the impact ~ one shot]"] = "", -- Continental_supplies
+--      ["Ear Sniffer"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:epil
+--      ["Elderbot"] = "", -- A_Classic_Fairytale:family
+--      ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
+	["Eliminate all enemies"] = "Vernichte alle Gegner",
+	["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Eliminiere alle Ziele bevor die Zeit ausläuft.|Du hast in dieser Mission unbegrenzte Munition.", --Bazooka, Shotgun, SniperRifle
+--      ["Eliminate enemy hogs and take their weapons."] = "", -- Highlander
+	["Eliminate Poison before the time runs out"] = "Neutralisiere das Gift bevor die Zeit abgelaufen ist",
+	["Eliminate the Blue Team"] = "Lösche das Blaue Team aus",
+	["Eliminate the enemy before the time runs out"] = "Vernichte den Feind bevor die Zeit abgelaufen ist", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
+	["Eliminate the enemy hogs to win."] = "Vernichte alle gegnerischen Igel um zu gewinnen",
+	["Eliminate the enemy specialists."] = "Vernichte die gegnerischen Spezialisten",
+	["- Eliminate Unit 3378 |- Feeble Resistance must survive"] = "- Vernichte Einheit 3378 |  Kraftloser Widerstand muss überleben",
+--      ["Elmo"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["Energetic Engineer"] = "",
+	["Enjoy the swim..."] = "Viel Spaß beim Schwimmen...",
+--      ["[Enter]"] = "",
+--      ["Europe"] = "", -- Continental_supplies
+--      [" ever done to you?!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Everyone knows this."] = "", -- A_Classic_Fairytale:enemy
+--      ["Every single time!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Everything looks OK..."] = "", -- A_Classic_Fairytale:enemy
+--      ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
+--      ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
+--      ["INSANITY"] = "", -- Mutant
+--      ["Family Reunion"] = "", -- A_Classic_Fairytale:family
+	["Fastest lap: "] = "Schnellste Runde: ",
+	["Feeble Resistance"] = "Kraftloser Widerstand",
+--      ["Fell From Grace"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["Fell From Heaven"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen
+--      ["Fell From Heaven is the best! Fell From Heaven is the greatest!"] = "", -- A_Classic_Fairytale:family
+--      ["Femur Lover"] = "", -- A_Classic_Fairytale:shadow
+--      ["Fierce Competition!"] = "", -- Space_Invasion
+--      ["Fiery Water"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
+--      ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Fire a mine: [Does what it says ~ Cant be dropped close to an enemy ~ 1 sec]"] = "", -- Continental_supplies
+	["Fire"] = "Feuer",
+--      ["First aid kits?!"] = "", -- A_Classic_Fairytale:united
+--      ["First Blood"] = "", -- A_Classic_Fairytale:first_blood
+--      ["FIRST BLOOD MUTATES"] = "", -- Mutant
+--      ["First Steps"] = "", -- A_Classic_Fairytale:first_blood
+	["Flag captured!"] = "Fahne erobert!",
+	["Flag respawned!"] = "Fahne wieder erschienen!",
+	["Flag returned!"] = "Fahne zurückgebracht!",
+	["Flags, and their home base will be placed where each team ends their first turn."] = "Fahnen und deren Heimatstandort werden dort plaziert wo jedes Team deren ersten Zug beendet.",
+--      ["Flamer"] = "",
+--      ["Flaming Worm"] = "", -- A_Classic_Fairytale:backstab
+--      ["Flare: [fire up some bombs depending on hogs depending on hogs in the circle"] = "", -- Continental_supplies
+--      ["Flesh for Brainz"] = "", -- A_Classic_Fairytale:journey
+--      ["For improved features/stability, play 0.9.18+"] = "", -- WxW
+--      ["Free Dense Cloud and continue the mission!"] = "", -- A_Classic_Fairytale:journey
+--      ["Friendly Fire!"] = "",
+	["fuel extended!"] = "Treibstoff aus!",
+	["GAME BEGUN!!!"] = "SPIEL GESTARTET!!!",
+--      ["Game Modifiers: "] = "", -- The_Specialists
+	["GAME OVER!"] = "SPIEL ZU ENDE!",
+	["Game Started!"] = "Spiel Gestartet!]",
+--      ["Game? Was this a game to you?!"] = "", -- A_Classic_Fairytale:enemy
+--      ["GasBomb"] = "", -- Continental_supplies
+--      ["Gas Gargler"] = "", -- A_Classic_Fairytale:queen
+--      ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
+	["Get on over there and take him out!"] = "Mach, dass du hinüber kommst und schalte ihn aus!",
+--      ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Get out of there!"] = "", -- User_Mission_-_The_Great_Escape
+--      ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Get the crate on the other side of the island!|"] = "", -- A_Classic_Fairytale:journey
+--      ["Get to the target using your rope! |Controls: Left & Right to swing the rope - Up & Down to Contract and Expand!"] = "", -- Basic_Training_-_Rope
+--      ["Get your teammates out of their natural prison and save the princess!|Hint: Drilling holes should solve everything.|Hint: It might be a good idea to place a girder before starting to drill. Just saying.|Hint: All your hedgehogs need to be above the marked height!|Hint: Leaks A Lot needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
+--      ["GG!"] = "", -- User_Mission_-_Rope_Knock_Challenge
+--      ["Gimme Bones"] = "", -- A_Classic_Fairytale:backstab
+--      ["Glark"] = "", -- A_Classic_Fairytale:shadow
+	["Goal"] = "Ziel",
+	["GO! GO! GO!"] = "Bewegung, Bewegung, Bewegung!",
+	["Good birdy......"] = "Braver Vogel......",
+--      ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
+--      ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
+--      ["Good luck...or else!"] = "", -- A_Classic_Fairytale:journey
+	["Good luck out there!"] = "Viel Glück da draußen!",
+	["Good so far!"] = "Gut soweit!",
+	["Good to go!"] = "Startklar!",
+--      ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Gorkij"] = "", -- A_Classic_Fairytale:journey
+--      ["Go surf!"] = "", -- WxW
+	["GOTCHA!"] = "ERWISCHT!",
+	["Grab Mines/Explosives"] = "Sammle Minen/Fässer",
+--      ["Great choice, Steve! Mind if I call you that?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"] = "", -- Basic_Training_-_Rope
+--      ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
+--      ["Green lipstick bullet: [Is poisonous]"] = "", -- Continental_supplies
+--      ["Greetings, "] = "", -- A_Classic_Fairytale:dragon
+--      ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Grenade Training"] = "", -- Basic_Training_-_Grenade
+--      ["Grenadiers"] = "", -- Basic_Training_-_Grenade
+--      ["Guys, do you think there's more of them?"] = "", -- A_Classic_Fairytale:backstab
+--      ["HAHA!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Haha!"] = "", -- A_Classic_Fairytale:united
+--      ["Hahahaha!"] = "",
+	["Haha, now THAT would be something!"] = "Haha, na DAS wär ja was!",
+--      ["Hannibal"] = "", -- A_Classic_Fairytale:epil
+	["Hapless Hogs"] = "Glücklose Igel",
+	[" Hapless Hogs left!"] = " Glücklose Igel verbleibend!",
+
+--      [" HAS MUTATED"] = "", -- Mutant
+--      ["Hatless Jerry"] = "", -- A_Classic_Fairytale:queen
+--      ["Have no illusions, your tribe is dead, indifferent of your choice."] = "", -- A_Classic_Fairytale:shadow
+--      ["Have we ever attacked you first?"] = "", -- A_Classic_Fairytale:enemy
+	["Health crates extend your time."] = "Medipacks verlängern deine Zeit.",
+--      ["Heavy Cannfantry"] = "", -- A_Classic_Fairytale:united
+	["Heavy"] = "Schwierig",
+--      ["Hedge-cogs"] = "", -- A_Classic_Fairytale:enemy
+--      ["Hedgehog projectile: [fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
+	["Hedgewars-Basketball"] = "Hedgewars-Basketball",
+	["Hedgewars-Knockball"] = "Hedgewars-Knockball",
+--      ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
+	["Heh, it's not that bad."] = "Hehe, so schlimm ist es nicht.",
+--      ["Hello again, "] = "", -- A_Classic_Fairytale:family
+--      ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
+--      ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
+--      ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
+--      ["He moves like an eagle in the sky."] = "", -- A_Classic_Fairytale:first_blood
+--      ["He must be in the village already."] = "", -- A_Classic_Fairytale:journey
+--      ["Here, let me help you!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Here, let me help you save her!"] = "", -- A_Classic_Fairytale:family
+--      ["Here...pick your weapon!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
+--      ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Hey guys!"] = "", -- A_Classic_Fairytale:united
+--      ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
+--      ["HIGHLANDER"] = "", -- Highlander
+--      ["Hightime"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."] = "", -- A_Classic_Fairytale:journey
+--      ["Hint: Select the LowGravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
+--      ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
+--      ["His arms are so strong!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Hit Combo!"] = "",
+--      ["Hmmm..."] = "",
+--      ["Hmmm...actually...I didn't either."] = "", -- A_Classic_Fairytale:enemy
+--      ["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."] = "", -- portal
+--      ["Hmmm...it's a draw. How unfortunate!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Hmmm...perhaps a little more time will help."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Hogminator"] = "", -- A_Classic_Fairytale:family
+--      ["Hogs in sight!"] = "", -- Continental_supplies
+--      ["HOLY SHYTE!"] = "", -- Mutant
+--      ["Honest Lee"] = "", -- A_Classic_Fairytale:enemy
+	["Hooray!"] = "Hurra!",
+--      ["Hostage Situation"] = "", -- A_Classic_Fairytale:family
+--      ["How can I ever repay you for saving my life?"] = "", -- A_Classic_Fairytale:journey
+--      ["How come in a village full of warriors, it's up to me to save it?"] = "", -- A_Classic_Fairytale:dragon
+--      ["How difficult would you like it to be?"] = "", -- A_Classic_Fairytale:first_blood
+--      ["HOW DO THEY KNOW WHERE WE ARE???"] = "", -- A_Classic_Fairytale:united
+--      ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
+--      ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
+--      ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
+--      [" HP"] = "", -- Mutant
+	["Hunter"] = "Jäger", --Bazooka, Shotgun, SniperRifle
+--      ["I believe there's more of them."] = "", -- A_Classic_Fairytale:backstab
+--      ["I can see you have been training diligently."] = "", -- A_Classic_Fairytale:first_blood
+--      ["I can't believe it worked!"] = "", -- A_Classic_Fairytale:shadow
+--      ["I can't believe this!"] = "", -- A_Classic_Fairytale:enemy
+--      ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
+--      ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
+--      ["I'd better get going myself."] = "", -- A_Classic_Fairytale:journey
+--      ["I didn't until about a month ago."] = "", -- A_Classic_Fairytale:enemy
+--      ["I don't know how you did that.. But good work! |The next one should be easy as cake for you!"] = "", -- Basic_Training_-_Rope
+--      ["I feel something...a place! They will arrive near the circles!"] = "", -- A_Classic_Fairytale:backstab
+--      ["If only I had a way..."] = "", -- A_Classic_Fairytale:backstab
+--      ["If only I were given a chance to explain my being here..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["I forgot that she's the daughter of the chief, too..."] = "", -- A_Classic_Fairytale:backstab
+--      ["If they try coming here, they can have a taste of my delicious knuckles!"] = "", -- A_Classic_Fairytale:united
+--      ["If you agree to provide the information we need, you will be spared!"] = "", -- A_Classic_Fairytale:shadow
+--      ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey
+--      ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow
+--      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
+--      ["If you know what I mean..."] = "", -- A_Classic_Fairytale:shadow
+--      ["If you say so..."] = "", -- A_Classic_Fairytale:shadow
+
+--      ["I guess you'll have to kill them."] = "", -- A_Classic_Fairytale:dragon
+--      ["I have come to make you an offering..."] = "", -- A_Classic_Fairytale:shadow
+--      ["I have no idea where that mole disappeared...Can you see it?"] = "", -- A_Classic_Fairytale:shadow
+--      ["I have to follow that alien."] = "", -- A_Classic_Fairytale:backstab
+--      ["I have to get back to the village!"] = "", -- A_Classic_Fairytale:shadow
+--      ["I hope you are prepared for a small challenge, young one."] = "", -- A_Classic_Fairytale:first_blood
+--      ["I just don't want to sink to your level."] = "", -- A_Classic_Fairytale:backstab
+--      ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
+--      ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
+--      ["I'll hold them off while you return to the village!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Imagine those targets are the wolves that killed your parents! Take your anger out on them!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["I'm...alive? How? Why?"] = "", -- A_Classic_Fairytale:backstab
+--      ["I'm a ninja."] = "", -- A_Classic_Fairytale:dragon
+--      ["I marked the place of their arrival. You're welcome!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I'm certain that this is a misunderstanding, fellow hedgehogs!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["I mean, none of you ceased to live."] = "", -- A_Classic_Fairytale:enemy
+--      ["I'm getting old for this!"] = "", -- A_Classic_Fairytale:family
+--      ["I'm getting thirsty..."] = "", -- A_Classic_Fairytale:family
+--      ["I'm here to help you rescue her."] = "", -- A_Classic_Fairytale:family
+--      ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
+--      ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["I'm so scared!"] = "", -- A_Classic_Fairytale:united
+--      ["Incredible..."] = "", -- A_Classic_Fairytale:shadow
+--      ["I need to find the others!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I need to get to the other side of this island, fast!"] = "", -- A_Classic_Fairytale:journey
+--      ["I need to move the tribe!"] = "", -- A_Classic_Fairytale:united
+--      ["I need to prevent their arrival!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I need to warn the others."] = "", -- A_Classic_Fairytale:backstab
+--      ["In fact, you are the only one that's been acting strangely."] = "", -- A_Classic_Fairytale:backstab
+--      ["In order to get to the other side, you need to collect the crates first.|"] = "", -- A_Classic_Fairytale:dragon
+	["Instructor"] = "Ausbilder", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings
+--      ["Interesting idea, haha!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Interesting! Last time you said you killed a cannibal!"] = "", -- A_Classic_Fairytale:backstab
+--      ["In the meantime, take these and return to your \"friend\"!"] = "", -- A_Classic_Fairytale:shadow
+	["invaders destroyed"] = "Angreifer zerstört",
+--      ["Invasion"] = "", -- A_Classic_Fairytale:united
+--      ["I saw it with my own eyes!"] = "", -- A_Classic_Fairytale:shadow
+--      ["I see..."] = "", -- A_Classic_Fairytale:shadow
+--      ["I see you have already taken the leap of faith."] = "", -- A_Classic_Fairytale:first_blood
+--      ["I see you would like his punishment to be more...personal..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["I sense another wave of cannibals heading my way!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I sense another wave of cannibals heading our way!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I shouldn't have drunk that last pint."] = "", -- A_Classic_Fairytale:dragon
+--      ["Is this place in my head?"] = "", -- A_Classic_Fairytale:dragon
+--      ["It doesn't matter. I won't let that alien hurt my daughter!"] = "", -- A_Classic_Fairytale:dragon
+--      ["I think we are safe here."] = "", -- A_Classic_Fairytale:backstab
+--      ["I thought their shaman died when he tried our medicine!"] = "", -- A_Classic_Fairytale:shadow
+--      ["It is called 'Hogs of Steel'."] = "", -- A_Classic_Fairytale:enemy
+--      ["It is time to practice your fighting skills."] = "", -- A_Classic_Fairytale:first_blood
+--      ["It must be a childhood trauma..."] = "", -- A_Classic_Fairytale:family
+--      ["It must be the aliens!"] = "", -- A_Classic_Fairytale:backstab
+--      ["It must be the aliens' deed."] = "", -- A_Classic_Fairytale:backstab
+--      ["It must be the cyborgs again!"] = "", -- A_Classic_Fairytale:enemy
+--      ["I told you, I just found them."] = "", -- A_Classic_Fairytale:backstab
+	["It's a good thing SUDDEN DEATH is 99 turns away..."] = "Gut, dass SUDDEN DEATH noch 99 Runden entfernt ist...",
+--      ["It's always up to women to clear up the mess men created!"] = "", -- A_Classic_Fairytale:dragon
+--      ["It's a shame, I forgot how to do that!"] = "", -- A_Classic_Fairytale:family
+--      ["It's impossible to communicate with the spirits without a shaman."] = "", -- A_Classic_Fairytale:shadow
+--      ["It's over..."] = "", -- A_Classic_Fairytale:shadow
+--      ["It's time you learned that your actions have consequences!"] = "", -- A_Classic_Fairytale:journey
+--      ["It's worth more than wood!"] = "", -- A_Classic_Fairytale:enemy
+--      ["It wants our brains!"] = "", -- A_Classic_Fairytale:shadow
+--      ["It was not a dream, unwise one!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I've seen this before. They just appear out of thin air."] = "", -- A_Classic_Fairytale:united
+--      ["I want to play a game..."] = "", -- A_Classic_Fairytale:journey
+--      ["I want to see how it handles this!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I wish to help you, "] = "", -- A_Classic_Fairytale:dragon
+--      ["I wonder where Dense Cloud is..."] = "", -- A_Classic_Fairytale:journey, A_Classic_Fairytale:shadow
+--      ["I wonder why I'm so angry all the time..."] = "", -- A_Classic_Fairytale:family
+--      ["I won't let you kill her!"] = "", -- A_Classic_Fairytale:journey
+--      ["Jack"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["Jeremiah"] = "", -- A_Classic_Fairytale:dragon
+--      ["John"] = "", -- A_Classic_Fairytale:journey
+--      ["Judas"] = "", -- A_Classic_Fairytale:backstab
+	["Jumping is disabled"] = "Sprünge sind deaktiviert!",
+--      ["Just kidding, none of you have died!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Just on a walk."] = "", -- A_Classic_Fairytale:united
+--      ["Just wait till I get my hands on that trauma! ARGH!"] = "", -- A_Classic_Fairytale:family
+	["Kamikaze Expert!"] = "Kamikazeexperte!",
+	["Keep it up!"] = "Weiter so!",
+--      ["Kerguelen"] = "", -- Continental_supplies
+	["Killing spree!"] = "Blutrausch!",
+--      ["KILL IT!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["KILLS"] = "",
+--      ["Kill the aliens!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Kill the cannibal!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Kill the traitor...or spare his life!|Kill him or press [Precise]!"] = "", -- A_Classic_Fairytale:backstab
+	["Last Target!"] = "Letzte Zielscheibe!",
+--      ["Leader"] = "", -- A_Classic_Fairytale:enemy
+--      ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
+--      ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
+--      ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
+--      ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Leaks A Lot must survive!"] = "", -- A_Classic_Fairytale:journey
+--      ["Led Heart"] = "", -- A_Classic_Fairytale:queen
+--      ["Lee"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["[Left Shift]"] = "",
+--      ["Let a Continent provide your weapons!"] = "", -- Continental_supplies
+--      ["Let me test your skills a little, will you?"] = "", -- A_Classic_Fairytale:journey
+--      ["Let's go home!"] = "", -- A_Classic_Fairytale:journey
+--      ["Let's head back to the village!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Let's see what your comrade does now!"] = "", -- A_Classic_Fairytale:journey
+--      ["Let's show those cannibals what we're made of!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Let them have a taste of my fury!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Let us help, too!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Light Cannfantry"] = "", -- A_Classic_Fairytale:united
+	["Listen up, maggot!!"] = "Aufgepasst, du Made!!",
+--      ["Little did they know that this hunt will mark them forever..."] = "", -- A_Classic_Fairytale:shadow
+--      ["Lively Lifeguard"] = "",
+--      ["Lonely Cries: [Rise the water if no hog is in the circle and deal 1 damage to all hogs]"] = "", -- Continental_supplies
+--      ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Look out! We're surrounded by cannibals!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Luckily, I've managed to snatch some of them."] = "", -- A_Classic_Fairytale:united
+--      ["LUDICROUS KILL"] = "", -- Mutant
+--      ["May the spirits aid you in all your quests!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "", -- Continental_supplies
+--      ["MEGA KILL"] = "", -- Mutant
+--      ["Meiwes"] = "", -- A_Classic_Fairytale:backstab
+--      ["Mindy"] = "", -- A_Classic_Fairytale:united
+	["Mine Deployer"] = "Minenleger",
+	["Mine Eater!"] = "Minenfresser!",
+	["|- Mines Time:"] = "| - Minenzündzeit: ", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+	["MISSION FAILED"] = "MISSION GESCHEITERT", -- User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+	["MISSION SUCCESSFUL"] = "MISSION ERFOLGREICH", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+	["MISSION SUCCESS"] = "MISSIONSERFOLG",
+--      ["Molotov"] = "", -- Continental_supplies
+--      ["MONSTER KILL"] = "", -- Mutant
+--      ["More Natives"] = "", -- A_Classic_Fairytale:epil
+	["Movement: [Up], [Down], [Left], [Right]"] = "Bewegung: [Hoch], [Runter], [Links], [Rechts]",
+--      ["Multi-shot!"] = "",
+	["Munition!"] = "Munition erschöpft!",
+--      ["Muriel"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["Muscle Dissolver"] = "", -- A_Classic_Fairytale:shadow
+--      ["-------"] = "", -- Mutant
+--      ["Nade Boy"] = "", -- Basic_Training_-_Grenade
+--      ["Name"] = "", -- A_Classic_Fairytale:queen
+	["Nameless Heroes"] = "Namenlose Helden",
+--      ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
+--      ["Napalm rocket: [Fire a bomb with napalm!]"] = "", -- Continental_supplies
+--      ["Natives"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
+	["New Barrels Per Turn"] = "Neue Fässer jede Runde",
+	["NEW CLAN RECORD: "] = "NEUER KLAN-REKORD",
+	["NEW fastest lap: "] = "NEUE schnellste Runde: ",
+	["New Mines Per Turn"] = "Neue Minen jede Runde",
+	["NEW RACE RECORD: "] = "NEUER RENNREKORD: ",
+--      ["Newton's Hammock"] = "",
+--      ["Nicely done, meatbags!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Nice work, "] = "", -- A_Classic_Fairytale:dragon
+--      ["Nice work!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Nilarian"] = "", -- A_Classic_Fairytale:queen
+--      ["No, I came back to help you out..."] = "", -- A_Classic_Fairytale:shadow
+--      ["No...I wonder where they disappeared?!"] = "", -- A_Classic_Fairytale:journey
+--      ["Nom-Nom"] = "", -- A_Classic_Fairytale:journey
+--      ["NomNom"] = "", -- A_Classic_Fairytale:united
+--      ["Nope. It was one fast mole, that's for sure."] = "", -- A_Classic_Fairytale:shadow
+--      ["No! Please, help me!"] = "", -- A_Classic_Fairytale:journey
+--      ["NORMAL"] = "", -- Continental_supplies
+--      ["North America"] = "", -- Continental_supplies
+--      ["Not all hogs are born equal."] = "", -- Highlander
+	["NOT ENOUGH WAYPOINTS"] = "NICHT GENUG WEGPUNKTE",
+--      ["Not now, Fiery Water!"] = "", -- A_Classic_Fairytale:backstab
+	["Not So Friendly Match"] = "Kein-so-Freundschaftsspiel", -- Basketball, Knockball
+--      ["Not you again! My head still hurts from last time!"] = "", -- A_Classic_Fairytale:shadow
+--      ["No, we made sure of that!"] = "", -- A_Classic_Fairytale:united
+--      ["Now find the next target! |Tip: Normally you lose health by falling down, so be careful!"] = "", -- Basic_Training_-_Rope
+--      ["No! What have I done?! What have YOU done?!"] = "", -- A_Classic_Fairytale:journey
+--      ["No. Where did he come from?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Now how do I get on the other side?!"] = "", -- A_Classic_Fairytale:dragon
+--      ["No. You and the rest of the tribe are safer there!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Obliterate them!|Hint: You might want to take cover..."] = "", -- A_Classic_Fairytale:shadow
+--      ["Obstacle course"] = "", -- A_Classic_Fairytale:dragon
+--      ["Of course I have to save her. What did I expect?!"] = "", -- A_Classic_Fairytale:family
+--      ["OH, COME ON!"] = "", -- A_Classic_Fairytale:journey
+--      ["Oh, my!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
+	["Oh no! Just try again!"] = "Oh nein! Versuch's nochmal!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+--      ["Oh no, not "] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
+	["Oh no! Time's up! Just try again."] = "Oh nein! Die Zeit ist um! Versuche es nochmal.", --Bazooka, Shotgun, SniperRifle
+--      ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
+--      ["Oh, silly me! I forgot that I'm the shaman."] = "", -- A_Classic_Fairytale:backstab
+--      ["Olive"] = "", -- A_Classic_Fairytale:united
+--      ["Omnivore"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["ONE HOG PER TEAM! KILLING EXCESS HEDGES"] = "", -- Mutant
+--      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Oops...I dropped them."] = "", -- A_Classic_Fairytale:united
+--      ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Operation Diver"] = "",
+	["Opposing Team: "] = "Gegnerisches Team: ",
+--      ["Orlando Boom!"] = "", -- A_Classic_Fairytale:queen
+--      ["Ouch!"] = "", -- User_Mission_-_Rope_Knock_Challenge
+--      ["Our tribe, our beautiful island!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Parachute"] = "", -- Continental_supplies
+	["Pathetic Hog #%d"] = "Erbärmlicher Igel #%d",
+	["Pathetic Resistance"] = "Erbärmlicher Widerstand", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
+--      ["Perfect! Now try to get the next crate without hurting yourself!"] = "", -- A_Classic_Fairytale:first_blood
+	["Per-Hog Ammo"] = "Munition pro Igel",
+--      ["- Per team weapons|- 9 weaponschemes|- Unique new weapons| |Select continent first round with the Weapon Menu or by ([switch/tab]=Increase,[precise/left shift]=Decrease) on Skip|Some weapons have a second option. Find them with [switch/tab]"] = "", -- Continental_supplies
+
+--      ["Pfew! That was close!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Piñata bullet: [Contains some sweet candy!]"] = "", -- Continental_supplies
+--      ["Pings left:"] = "", -- Space_Invasion
+
+	["Place more waypoints using the 'Air Attack' weapon."] = "Platziere mehr Wegpunkte durch Verwenden der 'Luftangriff'-Waffe",
+--      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Please place the way-point further from the waterline."] = "", -- Racer
+--      ["Please place the way-point in the open, within the map boundaries."] = "", -- Racer
+--      ["Please, stop releasing your \"smoke signals\"!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Point Blank Combo!"] = "", -- Space_Invasion
+	["points"] = "Punkte", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle
+	["Poison"] = "Gift",
+--      ["Portal hint: one goes to the destination, and one is the entrance.|"] = "", -- A_Classic_Fairytale:dragon
+--      ["Portal mission"] = "", -- portal
+	["Power Remaining"] = "Verbleibende Energie",
+	["Prepare yourself"] = "Mach dich bereit",
+--      ["Press [Enter] to accept this configuration."] = "", -- WxW
+--      ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Press [Precise] to skip intro"] = "",
+--      ["Private Novak"] = "", -- Basic_Training_-_Cluster_Bomb
+--      ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
+	["PUNKTESTAND"] = "",
+	["Race complexity limit reached."] = "Rennkomplexitätslimit erreicht.",
+--      ["RACER"] = "",
+--      ["Rachel"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["Radar Ping"] = "", -- Space_Invasion
+--      ["Raging Buffalo"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
+--      ["Ramon"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
+--      ["RC PLANE TRAINING"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Really?! You thought you could harm me with your little toys?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Regurgitator"] = "", -- A_Classic_Fairytale:backstab
+--      ["Reinforcements"] = "", -- A_Classic_Fairytale:backstab
+--      ["Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!"] = "", -- Basic_Training_-_Rope
+--      ["Remember this, pathetic animal: when the day comes, you will regret your blind loyalty!"] = "", -- A_Classic_Fairytale:shadow
+	[" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = " - Bringe die gegnerische Flagge zu deiner Heimatbasis um zu punkten. | - Das Team das zuerst 3 Flaggen erobert gewinnt. | - Du kannst nur punkten wenn deine eigene Flagge in deiner Basis ist | - Igel lassen die Flagge fallen wenn sie sterben oder ertrinken | - Fallen gelassene Flaggen können zurückgebracht oder wieder gestohlen werden | - Igel tauchen nach ihrem Tod wieder auf",
+--      ["Return to Leaks A Lot! If you get stuck, press [Precise] to try again!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
+--      ["ROPE-KNOCKING"] = "", -- User_Mission_-_Rope_Knock_Challenge
+--      ["Rope Training"] = "", -- Basic_Training_-_Rope
+--      ["Rot Molester"] = "", -- A_Classic_Fairytale:shadow
+--      ["Round Limit:"] = "",
+	["Round Limit"] = "Rundenbegrenzung",
+--      ["Rounds Complete: "] = "",
+	["Rounds Complete"] = "Runden Gespielt",
+	["RULES OF THE GAME [Press ESC to view]"] = "SPIEL REGELN (Drücke ESC zum Anzeigen)",
+--      ["Rusty Joe"] = "", -- A_Classic_Fairytale:queen
+--      ["s|"] = "",
+--      ["Sabotage: [Sabotage all hogs in the circle and deal ~10 dmg]"] = "", -- Continental_supplies
+--      ["Salivaslurper"] = "", -- A_Classic_Fairytale:united
+--      ["Salvation"] = "", -- A_Classic_Fairytale:family
+--      ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
+	["Save as many hapless hogs as possible!"] = "Rette so viele glücklose Igel als möglich!",
+--      ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
+--      ["Save Leaks A Lot!|Hint: The Switch utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
+--      ["Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"] = "", -- A_Classic_Fairytale:family
+--      ["Save the princess by collecting the crate in under 12 turns!"] = "", -- A_Classic_Fairytale:journey
+--      ["Scalp Muncher"] = "", -- A_Classic_Fairytale:backstab
+--      ["Score"] = "", -- Mutant
+--      ["SCORE"] = "", -- Space_Invasion
+--      ["Scream from a Walrus: [Deal 20 damage + 10% of your hogs health to all hogs around you and get half back]"] = "", -- Continental_supplies
+--      ["sec"] = "", -- CTF_Blizzard, TrophyRace, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Capture_the_Flag
+--      ["Seduction"] = "", -- Continental_supplies
+--      ["Seems like every time you take a \"walk\", the enemy find us!"] = "", -- A_Classic_Fairytale:backstab
+--      ["See that crate farther on the right?"] = "", -- A_Classic_Fairytale:first_blood
+	["See ya!"] = "Mach's gut!",
+--      ["Segmentation Paul"] = "", -- A_Classic_Fairytale:dragon
+--      ["Select continent!"] = "", -- Continental_supplies
+--      ["Select difficulty: [Left] - easier or [Right] - harder"] = "", -- A_Classic_Fairytale:first_blood
+	["selected!"] = "ausgewählt!",
+--      ["s"] = "", -- GaudyRacer, Space_Invasion
+--      ["... share your beauty with the world every morning, my princess!"] = "", -- A_Classic_Fairytale:journey
+--      ["She's behind that tall thingy."] = "", -- A_Classic_Fairytale:family
+	["Shield boosted! +30 power"] = "Schild verstärkt! +30 Energie",
+	["Shield Depleted"] = "Schild aufgebraucht!",
+	["Shield is fully recharged!"] = "Schild vollständig aufgeladen!",
+	["Shield Master!"] = "Schildmeister!",
+	["Shield Miser!"] = "Schildgieriger",
+	["Shield OFF:"] = "Schild AUS:",
+	["Shield ON:"] = "Schild AN:",
+	["Shield Seeker!"] = "Schildsucher!",
+--      ["Shotgun"] = "", -- Continental_supplies
+	["Shotgun Team"] = "Schrotflinten-Team",
+	["Shotgun Training"] = "Schrotflinten-Training",
+	["shots remaining."] = "Schüsse übrig",
+	["Silly"] = "Doofi",
+	["Sinky"] = "Blubb",
+--      ["Sirius Lee"] = "", -- A_Classic_Fairytale:enemy
+	["%s is out and Team %d|scored a penalty!| |Score:"] = "%s ist draußen und Team %d|erhält eine Strafe!| |Punktestand:", -- Basketball, Knockball
+	["%s is out and Team %d|scored a point!| |Score:"] = "%s ist draußen und Team %d|erhält einen Punkt!| |Punktestand:", -- Basketball, Knockball
+--      ["Slippery"] = "", -- A_Classic_Fairytale:journey
+--      ["Smith 0.97"] = "", -- A_Classic_Fairytale:enemy
+--      ["Smith 0.98"] = "", -- A_Classic_Fairytale:enemy
+--      ["Smith 0.99a"] = "", -- A_Classic_Fairytale:enemy
+--      ["Smith 0.99b"] = "", -- A_Classic_Fairytale:enemy
+--      ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
+--      ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
+--      ["Sniper Rifle"] = "", -- Continental_supplies
+--      ["Sniper!"] = "", -- Space_Invasion
+	["Sniper Training"] = "Scharfschützen-Training",
+	["Sniperz"] = "Heckenschützen",
+--      ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["South America"] = "", -- Continental_supplies
+--      ["So? What will it be?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Spawn the crate, and attack!"] = "", -- WxW
+--      ["Special Weapons:"] = "", -- Continental_supplies
+	["Spielmodifikatoren: "] = "",
+--      ["Spiky Cheese"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
+--      ["Spleenlover"] = "", -- A_Classic_Fairytale:united
+	["Sponge"] = "Schwamm",
+--      ["Spooky Tree"] = "",
+--      ["STATUS UPDATE"] = "", -- GaudyRacer, Space_Invasion
+--      ["Steel Eye"] = "", -- A_Classic_Fairytale:queen
+--      ["Step By Step"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Steve"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["Sticky Mine"] = "", -- Continental_supplies
+--      ["Stronglings"] = "", -- A_Classic_Fairytale:shadow
+--      ["Structure"] = "", -- Continental_supplies
+--      ["Super Weapons"] = "", -- WxW
+--      ["Surf Before Crate"] = "", -- WxW
+--      ["Surfer! +15 points!"] = "", -- Space_Invasion
+--      ["Surfer!"] = "", -- WxW
+--      ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
+--      ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
+	["Switched to "] = "Gewechselt zu ",
+--      ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
+--      ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
+--	["Team %d: "] = "",
+	["Team Scores"] = "Teampunktestand", -- Control, Space_Invasion
+--      ["Teleport hint: just use the mouse to select the destination!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Thanks!"] = "", -- A_Classic_Fairytale:family
+--      ["Thank you, my hero!"] = "", -- A_Classic_Fairytale:family
+--      ["Thank you, oh, thank you, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+--      ["Thank you, oh, thank you, my heroes!"] = "", -- A_Classic_Fairytale:journey
+--      ["That is, indeed, very weird..."] = "", -- A_Classic_Fairytale:united
+--      ["That makes it almost invaluable!"] = "", -- A_Classic_Fairytale:enemy
+--      ["That ought to show them!"] = "", -- A_Classic_Fairytale:backstab
+--      ["That's for my father!"] = "", -- A_Classic_Fairytale:backstab
+--      ["That shaman sure knows what he's doing!"] = "", -- A_Classic_Fairytale:shadow
+--      ["That Sinking Feeling"] = "",
+--      ["That's not our problem!"] = "", -- A_Classic_Fairytale:enemy
+--      ["That's typical of you!"] = "", -- A_Classic_Fairytale:family
+--      ["That was just mean!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
+	["That was pointless."] = "Das war sinnlos.",
+--      ["The answer is...entertaintment. You'll see what I mean."] = "", -- A_Classic_Fairytale:backstab
+--      ["The anti-portal zone is all over the floor, and I have nothing to kill him...Droping something could hurt him enough to kill him..."] = "", -- portal
+--      ["The Bull's Eye"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The caves are well hidden, they won't find us there!"] = "", -- A_Classic_Fairytale:united
+--      ["The Crate Frenzy"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Dilemma"] = "", -- A_Classic_Fairytale:shadow
+--      ["The enemy can't move but it might be a good idea to stay out of sight!|"] = "", -- A_Classic_Fairytale:dragon
+	["The enemy is hiding out on yonder ducky!"] = "Der Feind versteckt sich auf dem Entlein dort drüben!",
+--      ["The Enemy Of My Enemy"] = "", -- A_Classic_Fairytale:enemy
+--      ["The First Blood"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The First Encounter"] = "", -- A_Classic_Fairytale:shadow
+	["The flag will respawn next round."] = "Die Fahne wird nächste Runde wieder auftauchen.",
+--      ["The food bites back"] = "", -- A_Classic_Fairytale:backstab
+--      ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
+--      ["The guardian"] = "", -- A_Classic_Fairytale:shadow
+--      ["The Individualist"] = "", -- A_Classic_Fairytale:shadow
+--      ["Their buildings were very primitive back then, even for an uncivilised island."] = "", -- A_Classic_Fairytale:united
+--      ["The Journey Back"] = "", -- A_Classic_Fairytale:journey
+--      ["The Leap of Faith"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Moonwalk"] = "", -- A_Classic_Fairytale:journey
+	["The Nameless One"] = "Der Namenlose",
+--      ["The next one is pretty hard! |Tip: You have to do multiple swings!"] = "", -- Basic_Training_-_Rope
+--      ["Then how do they keep appearing?"] = "", -- A_Classic_Fairytale:shadow
+--      ["The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["There must be a spy among us!"] = "", -- A_Classic_Fairytale:backstab
+--      ["There's more of them? When did they become so hungry?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
+--      ["There's nothing more satisfying for me than seeing you share your beauty with the world every morning, my princess!"] = "", -- A_Classic_Fairytale:journey
+--      ["There's nothing more satisfying to us than seeing you share your beauty..."] = "", -- A_Classic_Fairytale:journey
+--      ["There's nothing more satisfying to us than seeing you share your beauty with the world every morning, my princess!"] = "", -- A_Classic_Fairytale:journey
+--      ["The Rising"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Savior"] = "", -- A_Classic_Fairytale:journey
+--      ["These primitive people are so funny!"] = "", -- A_Classic_Fairytale:backstab
+--      ["The Shadow Falls"] = "", -- A_Classic_Fairytale:shadow
+--      ["The Showdown"] = "", -- A_Classic_Fairytale:shadow
+--      ["The Slaughter"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:first_blood
+	["THE SPECIALISTS"] = "DIE SPEZIALISTEN",
+--      ["The spirits of the ancerstors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Tunnel Maker"] = "", -- A_Classic_Fairytale:journey
+--      ["The Ultimate Weapon"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Union"] = "", -- A_Classic_Fairytale:enemy
+--      ["The village, unprepared, was destroyed by the cyborgs..."] = "", -- A_Classic_Fairytale:journey
+--      ["The walk of Fame"] = "", -- A_Classic_Fairytale:shadow
+--      ["The wasted youth"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The weapon in that last crate was bestowed upon us by the ancients!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The what?!"] = "", -- A_Classic_Fairytale:dragon
+--      ["The wind whispers that you are ready to become familiar with tools, now..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["They are all waiting back in the village, haha."] = "", -- A_Classic_Fairytale:enemy
+--      ["They Call Me Bullseye!"] = "", -- Space_Invasion
+--      ["They have weapons we've never seen before!"] = "", -- A_Classic_Fairytale:united
+--      ["They keep appearing like this. It's weird!"] = "", -- A_Classic_Fairytale:united
+--      ["They killed "] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
+--      ["They must be trying to weaken us!"] = "", -- A_Classic_Fairytale:enemy
+--      ["They never learn"] = "", -- A_Classic_Fairytale:journey
+--      ["They told us to wear these clothes. They said that this is the newest trend."] = "", -- A_Classic_Fairytale:enemy
+--      ["They've been manipulating us all this time!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Thighlicker"] = "", -- A_Classic_Fairytale:united
+--      ["This is it! It's time to make Fell From Heaven fall for me..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["This island is the only place left on Earth with grass on it!"] = "", -- A_Classic_Fairytale:enemy
+--      ["This is typical!"] = "", -- A_Classic_Fairytale:dragon
+--      ["This must be some kind of sorcery!"] = "", -- A_Classic_Fairytale:shadow
+--      ["This must be the caves!"] = "", -- A_Classic_Fairytale:backstab
+	["This one's tricky."] = "Der hier ist knifflig.",
+	["This rain is really something..."] = "Das nenne ich mal einen Regenschauer...",
+--      ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Those aliens are destroying the island!"] = "", -- A_Classic_Fairytale:family
+	["Timed Kamikaze!"] = "Pünktliches Kamikaze!",
+	["Time Extended!"] = "Zeit verlängert!",
+	["Time Extension"] = "Zeitverlängerung",
+	["Time Left: "] = "Verbleibende Zeit",
+	["TIME: "] = "ZEIT: ",
+--      ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "", -- Basic_Training_-_Rope
+	["Toggle Shield"] = "Schild ein/aus",
+--      ["To help you, of course!"] = "", -- A_Classic_Fairytale:journey
+--      ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
+--      ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
+--      [" to save the village."] = "", -- A_Classic_Fairytale:dragon
+--      ["To the caves..."] = "", -- A_Classic_Fairytale:united
+	["Toxic Team"] = "Giftige Gegner", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+	["TRACK COMPLETED"] = "STRECKENLAUF BEENDET",
+	["TRACK FAILED!"] = "STRECKENLAUF GESCHEITERT",
+--      ["training"] = "", -- portal
+--      ["Traitors"] = "", -- A_Classic_Fairytale:epil
+--      ["Tribe"] = "", -- A_Classic_Fairytale:backstab
+--	["TrophyRace"] = "",
+--      ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
+--      ["T_T"] = "",
+	["Tumbling Time Extended!"] = "Purzelzeit verlängert!",
+--      ["Turns until Sudden Death: "] = "", -- A_Classic_Fairytale:dragon
+--      [" turns until Sudden Death! Better hurry!"] = "", -- A_Classic_Fairytale:dragon
+	["Turn Time"] = "Zeit pro Zug",
+--      ["Two little hogs cooperating, getting past obstacles..."] = "", -- A_Classic_Fairytale:journey
+--      ["Uhm...I met one of them and took his weapons."] = "", -- A_Classic_Fairytale:shadow
+--      ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
+--      ["ULTRA KILL"] = "", -- Mutant
+--      ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
+--      ["Unexpected Igor"] = "", -- A_Classic_Fairytale:dragon
+--      ["Unit 0x0007"] = "", -- A_Classic_Fairytale:family
+--      ["Unit 334a$7%;.*"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
+	["Unit 3378"] = "Einheit 3378",
+	["Unit 835"] = "Einheit 3378",
+--      ["United We Stand"] = "", -- A_Classic_Fairytale:united
+	["Unit"] = "Einheit",
+	["Unlimited Attacks"] = "Unbegrenzte Angriffe",
+--      ["Unlucky Sods"] = "", -- User_Mission_-_Rope_Knock_Challenge
+	["Unstoppable!"] = "Unaufhaltbar!",
+--      ["Unsuspecting Louts"] = "", -- User_Mission_-_Rope_Knock_Challenge
+--      ["[Up], [Down] to aim, [Space] to shoot!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Use it wisely!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Use it with precaution!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["User Challenge"] = "",
+
+--      ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
+--      ["Use the rope to get on the head of the mole, young one!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Use the rope to knock your enemies to their doom."] = "", -- User_Mission_-_Rope_Knock_Challenge
+	["Use your rope to get from start to finish as fast as you can!"] = "Nutze das Seil um von Start zu Ziel zu gelangen - so schnell du kannst!",
+--      ["Vedgies"] = "", -- A_Classic_Fairytale:journey
+--      ["Vegan Jack"] = "", -- A_Classic_Fairytale:enemy
+--      ["Victory!"] = "", -- Basic_Training_-_Rope
+	["Victory for the "] = "Sieg für ", -- CTF_Blizzard, Capture_the_Flag
+--      ["Violence is not the answer to your problems!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Walls Left"] = "", -- WxW
+--      ["Walls Required"] = "", -- WxW
+--      ["WALL TO WALL"] = "", -- WxW
+--      ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
+--      ["Watch your steps, young one!"] = "", -- A_Classic_Fairytale:first_blood
+	["Waypoint placed."] = "Wegpunkt gesetzt",
+	["Way-Points Remaining"] = "Wegpunkte verbleibend",
+--      ["Weaklings"] = "", -- A_Classic_Fairytale:shadow
+--      ["We all know what happens when you get frightened..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Weapons reset."] = "", -- Highlander
+	["Weapons Reset"] = "Waffenzurücksetzung",
+--      ["We are indeed."] = "", -- A_Classic_Fairytale:backstab
+--      ["We can't defeat them!"] = "", -- A_Classic_Fairytale:shadow
+--      ["We can't hold them up much longer!"] = "", -- A_Classic_Fairytale:united
+--      ["We can't let them take over our little island!"] = "", -- A_Classic_Fairytale:enemy
+--      ["We have no time to waste..."] = "", -- A_Classic_Fairytale:journey
+--      ["We have nowhere else to live!"] = "", -- A_Classic_Fairytale:enemy
+--      ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
+--      ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
+	["Well done."] = "Gut gemacht.",
+--      ["We'll give you a problem then!"] = "", -- A_Classic_Fairytale:enemy
+--      ["We'll spare your life for now!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Well, that was a waste of time."] = "", -- A_Classic_Fairytale:dragon
+--      ["Well, well! Isn't that the cutest thing you've ever seen?"] = "", -- A_Classic_Fairytale:journey
+--      ["Well, yes. This was a cyborg television show."] = "", -- A_Classic_Fairytale:enemy
+--      ["We made sure noone followed us!"] = "", -- A_Classic_Fairytale:backstab
+--      ["We need to move!"] = "", -- A_Classic_Fairytale:united
+--      ["We need to prevent their arrival!"] = "", -- A_Classic_Fairytale:backstab
+--      ["We need to warn the village."] = "", -- A_Classic_Fairytale:shadow
+--      ["We should head back to the village now."] = "", -- A_Classic_Fairytale:shadow
+--      ["We were trying to save her and we got lost."] = "", -- A_Classic_Fairytale:family
+--      ["We won't let you hurt her!"] = "", -- A_Classic_Fairytale:journey
+--      ["What?! A cannibal? Here? There is no time to waste! Come, you are prepared."] = "", -- A_Classic_Fairytale:first_blood
+--      ["What a douche!"] = "", -- A_Classic_Fairytale:enemy
+--      ["What am I gonna...eat, yo?"] = "", -- A_Classic_Fairytale:family
+--      ["What are you doing at a distance so great, young one?"] = "", -- A_Classic_Fairytale:first_blood
+--      ["What are you doing? Let her go!"] = "", -- A_Classic_Fairytale:journey
+--      ["What a ride!"] = "", -- A_Classic_Fairytale:shadow
+--      ["What a strange cave!"] = "", -- A_Classic_Fairytale:dragon
+--      ["What a strange feeling!"] = "", -- A_Classic_Fairytale:backstab
+--      ["What do my faulty eyes observe? A spy!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Whatever floats your boat..."] = "", -- A_Classic_Fairytale:shadow
+--      [" What !! For all of this struggle i just win some ... TIME o0"] = "", -- portal
+--      ["What has "] = "", -- A_Classic_Fairytale:backstab
+--      ["What? Here? How did they find us?!"] = "", -- A_Classic_Fairytale:backstab
+--      ["What is this place?"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy
+--      ["What shall we do with the traitor?"] = "", -- A_Classic_Fairytale:backstab
+--      ["WHAT?! You're the ones attacking us!"] = "", -- A_Classic_Fairytale:enemy
+--      ["When?"] = "", -- A_Classic_Fairytale:enemy
+--      ["When I find it..."] = "", -- A_Classic_Fairytale:dragon
+--      ["Where are all these crates coming from?!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Where are they?!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Where did that alien run?"] = "", -- A_Classic_Fairytale:dragon
+--      ["Where did you get the exploding apples?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Where did you get the exploding apples and the magic bow that shoots many arrows?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Where did you get the magic bow that shoots many arrows?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Where did you get the weapons in the forest, Dense Cloud?"] = "", -- A_Classic_Fairytale:backstab
+--      ["Where do you get that?!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Where have you been?!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Where have you been?"] = "", -- A_Classic_Fairytale:united
+--      ["? Why?"] = "", -- A_Classic_Fairytale:backstab
+--      ["Why "] = "", -- A_Classic_Fairytale:backstab
+--      ["! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
+--      ["Why are you doing this?"] = "", -- A_Classic_Fairytale:journey
+--      ["Why are you helping us, uhm...?"] = "", -- A_Classic_Fairytale:family
+--      ["Why can't he just let her go?!"] = "", -- A_Classic_Fairytale:family
+--      ["Why do men keep hurting me?"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Why do you not like me?"] = "", -- A_Classic_Fairytale:shadow
+--      ["Why do you want to take over our island?"] = "", -- A_Classic_Fairytale:enemy
+--      ["Why me?!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Why would they do this?"] = "", -- A_Classic_Fairytale:backstab
+--      ["- Will Get 1-3 random weapons"] = "", -- Continental_supplies
+--      ["- Will refresh Parachute each turn."] = "", -- Continental_supplies
+--      ["- Will refresh portalgun each turn."] = "", -- Continental_supplies
+	["Will this ever end?"] = "Bu sona erecek mi?",
+--      ["WINNER IS "] = "", -- Mutant
+	["WINNING TIME: "] = "KAZANMA SÜRESİ: ",
+--      ["Wise Oak"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+--      ["With Dense Cloud on the land of shadows, I'm the village's only hope..."] = "", -- A_Classic_Fairytale:journey
+--      ["With the rest of the tribe gone, it was up to "] = "", -- A_Classic_Fairytale:dragon
+--      ["Worry not, for it is a peaceful animal! There is no reason to be afraid..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Wow, what a dream!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Y3K1337"] = "", -- A_Classic_Fairytale:journey, A_Classic_Fairytale:shadow
+--      ["Yay, we won!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Y Chwiliad"] = "", -- A_Classic_Fairytale:dragon
+--      ["Yeah...I think it's a 'he', lol."] = "", -- A_Classic_Fairytale:shadow
+--      ["Yeah, sure! I died. Hillarious!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Yeah, take that!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Yeah? Watcha gonna do? Cry?"] = "", -- A_Classic_Fairytale:journey
+--      ["Yes!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Yes, yeees! You are now ready to enter the real world!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Yo, dude, we're here, too!"] = "", -- A_Classic_Fairytale:family
+--      ["You are given the chance to turn your life around..."] = "", -- A_Classic_Fairytale:shadow
+--      ["You are playing with our lives here!"] = "", -- A_Classic_Fairytale:enemy
+--      ["! You bastards!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
+--      ["You bear impressive skills, "] = "", -- A_Classic_Fairytale:dragon
+--      ["You can't fire a portal on the blue surface"] = "", -- portal
+--      ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
+	["You'd almost swear the water was rising!"] = "Suyun yükseldiğine yemin edebilirdin!",
+--      ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
+--      ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
+--      ["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|Hint: you might want to use some mines..."] = "", -- A_Classic_Fairytale:backstab
+--      ["You have "] = "", -- A_Classic_Fairytale:dragon
+--      ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You have been respawned, at your last checkpoint!"] = "", -- Basic_Training_-_Rope
+--      ["You have been respawned, be more carefull next time!"] = "", -- Basic_Training_-_Rope
+--      ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
+--      ["You have failed to complete your task, young one!"] = "", -- A_Classic_Fairytale:journey
+--      ["You have failed to save the tribe!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You have finally figured it out!"] = "", -- A_Classic_Fairytale:enemy
+--      ["You have kidnapped our whole tribe!"] = "", -- A_Classic_Fairytale:enemy
+--      ["You have killed an innocent hedgehog!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You have proven yourself worthy to see our most ancient secret!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["You have proven yourselves worthy!"] = "", -- A_Classic_Fairytale:enemy
+	["You have SCORED!!"] = "VURDUN!",
+--      ["You have to destroy 12 targets in 180 seconds"] = "", -- Basic_Training_-_Cluster_Bomb
+--      ["You have won the game by proving true cooperative skills!"] = "", -- A_Classic_Fairytale:enemy
+--      ["You just appeared out of thin air!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You just committed suicide..."] = "", -- A_Classic_Fairytale:shadow
+--      ["You killed my father, you monster!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You know...taking a stroll."] = "", -- A_Classic_Fairytale:backstab
+--      ["You know what? I don't even regret anything!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
+--      ["You may only attack from a rope!"] = "", -- WxW
+--      ["You meatbags are pretty slow, you know!"] = "", -- A_Classic_Fairytale:enemy
+--      ["You might want to find a way to instantly kill arriving cannibals!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Young one, you are telling us that they can instantly change location without a shaman?"] = "", -- A_Classic_Fairytale:united
+--      ["You probably know what to do next..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Your deaths will be avenged, cannibals!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
+--      ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You're funny!"] = "", -- A_Classic_Fairytale:journey
+--      ["You're getting pretty good! |Tip: When you shorten you rope you move faster! |and when you lengthen it you move slower"] = "", -- Basic_Training_-_Rope
+--      ["You're pathetic! You are not worthy of my attention..."] = "", -- A_Classic_Fairytale:shadow
+--      ["You're probably wondering why I bought you back..."] = "", -- A_Classic_Fairytale:backstab
+--      ["You're terrorizing the forest...We won't catch anything like this!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Your hogs must survive!"] = "", -- A_Classic_Fairytale:journey
+--      ["Your movement skills will be evaluated now."] = "", -- A_Classic_Fairytale:first_blood
+	["You saved"] = "Kurtarılan: ",
+--      ["You've been assaulting us, we have been just defending ourselves!"] = "", -- A_Classic_Fairytale:enemy
+	["You've failed. Try again."] = "Başaramadın. Yeniden dene!",
+	["You've reached the goal!| |Time: "] = "Hedefe ulaştın!| |Süre: ",
+--      ["You will be avenged!"] = "", -- A_Classic_Fairytale:shadow
+--      ["You won't believe what happened to me!"] = "", -- A_Classic_Fairytale:backstab
+--      ["Yuck! I bet they'll keep worshipping her even after I save the village!"] = "", -- A_Classic_Fairytale:family
+--      ["Zealandia"] = "", -- Continental_supplies
+	["'Zooka Team"] = "Roketatar Takımı",
+--      ["Zork"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
+    }
--- a/share/hedgewars/Data/Locale/tr.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/tr.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -2,7 +2,7 @@
 
 00:00=El Bombası
 00:01=Parça Tesirli Bomba
-00:02=Bazuka
+00:02=Roketatar
 00:03=UFO
 00:04=Pompalı Tüfek
 00:05=Kompresör
@@ -12,7 +12,7 @@
 00:09=Çöl Kartalı
 00:10=Dinamit
 00:11=Beyzbol Sopası
-00:12=Shoryuken
+00:12=Yükselen Ejderha
 00:13=san
 00:14=Paraşüt
 00:15=Hava Saldırısı
@@ -37,34 +37,501 @@
 00:34=Ölümsüzlük
 00:35=Arttırılmış Zaman
 00:36=Lazer Görüşü
-00:37=Vampirism
-00:38=Sniper Rifle
-00:39=Flying Saucer
-00:40=Molotov Cocktail
+00:37=Vampirleşme
+00:38=Keskin Nişansı Tüfeği
+00:39=Uçan Daire
+00:40=Molotof Kokteyli
+00:41=Kuşçuk
+00:42=Taşınabilir Portal Aygıtı
+00:43=Piano Vuruşu
+00:44=Eski Limburger
+00:45=Sinüs Tabancası (beta)
+00:46=Alev Püskürtücü
+00:47=Yapışkan Mayın
+00:48=Çekiç
+00:49=Yeniden Doğuş
+00:50=Matkap Vuruşu
+00:51=Çamur Topu
+00:52=Silah Seçilmedi
+00:53=Zaman Kutusu
+; 00:54=Yapı
+00:54=Zemin Spreyi
+00:55=Dondurucu
+00:56=Satır
 
 01:00=Savaş başlasın!
 01:01=Beraberlik
 01:02=%1 kazandı!
-01:03=Bölüm %1%
+01:03=Bölüm %%1
 01:04=Duraklatıldı
 01:05=Çıkılsın mı (Y/Esc)?
 01:06=Ani ölüm!
-01:07=%1 Remaining
-01:08=Fuel
+01:07=%1 Kaldı
+01:08=Yakıt
+01:09=Eşzamanlanıyor...
+01:10=Bu yardımcıyı kullanmak sıranı bitirmeyecek!
+01:11=Bu silah veya yardımcı henüz kullanılamıyor!
+01:12=Ani Ölüm için son tur!
+01:13=Ani Ölüme %1 tur kaldı!
+01:14=Hazırlan, %1!
+01:15=Az
+01:16=Düşük
+01:17=Normal
+01:18=Yüksek
+01:19=En Yüksek
+01:20=%1 Sekmesi
+01:21=Ses Kapalı
+
 
 ; Event messages
 ; Hog (%1) died
-02:00=%1 has kicked the bucket!
-02:00=%1 has seen the light!
-02:00=%1 never saw that comming!
+02:00=%1 sepeti boyladı!
+02:00=%1 ışığı gördü!
+02:00=%1 bunun geldiğini farketmemişti!
+02:00=%1 baş baş yapıyor!
+02:00=%1 daha iyi bir yere gitti!
+02:00=%1 yapan ile buluşuyor!
+02:00=%1 daha fazla dayanamıyor!
+02:00=%1 görevini yaptı!
+02:00=%1 mükemmel fedakarlık yapıyor!
+02:00=%1 havan sarımını ateşliyor!
+02:00=%1 ağaç olup ayrılıyor!
+02:00=%1 zaman aşımına uğradı!
+02:00=%1 dünya barışı istiyor!
+02:00=%1 sevgiyle hatırlanacak!
+02:00=%1 damar genişlemesi başladı!
+02:00=%1 arkasında gözü yaşlı eş ve çocuk bırakıyor
+02:00=%1 son roketatarını fırlattı
+02:00=%1 son el bombasını fırlattı
+02:00=%1 son pastasını pişirdi
+02:00=%1 son halatında sallandı
+02:00=%1 son hava saldırısını çağırdı
+02:00=%1 son tüfeğini ateşledi
+02:00=%1 son karpuzunu attı
+02:00=%1 son çizimini yaptı
+02:00=%1 bir atışı çok kez aldı
+02:00=%1 gerçekten bir sağlık sandığı kullanabilirdi
+02:00=%1 daha iyi bir oyun oynamak için gitti
+02:00=%1 hayata kaçtı
+02:00=%1 başarısız oldu
+02:00=Zavallı %1...
+02:00=%1 wormux'u tercih ediyor
+02:00=%1 yüzüyle vuruşları engelliyordu
+02:00=%1 bana göre bir kahraman...hımmm...kirpi
+02:00=%1 kendi yerini Valhalla'da buldu
+02:00=%1 binayı terketti
+02:00=%1 dinazorların yanına gidiyor
+02:00=%1 kirpileri nesillerini tüketmeye bir adım daha yaklaştırdı
+02:00=%1 gözlerimi yaşarttı
+02:00=%1 eskiden bir kirpiydi
+02:00=%1 papatya ekiyor
+02:00=%1 artık yok
+02:00=%1 için bir veda yapalım
+02:00=%1 ümidi kesildi
+02:00=%1 son perdeyi kapattı
+02:00=Varsa iç bir tane %1
+02:00=%1 Anlık Yoğun Varlık Sorunu çekiyor
+02:00=%1 hayata veda etti
+02:00=%1 kaya gibi öldü
+02:00=%1 artık yok
+02:00=%1 son kullanma tarihi doldu
+02:00=Yaşamdan yoksun, %1 huzur içinde yatsın
+02:00=%1 görünmezler korosuna katıldı
+02:00=Hoşça kal %1, seni iyi bilirdik!
+02:00=%1 vurulmaya çok az dayanabildi
+02:00=%1 ek bir can kullanabilirdi
+02:00=Evde bir doktor var mı?
+
 ; Hog (%1) drowned
-02:01=%1 plays submarine!
-02:01=%1 mimics the Titanic!
-02:01=%1 swims like a stone!
-; Match starts
-02:02=Let's fight!
-02:02=Armed and ready!
+02:01=%1 deniz altı oynuyor!
+02:01=%1 Titanik'i taklit ediyor!
+02:01=%1 kaya gibi yüzüyor!
+02:01=%1 tuğla gibi havada kaldı!
+02:01=%1 derin dibi kontrol ediyor
+02:01=%1 bir şey diyor: "gulu gulu gulu"
+02:01=%1 atlama yapıyor
+02:01=%1 kolluklarını unuttu
+02:01=%1 gerçekten yüzme dersi almalıydı
+02:01=%1 sörf tahtasını evde bırakmış
+02:01=%1 yıkanıyor
+02:01=%1 ıslak bir kirpi
+02:01=%1 can yeleğini getirmeyi unuttu
+02:01=%1 bıcı bıcıya gidiyor
+02:01=%1 balıklarla yüzüyor
+02:01=%1 oyundaki su fiziğinin berbat olduğunu düşünüyor
+02:01=%1 susamış görünüyor
+02:01=Deniz seni istiyor %1
+02:01=%1 denizde kayboldu
+02:01=%1 dalış takımını getirmeliydi
+02:01=%1 denizde gömülüyor
+02:01=%1 batıyor gibi hissediyor
+02:01=%1 sırtüstü yüzme denemesi yapıyor
+02:01=%1 Titanik'i aramaya gidiyor
+02:01=%1 bu sefer güldürmedi
+02:01=%1 Nemo'yu arıyor
+02:01=%1 su alıyor
+02:01=Aşağıda kaç kirpi var bir bilsen
+02:01=%1 okyanus seviyesini yükseltiyor
+02:01=%1 orduya katılmamıştı
+02:01=%1 ölü balık taklidi yapıyor
+02:01=En azından tuvalette boğulmadın, %1
+02:01=Sonic yüzemezdi %1 de öyle
+02:01=%1 Ecco the dolphin oyunu oynamak istiyor
+02:01=%1 Akvaryum ziyaretine gitti
+02:01=%1 kayıp şehir Atlantis'i buldu
+02:01=%1 Bioshock 3'te baş rolü oynamaya gidiyor
+02:01=Patilerin biraz çalışabilirdi, %1
+02:01=%1 bir jet ski getirmeliydi
+02:01=%1 su sporlarını sevmiyor
+02:01=%1 sonsuza kadar baloncuk çıkarıyor
+02:01=%1 bir sala ihtiyaç duyuyor
+02:01=%1 tuzlu suyun cilt için iyi geldiğini düşünüyor
+02:01=%1 yarasına tuz basıyor
+02:01=%1 tahtada yürüdü
+02:01=%1 bir banyoya sahip
+02:01=%1 artık ıslak ıslak ıslak
+02:01=%1 tüylerini ıslattı
+02:01=O, %1 için bir Davy Jones dolabı
+
+; Round starts
+02:02=Savaş başlasın!
+02:02=Hazır ve nazır!
+02:02=Haykırmaya hazır ol!
+02:02=Hadi başlayalım!
+02:02=Artık parti başlasın
+02:02=Son kalan kirpi kazansın
+02:02=Hadi gidelim!
+02:02=Başlayalım!
+02:02=Bastır!
+02:02=Başlıyor...
+02:02=Bu büyük şeyin bir başlangıcı
+02:02=Hedgewars'a Hoş Geldin
+02:02=Sınır hattına hoş geldin
+02:02=Düşmanını ez!
+02:02=En iyi kirpi kazansın
+02:02=Zafer ya da ölüm
+02:02=Zafer ganimettir
+02:02=Kaybetmek bir seçenek değil
+02:02=Ağla tahribat! Kirpi savaşı başlasın!
+02:02=Hedgewars, Hedgewars.org tarafından sağlandı
+02:02=GL HF
+02:02=Şansın varmış Tiyuri'ye karşı oynamıyorsun
+02:02=Şansın varmış C0Rr'e karşı oynamıyorsunun
+02:02=Şansın varmış Nemo'ya karşı oynamıyorsun
+02:02=Şansın varmış Smaxx'e karşı oynamıyorsun
+02:02=Şansın varmış Jessor'e karşı oynamıyorsun
+02:02=Her şeyi ortaya koy!
+02:02=Kaybeden bulaşıkları yıkar!
+02:02=Binyıl dövüşü başlasın
+02:02=Yüzyıl dövüşü başlasın
+02:02=Onyıl dövüşü başlasın
+02:02=Yılın dövüşü başlasın
+02:02=Ayın dövüşü başlasın
+02:02=Haftanın dövüşü başlasın
+02:02=Günün dövüşü başlasın
+02:02=Saatin dövüşü başlasın
+02:02=Elinden geleni yap!
+02:02=Düşmanı yok et!
+02:02=İyi şanslar
+02:02=İyi eğlenceler
+02:02=İyi dövüş
+02:02=Pis dövüş
+02:02=Onura dövüş
+02:02=Pes etme
+02:02=Asla teslim olma
+02:02=Yen ve parçala!
+02:02=Parçalama festivali başlasın!
+02:02=Umarım mücadeleye hazırsın!
+02:02=Hadi Hadi Hadi!
+02:02=Hedgehogs devam!
+02:02=Göster onlara!
+02:02=Asla korkma!
+02:02=Cesur ol ve fethet
+
+; Round ends (win; unused atm)
+02:03=...
+
+; Round ends (draw; unused atm)
+02:04=...
+
+; New health crate
+02:05=Yardım geliyor!
+02:05=İlkyardım!
+02:05=Göklerden ilkyardım!
+02:05=Size bir sağlık paketi
+02:05=İyi sağlık... kutu biçiminde!
+02:05=Doktor çağırıyor
+02:05=Taze yara bantları!
+02:05=Bu daha iyi hissetmeni sağlayacak
+02:05=Büyük iksir! Aaa, yanlış oyun
+02:05=Bir beni-al!
+02:05=Yakala
+02:05=Sağlıklı bir atıştırmalık
+02:05=Acıya tedavi
+02:05=Kullanım dozu: bulabildiğin kadar çok!
+02:05=Acele posta
+02:05=Emanetler!
+
+; New ammo crate
+02:06=Daha çok silah!
+02:06=Destek geliyor!
+02:06=Kilitlen ve bırak!
+02:06=Acaba içinde hangi silah var?
+02:06=Tedarikler!
+02:06=İçinde ne olabilir?
+02:06=Hedgewars'ta yılbaşı erken geliyor
+02:06=Bir hediye!
+02:06=Özel posta!
+02:06=Bunu gümrükten geçirmek bir kabustu
+02:06=Cennetten yok edici oyuncaklar
+02:06=Uyarı! Uçucu İçerik
+02:06=Kaldır veya havaya uçur, seçim senin
+02:06=Eşyalar!
+02:06=Hım hım Cephane
+02:06=Yok edici güç kutusu
+02:06=Uçak postası!
+02:06=Bu kutuda ne varsa pizza olmadığı kesin
+02:06=Al şunu!
+02:06=Silah bırakılıyor
+02:06=Düşmanın bunu almasın!
+02:06=Yeni parlak oyuncaklar!
+02:06=Gizemli bir kutu!
+
+; New utility crate
+02:07=Araç zamanı!
+02:07=Bu işe yarayabilir...
+02:07=Araçlar!
+02:07=Bu kutudan yararlan
+02:07=Dikkat et
+02:07=Daha fazla alet!
+02:07=Senin için alet!
+02:07=Bu güzel olmalı!
+02:07=Zekice kullan
+02:07=Off bu kutu da ağırmış
+02:07=Buna ihtiyacın olabilir
+
+; Hog (%1) skips his turn
+02:08=%1 çoook sıkıcı...
+02:08=%1 rahatsız olamazdı
+02:08=%1 tembel bir kirpi
+02:08=%1 düşüncesiz
+02:08=%1 pes etti
+02:08=Ertelersen kaybedersin, %1
+02:08=%1 utanmaksızın geçiyor
+02:08=%1 gerçekten tembel
+02:08=%1 daha fazla motivasyona ihtiyacın var
+02:08=%1 bir barışcı
+02:08=%1 bir mola alıyor
+02:08=%1 dinleniyor
+02:08=%1 moral bozmuyor
+02:08=%1 yeteneklerine inanmıyor
+02:08=%1 hiçbir şey yapmamaya karar veriyor
+02:08=%1 düşmanın kendisini yok etmesine izin veriyor
+02:08=%1 partilerde berbat olur
+02:08=%1 saklanıyor
+02:08=%1 bu fırsatı değerlendirmek istemedi
+02:08=%1 yapabileceği en iyi şeyin...hiçbir şey olduğuna karar verdi
+02:08=%1 koca bir korkak
+02:08=Gıt gıt gıdak, %1 bir tavuk
+02:08=%1 küçük bir sarı arıyor
+02:08=%1 bir ürkek!
+02:08=%1 ani ölümü bekliyor
+02:08=%1 dövüş istemiyor
+02:08=%1 hayattaki amacını tekrar düşünüyor
+02:08=%1 hiçbir zaman iyi bir atış yapamadı zaten
+02:08=%1 orduya da isteyerek katılmamıştı
+02:08=Zamanımızı boşa harcamayı kes, %1
+02:08=Beni hayal kırıklığına uğrattın, %1
+02:08=Hadi ama, bundan daha iyisini yapabilirsin %1
+02:08=%1 kalbi kırıldı
+02:08=Görünüyor ki %1 daha iyi yapacak şeylere sahip
+02:08=%1 korkak bir ölü
+02:08=%1 uyuya kaldı
+
+; Hog (%1) hurts himself only
+02:09=%1 atış çalışmalı!
+02:09=%1 kendinden nefret ediyor gibi görünüyor
+02:09=%1 yanlış tarafta duruyor!
+02:09=%1 emo gibi yapıyor
+02:09=%1 silahını yanlış yönde tutuyordu
+02:09=%1 sanki biraz sadist
+02:09=%1 bir mazoşist
+02:09=%1 kendini koruma iç güdüsüne sahip değil
+02:09=%1 batırdı
+02:09=%1 mahvetti
+02:09=Kötü bir atıştı, %1
+02:09=%1 tehlikeli silahlarla çok dikkatsiz
+02:09=%1 kariyerini değiştirmeyi düşünmeli
+02:09=Dünyadaki. En berbat. Atıştı!
+02:09=Yo yo yo %1, DÜŞMANA ateş etmelisin!
+02:09=%1 sadece düşmanı yok etmeli
+02:09=%1 intihara bir adım daha yaklaşıyor
+02:09=%1 düşmana yardım ediyor
+02:09=Bu aptalcaydı %1
+02:09=%1 "acı yok, kazanmak yok" deyimiyle yaşıyor
+02:09=%1, sanki kafan karışık
+02:09=%1 yanlışlıkla kendine zarar veriyor
+02:09=%1, kendini utandırmakta üstüne yok
+02:09=%1 bir saloz!
+02:09=Sakarsın %1
+02:09=%1 düşmana yeteneklerini gösteriyor
+02:09=%1 her zaman mükemmel olması beklenemez
+02:09=Sorun değil %1, hiç kimse mükemmel değildir
+02:09=%1 bunu kesinlikle bilerek yaptı
+02:09=Yapmazsan kimseye söylemem, %1
+02:09=Ne utanç verici ama!
+02:09=Eminim kimse bunu görmedi %1
+02:09=%1 kendi alan kılavuzunu gözden geçirmeli
+02:09=%1 silahında sorun vardı
+
 ; Hog shot an home run (using the bat and another hog)
-02:10=Home Run!
-02:10=A bird, a plane, ...
-02:10=That one is out!
+02:10=Tur Vuruşu!
+02:10=Bu bir kuş. Hayır uçak, ...
+02:10=Bu çıkar!
+
+; Hog (%1) has to leave (team is gone)
+02:11=%1 uyumaya gitmeli!
+02:11=%1 oynamak için çok meşgul görünüyor
+02:11=Ateşle onu, Scotty!
+02:11=%1 gitmeli
+
+; Weapon Categories
+03:00=Zamanlı El Bombası
+03:01=Zamanlı El Bombası
+03:02=Balistik Silah
+03:03=Kılavuzlu Silah
+03:04=Tabanca (çok atışlı)
+03:05=Kazma Aracı
+03:06=Eylem
+03:07=Taşıma Yardımcısı
+03:08=Yakınlık Bombası
+03:09=Tabanca (çok atışlı)
+03:10=BUM!
+03:11=Bum!
+03:12=Dövüş Sanatları
+03:13=KULLANILMIYOR
+03:14=Taşıma Yardımcısı
+03:15=Hava Saldırısı
+03:16=Hava Saldırısı
+03:17=Kazma Aracı
+03:18=Yardımcı
+03:19=Taşıma Yardımcısı
+03:20=Eylem
+03:21=Balistik Silah
+03:22=Bana Indiana de!
+03:23=(Gerçekten) Dövüş Sanatları
+03:24=Pasta yalan DEĞİL!
+03:25=Kostüm Seti
+03:26=Meyveli El Bombası
+03:27=Ateşli El Bombası
+03:28=Balistik Silah
+03:29=Balistik Silah
+03:30=Hava Saldırısı
+03:31=Uzaktan Kumandalı Bomba
+03:32=Geçici Etki
+03:33=Geçici Etki
+03:34=Geçici Etki
+03:35=Geçici Etki
+03:36=Geçici Etki
+03:37=Geçici Etki
+03:38=Tabanca (çok atışlı)
+03:39=Taşıma Yardımcısı
+03:40=Yakıcı El Bombası
+03:41=Cıvıldamaların büyük fanı
+03:42=Burada bir şey demek istiyorum...
+; the misspelled "Beethoven" is intentional (-> to beat)
+03:43=Beathoven'ın ölümcül sonatasını gösteriyor
+03:44=Son kullanma tarihi: 1923
+03:45=Bilimin gücü
+03:46=Sıcak Sıcak Sıcak!
+03:47=Bunları kullanışlı bir yere yapıştır!
+03:48=Çekiç zamanı!
+03:49=Tahmin ettiğin şeyi yapıyor
+03:50=Köstebek fanı
+03:51=Zeminde bulunan
+03:52=KULLANILMIYOR
+03:53=Tür 40
+03:54=Bir şey inşa et
+03:55=Yardımcı
+
+; Weapon Descriptions (use | as line breaks)
+04:00=Düşmanlarına basit el bombası ile saldır.|Zamanlayıcı sıfır olduğunda patlayacak.|1-5: Bomba süresini ayarla|Saldır: Daha fazla güçte atmak için basılı tut
+04:01=Düğmanlarına parça tesirli bomba ile saldır.|Zamanlayıcı sıfır olduğunda daha küçük|bombalara dönüşür.|1-5: Bomba süresini ayarla|Saldır: Daha fazla güçte atmak için basılı tut
+04:02=Düşmanlarına rüzgardan etkilenebilecek|balistik mermi kullanarak saldır.|Saldır: Daha fazla güçle atış için basılı tut
+04:03=Seçili hedefe kilitlenecek patlayıcı bir arı|fırlat. Kesinliğini arttırmak için tam güçle|fırlatma.|İmleç: Hedef seç|Saldır: Daha fazla güçle atış için basılı tut
+04:04=Düşmanına iki atışla tüfek kullanarak saldır.|Yayılması sayesinde rakibine zarar vermen için|keskin vuruş yapman gerekmiyor.|Saldır: Ateş (çok kez)
+04:05=Yer altına hareket et! Çekici kullanarak|zemine bir delik kaz ve diğer yerlere ulaş.|Saldır: Kazmayı başlat ve durdur
+04:06=Sıkıldın mı? Saldıracak yer mi yok? Cephane mi |kurtarmak istiyorsun? Problem yok!|Pas geç korkak!|Saldır: Dövüşmeden turu atla
+04:07=İp kullanarak zamanlı atışlarla uzun mesafelere|bağlan. Diğer kirpilere doğru kaymak için|momentumunu kullan veya üzerlerine el bombası|ve diğer silahları at.|Saldır: At ve ipi bırak|Uzun Atlama: El bombası veya benzer silahları|bırak
+04:08=Küçük geçişlere veya ayaklarının yanına mayın|bırakarak düşmanı uzaklaştır. Kendin için|tetiklemediğinden emin ol!|Saldır: Ayağının yanına mayın bırak
+04:09=Hedefinden emin değil misin? Tabanca|kullanarak dört atışa kadar düşmanı vur.|Saldır: Ateş (çok kez)
+04:10=Zor kullanım her zaman bir seçenek. Bu klasik|patlayıcıyı düşmanının yanına koy ve çekil.|Saldır: Ayağının yanına dinamit bırak
+04:11=Düşman kirpilerden üzerlerine sopa ile vurarak|uzaklara veya suya düşür. Veya|arkadaşlarına birkaç mayın fırlatmak nasıl olurdu?|Saldır: Önündeki herşeye vurarak fırlat
+04:12=Yakınlaş ve neredeyse bu ölümcül dövüş sanatı|teknik gücünü ortaya çıkar.|Saldır: Muhteşem Yükselen Ejderha yap.
+04:13=KULLANILMIYOR
+04:14=Yükseklikten mi korkuyorsun? O zaman bir paraşüt|kullan.|Uzağa düşerken açılacak ve kirpinin düşme zararı|almasını engelleyecek|Saldır: Paraşütü aç|Uzun Atlama: El bombası veya benzeri silahlar bırak
+04:15=Bombalayıcı kulanarak uçakla düşmanlarına saldır.|Sol/Sağ: Saldırı yönünü belirle|İmleç: Hedef bölgeyi seç
+04:16=Hedef alana çeşitli mayın atacak bir uçak çağır.|Sol/Sağ: Saldırı yönünü belirle|İmleç: Hedef bölgeyi seç
+04:17=Korunak mı gerekiyor? Seni kaplayabilecek bir|tünel için kaynak makinesi kullan|Saldır: Kazmayı başlat/durdur
+04:18=Ek koruma mı gerekiyor? Yoksa geçilemez|zemini mi geçmek istiyorsun? İstediğin kadar|merdiven koy|Sol/Sağ: Yerleştilecek merdiveni seç|İmleç: Geçerli yere merdiven yerleştir
+04:19=Doğru yerde kullanıldığında ışınlanma tüm|silahlardan daha güçlü olabilir. Kirpileri|saniyeler içerisinde tehlikeli durumlardan|kurtarır.|İmleç: Hedef bölgeyi seç
+04:20=Geçerli turu başka bir kirpiyle oynamanı|sağlar.|Saldır: Kirpi değiştirmeyi etkinleştir
+04:21=El bombasına benzer bir füze fırlatır ve|çarpma sonrası çok sayıda bombaya dönüşür.|Saldır: Tam güçte fırlat
+04:22=Sadece Indiana Jones için değil! Kamçı|çoğu durumda çok kullanışlı bir silahtır.|Özellikle birini yamaçtan uçurmak için.|Saldır: Önündeki her şeye vur
+04:23=Eğer kaybedecek hiçbir şeyin yoksa, bu|kullanışlı olabilir. Kirpini özel bir yönde|başlatarak feda et ve önündeki her şeye|zarar verip sonunda patlamasını sağla.|Saldır: Şiddetli ve ölümcül bir saldırı başlat
+04:24=Mutlu Yıllar! Bu keki çalıştır, düşmanının yanına|yürümesine izin ver ve patlayan bir parti yapmalarını|sağla. Kek neredeyse tüm zeminlerden geçebilir|fakat yolun ortasında patlayabilir.|Saldır: Keki başlat ve durdurup patlat
+04:25=Bu kiti kullanarak düşmanlarının kirpine doğru zıplamasını|sağla (ve bir boşluk veya deliğe).|Saldır: Kiti kullan ve diğer kirpiyi etkile
+04:26=Bu sulu karpuzu düşmanına at. Zaman dolduğunda|çok sayıda patlayıcı parçaya ayrılacaktır.|1-5: Karpuz zaanlayıcısını ayarla.|Saldır: Daha fazla güçle atış için basılı tut
+04:27=Bu zalim patlayıcıyı kullanarak rakibini cehennem|ateş yağmuruna tut. Küçük ateşler daha|uzun süreceğinden yakın olmamaya dikkat et.|Saldır: Daha fazla güçle atış için basılı tut
+04:28=Bu roketi fırlattıktan kısa süre sonra katı zemini|kazmaya başlayacak ve tekrar yüzeye çıktığında|veya süresi dolduğunda patlayacak.|Saldır: Daha fazla güçle atış için basılı tut
+04:29=Bu küçük çocuklar için değil! Top tabancası patlayıcı|dolu tonlarca küçük renkli top fırlatır.|Saldır: Tam güçte atış yap|Yukarı/Aşağı: Nişan al
+04:30=Muhteşem napalm atışı için bir uçak çağır.|Doğru nişan ile bu saldırı zeminin büyük bölümünü|yok edebilir ve tabii ki şansız kirpileri de.|Sol/Sağ: Saldırı yönünü belirle|İmleç: Hedef bölgeyi seç
+04:31=RC uçağı sandıkları toplamak veya uzaktaki kirpilere|saldırmak için kullanışlı bir silahtır.|Doğrudan düşmanlara çarp veya ilk olarak bomba bırak.|Saldır: Uçağı başlat veya bomba bırak|Uzun Zıplama: Valkrie'lerin savaşa gelmelerini sağla|Sol/Sağ: Uçağı kontrol et
+04:32=Düşük yer çekimi diğer tüm diyetlerden daha etkilidir!|Daha yukarı ve büyük uzaklıklara zıpla|veya düşmanının daha uzağa uçmasını sağla|Saldır: Etkinleştir
+04:33=Bazen daha fazla zarar vermek için bu küçük ek güce|ihtiyacın olabilir.|Saldır: Etkinleştir
+04:34=Bana dokunamazsın!|Saldır: Etkinleştir
+04:35=Bazen zaman su gibi akıp geçiyor. Saldırını bitirmek|için ek saniye al.|Saldır: Etkinleştir
+04:36=Aslında bazen hedef tutturmada çok kötüsün. Modern|teknoloji kullanarak biraz yardım al.|Saldır: Etkinleştir
+04:37=Gün ışığından korkma. Sadece bir tur sürecek fakat|Diğer kirpilere verdiğin zararı emmeni sağlayacak.|Saldır: Etkinleştir
+04:38=Keskin nişancı tüfeği birliğindeki en zarar verici silah|olabilir ancak yakın mesafede etkisi azdır.|Hasar, hedef uzak oldukça daha çok artar.|Saldır: Ateş et (iki kez)
+04:39=Haritanın diğer yerlerine uçan daire ile uç.|Bu uzmanlaşmak için zaman gerektirir ve|alışana kadar savaş alanında her yere|götürebilir.|Saldır: Etkinleştir|Yukarı/Sol/Sağ: Bir yöne güç uygula|Uzun Atlama: El bombası veya|benzer silahlar bırak
+04:40=Set some ground on fire using this bottle filled|with (soon to be) burning liquid.|Saldır: Daha fazla güçle atış için basılı tut
+04:41=Doğa uçan dairenin üzerinde de olabilir|Kuşçuk kirpini taşıyabilir ve|düşmanlarına yumurta bırakabilir!|Hızlı ol, çünkü Kuşçuğu kullanmak |zamanını tüketir!|Saldır: Etkinleştir ve yumurta bırak|Yukarı/Sol/Sağ: Bir yöne kanat çırp
+04:42=Bu taşınabilir portal aygıtı seni, düşmanlarını|veya bir silahını zemindeki iki nokta arasında|hemen taşıma yeteneğine|sahip.|Zekice kullan ve maceran bir... BAŞARIYA|DÖNÜŞSÜN!|Saldır: Bir portal ateş et|Değiştir: Portal renkleri arasında geçiş yap
+04:43=Müzikal kariyerine başarılı bir patlamayla başla!|Cennetten bir piyano düşür, fakat dikkat et...|birinin çalması gerekiyor ve|bu senin hayatın olmasın.|İmleç: Hedef bölgeyi seç|F1-F9: Piyanoyu çal
+04:44=Bu sadece bir peynir değil, bir biyolojik silah!|Zamanlayıcı sıfır olduğunda koca bir hasar|vermenin yanında, kokuya dokunan şanssız|herkesi de zehirleyecek!|1-5: Bombanın zamanını ayarla|Saldır: Daha fazla güç ile fırlatmak için tut
+04:45=Sonunda fizik dersleri işe yaradı.|Düşmanlarına kocaman bir sinüs dalgası at.|Dikkatli ol, bu silah oldukça büyük bir vuruşa sahip|(Bu silah bitmedi)|Saldır: Ateş et
+04:46=Düşmanlarını sızan akışkan alevle kapla|Kalp ısıtıcı!|Saldır: Etkinleştir|Yukarı/Aşağı: Hedef almaya devam et|Sol/Sağ: Fışkırtma gücünü değiştir
+04:47=Dikenli, sinsi, yapışkan mayınlarla çifte zevk!|Zincirleme reaksiyon ayarla veya kendini koru (veya ikisi de!)|Saldır: Daha fazla güçle atış için basılı tut (iki kez)
+04:48=Niçin köstebeklere kötü davranılsın?|Bir kirpi de zevk için dövülebilir! Bu|çekicin iyi bir yanı kirpinin canının |üçte birini alması ve yer altına sokması.|Saldır: Etkinleştir
+04:49=Arkadaşlarını yeniden canlandır!|Fakat dikkatli ol, bu ayrıca düşmanlarını da|canlandırır.|Saldır: Yavaşça canlandırmak için saldırma|düğmesini basılı tut|Yukarı: Canlandırmayı hızlandır
+04:50=Biri altta mı saklanıyor?|Matkap saldırısı ile kaz!|Zamanlayıcı ne kadar kazılacağını denetler.
+04:51=Bir çamur topu fırlatarak ücretsiz bir atış kap.|Biraz kokar ancak kirpileri geri sektirir.
+04:52=KULLANILMIYOR
+04:53=Arkadaşlarını savaşta yalnız bırakarak|zaman ve uzaya seyahat et.|Herhangi bir an, Ani Ölüm veya tümü|ölmüşse geri gelmeye hazır ol.|Yadsıma: Ani Ölüm kipinde, tek isen veya|Kralsan çalışmaz.
+04:54=TAM DEĞİL
+04:55=Yapışkan tanecikler püskürt.|Köprü yap, düşmanı göm, tünelleri kapat.|Dikkatli ol sana gelmesin!
+
+; Game goal strings
+05:00=Oyun Kipleri
+05:01=Aşağıdaki kurallar uygulanır
+05:02=Kaleler: Kaleni savun; düşmanlarını alt et!
+05:03=Düşük Yer Çekimi: Adımına dikkat et
+05:04=Dayanıklılık: Kirpiler (neredeyse) zarar görmezler
+05:05=Vampirleşme: Verilen hasar kirpileri iyileştirir
+05:06=Karma: Verilen hasar kirpilere zarar verir
+05:07=Kralı Koru: Kralın ölmesine izin verme!|Kralı Yerleştir: Kralın için korunaklı bir başlangıç noktası seç
+05:08=Kirpileri Yerleştir: Kirpilerini oyun başlamadan önce yerleştir
+05:09=Ağır Sınıf: Kirpiler hareket etmek için yer değiştiremezler
+05:10=Yıkılmaz Zemin: Çoğu silah zemine zarar veremez
+05:11=Paylaşılan Cephane: Aynı renkteki tüm takımlar cephaneyi paylaşır
+05:12=Mayın Zamanlayıcı: Mayınlar %1 saniye sonra patlayacak
+05:13=Mayın Zamanlayıcı: Mayınlar hemen patlayacak
+05:14=Mayın Zamanlayıcı: Mayınlar 0 - 5 saniye içinde patlayacak
+05:15=Hasar Değiştirici: Tüm silahlar %%1 hasar verecek
+05:16=Tur sonunda tüm kirpilerin sağlığı sıfırlanacak
+05:17=Yapay zeka kirpileri öldükten sonra yeniden doğar
+05:18=Sınırsız Saldırı
+05:19=Silahlar her tur sonunda sıfırlanır
+05:20=Silahlar kirpiler arasında paylaşılmaz
+05:21=Takımları Etiketle: Klandaki takımlar başarılı turlar alır|Paylaşılan Zaman: Klandaki takımlar tur zamanını paylaşırlar
--- a/share/hedgewars/Data/Locale/uk.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/uk.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -286,8 +286,8 @@
 03:51=Знайдено на землі
 03:52=UNUSED
 03:53=Тип 40
-03:54=Збудуй щось
-03:55=Утиліта
+;03:54=Збудуй щось
+03:54=Утиліта
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Атакуй ворогів використовуючи просту гранату.|Вона вибухне як тільки її таймер доходить до нуля.|1-5: Вистав таймер гранати|Атака: Утримуй щоб метнути сильніше
@@ -344,8 +344,8 @@
 04:51=Здійсни халявний удар, шпурни грудку багна.|Трохи пече і відкидає їжака назад.
 04:52=UNUSED
 04:53=Здійсни подорож крізь час та простір,|залишивши товаришів битись далі самим.|Будь готовий повернутись в кожну мить,|або до Раптової смерті або до їх поразки.|Відмова. Не працює в Раптовій Смерті,|якщо ти один, або якщо ти Король.
-04:54=НЕЗАВЕРШЕНО
-04:55=Розпили потік лепких пластівців.|будуй мости, хорони ворогів, перекривай тунелі.|Стеж щоб на тебе не впала жодна з них!
+;04:54=НЕЗАВЕРШЕНО
+04:54=Розпили потік лепких пластівців.|будуй мости, хорони ворогів, перекривай тунелі.|Стеж щоб на тебе не впала жодна з них!
 
 ; Game goal strings
 05:00=Режими Гри
--- a/share/hedgewars/Data/Locale/zh_TW.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Locale/zh_TW.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -237,8 +237,6 @@
 02:01=%1 去水族館報到了
 ;02:01=%1 has found the lost city of Atlantis
 02:01=%1 找到了傳說中的亞特蘭蒂斯城
-;02:01=%1 aims for the lead role in Bioshock 3
-02:01=%1 的目的是為了在生化危機3中起帶頭作用
 ;02:01=Your doggy paddle could use a little work, %1
 02:01=狗爬式會有用的, %1
 ;02:01=%1 should have brought a jet ski
--- a/share/hedgewars/Data/Maps/Basketball/map.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Maps/Basketball/map.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 -- Hedgewars - Basketball for 2+ Players
 
-HedgewarsScriptLoad("Scripts/Locale.lua")()
+HedgewarsScriptLoad("/Scripts/Locale.lua")
 
 local score = {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0}
 
--- a/share/hedgewars/Data/Maps/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Maps/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -33,6 +33,14 @@
     portal
     Ropes
     Ruler
+    SB_Bones
+    SB_Crystal
+    SB_Grassy
+    SB_Grove
+    SB_Haunty
+    SB_Oaks
+    SB_Shrooms
+    SB_Tentacles
     Sheep
     ShoppaKing
     Sticks
--- a/share/hedgewars/Data/Maps/CTF_Blizzard/map.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Maps/CTF_Blizzard/map.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -91,7 +91,7 @@
 -- add support for more players
 -- re-enable sudden death, but set water rise to 0
 
-HedgewarsScriptLoad("Scripts/Locale.lua")()
+HedgewarsScriptLoad("/Scripts/Locale.lua")
 
 ---------------------------------------------------------------
 ----------lots of bad variables and things
--- a/share/hedgewars/Data/Maps/Control/map.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Maps/Control/map.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -49,7 +49,7 @@
 --script begins
 -----------------
 
-HedgewarsScriptLoad("Scripts/Locale.lua")()
+HedgewarsScriptLoad("/Scripts/Locale.lua")
 
 ---------------------------------------------------------------
 ----------lots of bad variables and things
Binary file share/hedgewars/Data/Maps/Eyes/preview.png has changed
--- a/share/hedgewars/Data/Maps/Knockball/map.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Maps/Knockball/map.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 -- Hedgewars - Knockball for 2+ Players
 
-HedgewarsScriptLoad("Scripts/Locale.lua")()
+HedgewarsScriptLoad("/Scripts/Locale.lua")
 
 local score = {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0}
 
Binary file share/hedgewars/Data/Maps/Octorama/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Bones/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,5 @@
+install(FILES
+    map.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Bones)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Bones/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Desert
+48
Binary file share/hedgewars/Data/Maps/SB_Bones/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Bones/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Crystal/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+install(FILES
+    map.png
+    mask.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Crystal)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Crystal/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Cave
+32
Binary file share/hedgewars/Data/Maps/SB_Crystal/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Crystal/mask.png has changed
Binary file share/hedgewars/Data/Maps/SB_Crystal/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Grassy/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+install(FILES
+    map.png
+    mask.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Grassy)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Grassy/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Castle
+40
Binary file share/hedgewars/Data/Maps/SB_Grassy/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Grassy/mask.png has changed
Binary file share/hedgewars/Data/Maps/SB_Grassy/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Grove/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+install(FILES
+    map.png
+    mask.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Grove)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Grove/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Nature
+48
Binary file share/hedgewars/Data/Maps/SB_Grove/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Grove/mask.png has changed
Binary file share/hedgewars/Data/Maps/SB_Grove/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Haunty/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+install(FILES
+    map.png
+    mask.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Haunty)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Haunty/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Halloween
+24
Binary file share/hedgewars/Data/Maps/SB_Haunty/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Haunty/mask.png has changed
Binary file share/hedgewars/Data/Maps/SB_Haunty/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Oaks/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+install(FILES
+    map.png
+    mask.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Oaks)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Oaks/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Nature
+48
Binary file share/hedgewars/Data/Maps/SB_Oaks/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Oaks/mask.png has changed
Binary file share/hedgewars/Data/Maps/SB_Oaks/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Shrooms/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+install(FILES
+    map.png
+    mask.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Shrooms)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Shrooms/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Nature
+48
Binary file share/hedgewars/Data/Maps/SB_Shrooms/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Shrooms/mask.png has changed
Binary file share/hedgewars/Data/Maps/SB_Shrooms/preview.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Tentacles/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+install(FILES
+    map.png
+    mask.png
+    map.cfg
+    preview.png
+    DESTINATION ${SHAREPATH}Data/Maps/SB_Tentacles)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Maps/SB_Tentacles/map.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Hell
+40
Binary file share/hedgewars/Data/Maps/SB_Tentacles/map.png has changed
Binary file share/hedgewars/Data/Maps/SB_Tentacles/mask.png has changed
Binary file share/hedgewars/Data/Maps/SB_Tentacles/preview.png has changed
--- a/share/hedgewars/Data/Maps/TrophyRace/map.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Maps/TrophyRace/map.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 -- Hedgewars - Roperace for 2+ Players
 
-HedgewarsScriptLoad("Scripts/Locale.lua")()
+HedgewarsScriptLoad("/Scripts/Locale.lua")
 
 -- store number of hedgehogs
 local numhhs = 0
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,9 @@
 file(GLOB Config *.ini)
 file(GLOB Missions *.lua)
+file(GLOB Packs *.hwp)
 
 install(FILES
     ${Config}
     ${Missions}
+    ${Packs}
     DESTINATION "${SHAREPATH}Data/Missions/Campaign/A Classic Fairytale")
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/backstab.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/backstab.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -760,7 +760,9 @@
     SaveCampaignVar("M5ChiefDead", "0")
   end
   SaveCampaignVar("M5Choice", "" .. choice)
-  SaveCampaignVar("Progress", "5")
+  if progress and progress<5 then
+    SaveCampaignVar("Progress", "5")
+  end
 
   for i = 1, 7 do 
     if natives[i] == deployedHog then
@@ -814,6 +816,7 @@
 end
 
 function GetVariables()
+  progress = tonumber(GetCampaignVar("Progress"))
   m2DenseDead = tonumber(GetCampaignVar("M2DenseDead"))
   m2Choice = tonumber(GetCampaignVar("M2Choice"))
   m4DenseDead = tonumber(GetCampaignVar("M4DenseDead"))
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/dragon.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/dragon.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -399,8 +399,11 @@
 
 function DoMissionFinished()
   AddCaption(loc("Salvation was one step closer now..."))
-  SaveCampaignVar("Progress", "6")
-  ParseCommand("teamgone " .. loc("011101001"))
+  if progress and progress<6 then
+    SaveCampaignVar("Progress", "6")
+  end
+  RestoreHedge(cyborg)
+  DeleteGear(cyborg)
   TurnTimeLeft = 0
 end
 
@@ -419,8 +422,8 @@
 end
 
 function EndMission()
-  ParseCommand("teamgone " .. loc("Natives"))
-  ParseCommand("teamgone " .. loc("011101001"))
+  RestoreHedge(cyborg)
+  DeleteGear(cyborg)
   TurnTimeLeft = 0
 end
 
@@ -451,6 +454,7 @@
 end
 
 function GetVariables()
+  progress = tonumber(GetCampaignVar("Progress"))
   m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum"))
 end
 
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/enemy.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/enemy.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -400,7 +400,9 @@
 end
 
 function WinMission()
-  SaveCampaignVar("Progress", "9")
+  if progress and progress<9 then
+    SaveCampaignVar("Progress", "9")
+  end
   ParseCommand("teamgone " .. loc("011101001"))
   TurnTimeLeft = 0
 end
@@ -420,6 +422,7 @@
 end
 
 function GetVariables()
+  progress = tonumber(GetCampaignVar("Progress"))
   m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum"))
   m2Choice = tonumber(GetCampaignVar("M2Choice"))
   m5Choice = tonumber(GetCampaignVar("M5Choice"))
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/family.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/family.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -284,7 +284,9 @@
 
 function DoPrincessFreed()
   AnimSay(princess, loc("Thank you, my hero!"), SAY_SAY, 0)
-  SaveCampaignVar("Progress", "7")
+  if progress and progress<7 then
+    SaveCampaignVar("Progress", "7")
+  end
   ParseCommand("teamgone " .. loc("011101001"))
   TurnTimeLeft = 0
 end
@@ -390,6 +392,7 @@
 end
 
 function GetVariables()
+  progress = tonumber(GetCampaignVar("Progress"))
   m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum"))
   m2Choice = tonumber(GetCampaignVar("M2Choice"))
   m5Choice = tonumber(GetCampaignVar("M5Choice"))
Binary file share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/first_blood.hwp has changed
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/first_blood.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/first_blood.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -56,6 +56,7 @@
 canKilled = false
 desertTaken = false
 challengeFailed = false
+deleteCrate = false
 difficultyChoice = false
 princessFace = "Left"
 elderFace = "Left"
@@ -220,6 +221,9 @@
 end
 -----------------------------Events------------------------------------
 function CheckNeedToTurn(gear)
+  if youngKilled then
+    return false
+  end
   if gear == princess then
     if princessKilled ~= true then
       if (GetX(princess) > GetX(youngh) and princessFace == "Right")
@@ -466,6 +470,7 @@
 
 function DoTimesUp()
   challengeFailed = true
+  deleteCrate = true
   DeleteGear(crates[1])
   TurnTimeLeft = -1
   AddCaption(loc("And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."))
@@ -538,7 +543,9 @@
 
 function DoCannibalKilled()
   AddAnim(cannKilledAnim)
-  SaveCampaignVar("Progress", "1")
+  if not progress then
+    SaveCampaignVar("Progress", "1")
+  end
 end
 
 function DoCannibalKilledEarly()
@@ -603,9 +610,7 @@
 	MinesTime = 3000
 	Explosives = 0
 	Delay = 10 
-	MapGen = 0
-  TemplateFilter = 6
-  TemplateNumber = 33
+	Map = "A_Classic_Fairytale_first_blood"
 	Theme = "Nature"
 
 
@@ -630,6 +635,7 @@
 end
 
 function onGameStart()
+  progress = tonumber(GetCampaignVar("Progress"))
   TurnTimeLeft = -1
   FollowGear(youngh)
 	ShowMission(loc("A Classic Fairytale"), loc("First Blood"), loc("Finish your training|Hint: Animations can be skipped with the [Precise] key."), -amSkip, 0)
@@ -664,6 +670,8 @@
     rope2Taken = true
   elseif gear == ropeCrate3 then
     rope3Taken = true
+  elseif gear == crates[1] and deleteCrate == true then
+    deleteCrate = false
   elseif gear == crates[1] and challengeFailed == false then
     crates[1] = nil
     cratesCollected = cratesCollected + 1
Binary file share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/journey.hwp has changed
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/journey.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/journey.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -903,7 +903,9 @@
 end
 
 function DoWon()
-  SaveCampaignVar("Progress", "3")
+  if progress and progress<3 then
+    SaveCampaignVar("Progress", "3")
+  end
   AddAnim(winAnim)
   AddFunction({func = FinishWon, args = {}})
 end
@@ -939,11 +941,10 @@
 	MinesTime = 3000
 	Explosives = 0
 	Delay = 5
-	MapGen = 0
-  TemplateFilter = 6
-  TemplateNumber = 27
-	Theme = "Nature"
-  SuddenDeathTurns = 3000
+    Map = "A_Classic_Fairytale_journey"
+    Theme = "Nature"
+
+    SuddenDeathTurns = 3000
 
 	AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy")
 	leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo")
@@ -974,6 +975,7 @@
 end
 
 function onGameStart()
+  progress = tonumber(GetCampaignVar("Progress"))
   m2Choice = tonumber(GetCampaignVar("M2Choice"))
   m2DenseDead = tonumber(GetCampaignVar("M2DenseDead"))
   m2RamonDead = tonumber(GetCampaignVar("M2RamonDead"))
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/queen.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/queen.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -575,6 +575,7 @@
 end
 
 function GetVariables()
+  progress = tonumber(GetCampaignVar("Progress"))
   m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum"))
   m2Choice = tonumber(GetCampaignVar("M2Choice"))
   m5Choice = tonumber(GetCampaignVar("M5Choice"))
@@ -606,7 +607,9 @@
   SaveCampaignVar("M8PrincessLeader", princessLeader)
   SaveCampaignVar("M8EnemyFled", enemyFled)
   SaveCampaignVar("M8Scene", "" .. scene)
-  SaveCampaignVar("Progress", "8")
+  if progress and progress<8 then
+    SaveCampaignVar("Progress", "8")
+  end
 end
 
 function SetupPlace()
Binary file share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/shadow.hwp has changed
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/shadow.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/shadow.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -761,7 +761,9 @@
   SaveCampaignVar("M2RamonDead", "0")
   SaveCampaignVar("M2SpikyDead", "0")
   AddFunction({func = KillCyborg, args = {}})
-  SaveCampaignVar("Progress", "2")
+  if progress and progress<2 then
+    SaveCampaignVar("Progress", "2")
+  end
   SaveCampaignVar("M2Choice", "" .. choice)
 end
 
@@ -783,7 +785,9 @@
   end
   AddAnim(refusedFinalAnim)
   AddFunction({func = KillCyborg, args = {}})
-  SaveCampaignVar("Progress", "2")
+  if progress and progress<2 then
+    SaveCampaignVar("Progress", "2")
+  end
   SaveCampaignVar("M2Choice", "" .. choice)
 end
 
@@ -791,7 +795,9 @@
   SaveCampaignVar("M2DenseDead", "1")
   SaveCampaignVar("M2RamonDead", "0")
   SaveCampaignVar("M2SpikyDead", "0")
-  SaveCampaignVar("Progress", "2")
+  if progress and progress<2 then
+    SaveCampaignVar("Progress", "2")
+  end
   SaveCampaignVar("M2Choice", "" .. choice)
   AddAnim(attackedFinalAnim)
   AddFunction({func = KillCyborg, args = {}})
@@ -839,11 +845,9 @@
 	MinesTime = 3000
 	Explosives = 0
 	Delay = 10 
-	MapGen = 0
-  TemplateFilter = 6
-  TemplateNumber = 22
+	Map = "A_Classic_Fairytale_shadow"
 	Theme = "Nature"
-  SuddenDeathTurns = 3000
+    SuddenDeathTurns = 3000
 
   AddHogs()
   PlaceHogs()
@@ -854,6 +858,7 @@
 end
 
 function onGameStart()
+  progress = tonumber(GetCampaignVar("Progress"))
   HideHogs()
   AddAmmo(leaks, amSwitch, 100)
   AddAmmo(dense, amSwitch, 100)
--- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/united.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/united.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -109,7 +109,9 @@
   else
     SaveCampaignVar("M4DenseDead", "0")
   end
-  SaveCampaignVar("Progress", "4")
+  if progress and progress<4 then
+    SaveCampaignVar("Progress", "4")
+  end
   ParseCommand("teamgone " .. loc("011101001"))
   TurnTimeLeft = 0
 end
@@ -416,6 +418,7 @@
 end
 
 function onGameStart()
+  progress = tonumber(GetCampaignVar("Progress"))
   GetVariables()
   SetupAmmo()
   SetupPlace()
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_Dangerous_Ducklings.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_Dangerous_Ducklings.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -1,11 +1,9 @@
 
 HedgewarsScriptLoad("/Scripts/Locale.lua")
 
-
 local player = nil -- This variable will point to the hog's gear
 local instructor = nil
 local enemy = nil
---local givenSpeech = false
 
 local speechStage = 0
 
@@ -33,22 +31,18 @@
 
 	AddTeam(loc("Bloody Rookies"), 14483456, "Simple", "Island", "Default")
 	player = AddHog(loc("Hunter"), 0, 1, "NoHat")
+	instructor = AddHog(loc("Instructor"), 0, 100, "sf_vega")
 
-	--AddTeam("Instructors", 14483456, "Simple", "Island", "Default")
-	instructor = AddHog(loc("Instructor"), 1, 1, "sf_vega")
-
-	AddTeam("Blue Team", 29439, "Simple", "Island", "Default")
-	enemy = AddHog("Filthy Blue", 1, 100, "Skull")
+	AddTeam(loc("Blue Team"), 29439, "Simple", "Island", "Default")
+	enemy = AddHog(loc("Filthy Blue"), 1, 100, "Skull")
 
 	SetGearPosition(player,146,902)
 	SetGearPosition(instructor,317,902)
 	SetGearPosition(enemy,1918,837)
 
-
 	HogSay(player, ".............................", SAY_THINK)
 	HogTurnLeft(instructor, true)
 
-
 end
 
 
@@ -59,15 +53,7 @@
 
 	FollowGear(player)
 
-	--spawnTarget()
-
-	-- Show some nice mission goals.
-	-- Parameters are: caption, sub caption, description,
-	-- extra text, icon and time to show.
-	-- A negative icon parameter (-n) represents the n-th weapon icon
-	-- A positive icon paramter (n) represents the (n+1)-th mission icon
-	-- A timeframe of 0 is replaced with the default time to show.
-	ShowMission(loc("Dangerous Ducklings"), "", loc("Eliminate the Blue Team"), -amRope, 1);
+	ShowMission(loc("Dangerous Ducklings"), "", loc("Eliminate the Blue Team"), -amRope, 5000);
 
 end
 
@@ -101,15 +87,14 @@
 
 	end
 
-
 	-- if player falls in water or if player ignores speech
 	if (CurrentHedgehog ~= nil) and (CurrentHedgehog == player) then
-		if (GetY(player) > 2060) and (gameLost == false) then
+		if (GetY(player) > WaterLine) and (gameLost == false) then
 			HogSay(instructor, loc("DAMMIT, ROOKIE!"), SAY_SHOUT)
 			gameLost = true
 		end
 
-		if (GetX(player) > 1324) and (GetY(player) > 1908) and (notListening == false) and (speechStage < 3) then
+		if (GetX(player) > 300) and (GetY(player) > 880) and (notListening == false) and (speechStage < 3) then
 			HogSay(instructor, loc("DAMMIT, ROOKIE! GET OFF MY HEAD!"), SAY_SHOUT)
 			notListening = true
 		end
@@ -126,10 +111,11 @@
 		endTimer = endTimer + 1
 		if (CurrentHedgehog ~= nil) and (CurrentHedgehog == instructor) then
 			if endTimer >= 3000 then
-				SetHealth(instructor,0)
-				TurnTimeLeft = 0
+				--SetHealth(instructor,0)
+				TurnTimeLeft = 1
+				ParseCommand("teamgone " .. loc("Bloody Rookies"))
 			end
-			ShowMission(loc("MISSION FAILED"), loc(":("), loc("You've failed. Try again."), -amRope, 1);
+			ShowMission(loc("MISSION FAILED"), loc(":("), loc("You've failed. Try again."), -amRope, 5000);
 		end
 	end
 
@@ -146,9 +132,12 @@
 	if GetGearType(gear) == gtHedgehog then
 		if gear == player then
 			gameLost = true
-		elseif gear == instructor then
+		elseif (gear == instructor) and (GetY(gear) > WaterLine) then
 			HogSay(player, loc("See ya!"), SAY_THINK)
 			TurnTimeLeft = 3000
+			AddCaption(loc("Achievement Unlocked") .. ": " .. loc("Naughty Ninja"),0xffba00ff,capgrpMessage2)
+			ParseCommand("teamgone " .. loc("Blue Team"))
+			gameWon = true
 		elseif gear == enemy then
 			HogSay(player, loc("Enjoy the swim..."), SAY_THINK)
 			gameWon = true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_Nobody_Laugh.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,130 @@
+--------------------------------------
+-- NOBODY LAUGH
+-- a hilarious (not really) adventure
+--------------------------------------
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+
+local hhs = {}
+
+function onGameInit()
+
+	Seed = 0
+	GameFlags = gfInfAttack + gfPerHogAmmo +gfDisableWind
+	SuddenDeathTurns = 9999
+	TurnTime = 180000
+	CaseFreq = 0
+	MinesNum = 0
+	Explosives = 0
+	Map = "Bath"
+	Theme = "Nature"
+
+	AddTeam(loc("Nameless Heroes"), 14483456, "eyecross", "Wood", "HillBilly", "cm_birdy")
+	hhs[1] = AddHog(loc( "Hunter" ), 0, 1, "Skull")
+	SetGearPosition(hhs[1], 1267, 451)
+	hhs[2] = AddHog(loc("Drowner"), 0, 31, "mp3")
+	SetGearPosition(hhs[2], 1332, 451)
+
+	AddTeam(loc("Clowns"), 1175851, "Duck2", "Tank", "Mobster", "cm_spider")
+	hhs[3] = AddHog("Poison", 5, 100, "WhySoSerious")
+	SetGearPosition(hhs[3], 1133, 446)
+	hhs[4] = AddHog("Bobo", 5, 100, "clown")
+	SetGearPosition(hhs[4], 1215, 553)
+	hhs[5] = AddHog("Copper", 5, 10, "clown-copper")
+	SetGearPosition(hhs[5], 414, 376)
+	hhs[6] = AddHog("Derp", 5, 100, "clown-crossed")
+	SetGearPosition(hhs[6], 1590, 886)
+	hhs[7] = AddHog("Eckles", 5, 100, "clown-copper")
+	SetGearPosition(hhs[7], 772, 754)
+	hhs[8] = AddHog("Frank", 5, 50, "clown-copper")
+	SetGearPosition(hhs[8], 1688, 714)
+	hhs[9] = AddHog("Harry", 5, 50, "clown-copper")
+	SetGearPosition(hhs[9], 1932, 837)
+	hhs[10] = AddHog("Igmund", 5, 50, "WhySoSerious")
+	SetGearPosition(hhs[10], 1601, 733)
+
+end
+
+function onGameStart()
+
+	AddAmmo(enemy, amAirAttack, 100)
+
+	ShowMission(	loc("Nobody Laugh"),
+					loc("User Challenge"),
+					loc("Eliminate the enemy before the time runs out")
+					, 0, 0
+				)
+
+	-- GIRDERS
+	PlaceGirder(1212, 710, 7)
+	PlaceGirder(1215, 570, 4)
+	PlaceGirder(1288, 520, 2)
+	PlaceGirder(1184, 468, 4)
+	PlaceGirder(1344, 468, 4)
+	PlaceGirder(1247, 346, 4)
+
+	PlaceGirder(667, 438, 4)
+	PlaceGirder(507, 438, 4)
+	PlaceGirder(434, 487, 2)
+	PlaceGirder(505, 537, 4)
+	PlaceGirder(665, 537, 4)
+	PlaceGirder(737, 487, 2)
+
+	PlaceGirder(416, 465, 6)
+	PlaceGirder(1415, 378, 6)
+	PlaceGirder(1300, 625, 3)
+	PlaceGirder(1359, 566, 3)
+	PlaceGirder(1436, 538, 0)
+	PlaceGirder(1505, 468, 4)
+
+	------ AMMO CRATE LIST ------
+	tempG = SpawnAmmoCrate(1242, 315, amBaseballBat)
+	tempG = SpawnAmmoCrate(1309, 315, amAirAttack)
+	tempG = SpawnAmmoCrate(144, 895, amAirAttack)
+	tempG = SpawnAmmoCrate(664, 699, amIceGun)
+	tempG = SpawnAmmoCrate(1572, 444, amFirePunch)
+	tempG = SpawnAmmoCrate(1574, 382, amDynamite)
+
+	------ UTIL CRATE LIST ------
+	tempG = SpawnUtilityCrate(654, 513, amParachute)
+	tempG = SpawnUtilityCrate(1569, 413, amParachute)
+
+	-- HOG AMMO
+	AddAmmo(hhs[1],amParachute,1)
+	AddAmmo(hhs[1],amHammer,1)
+	AddAmmo(hhs[2],amWhip,1)
+
+	for i = 3, 10 do
+		AddAmmo(hhs[i], amDeagle, 100)
+		AddAmmo(hhs[i], amShotgun, 100)
+		AddAmmo(hhs[i], amGrenade, 100)
+		AddAmmo(hhs[i], amBazooka, 100)
+		AddAmmo(hhs[i], amDrill, 100)
+	end
+
+end
+
+function onNewTurn()
+	SetWind(100)
+end
+
+function onAmmoStoreInit()
+
+	SetAmmo(amBaseballBat, 0, 0, 0, 1)
+	SetAmmo(amAirAttack, 0, 0, 0, 1)
+	SetAmmo(amFirePunch, 0, 0, 0, 1)
+	SetAmmo(amDynamite, 0, 0, 0, 1)
+	SetAmmo(amHammer, 0, 0, 0, 1)
+	SetAmmo(amIceGun, 0, 0, 0, 1)
+
+	SetAmmo(amParachute, 0, 0, 0, 1)
+
+	SetAmmo(amSwitch, 9, 0, 0, 0)
+	SetAmmo(amSkip, 9, 0, 0, 0)
+
+end
+
+------------------------------
+--                  I'm in         whitesppaaaaaaaaaacceeeee           :D
+------------------------------
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_RCPlane_Challenge.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_RCPlane_Challenge.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -20,7 +20,7 @@
 	Explosives = 0
 
 	AddTeam(loc("Wannabe Flyboys"), 14483456, "Simple", "Island", "Default", "Hedgewars")
-	player = AddHog(loc("Ace"), 0, 80, "Gasmask") --NoHat
+	player = AddHog(loc("Ace"), 0, 80, "Gasmask")
 	SetGearPosition(player, 1380, 1500)
 
 end
@@ -314,6 +314,10 @@
 
 		if cratesLeft == 0 then
 
+			if planesUsed == 1 then
+				AddCaption(loc("Achievement Unlocked") .. ": " .. loc("Prestigious Pilot"),0xffba00ff,capgrpMessage2)
+			end
+
 			ShowMission     (
                                 loc("CHALLENGE COMPLETE"),
                                 loc("Congratulations!"),
--- a/share/hedgewars/Data/Scripts/Locale.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Scripts/Locale.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -2,17 +2,8 @@
 
 local lang = HedgewarsScriptLoad("Locale/" .. tostring(L) .. ".lua")
 
-if lang ~= nil then
-    lang()
-else
-    lang = HedgewarsScriptLoad("Locale/" .. tostring(L) .. ".lua")
-    if lang ~= nil then
-        lang()
-    end
-end
-
 function loc(text)
-    if lang ~= nil and locale ~= nil and locale[text] ~= nil then return locale[text]
+    if locale ~= nil and locale[text] ~= nil then return locale[text]
     else return text
     end
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Frenzy.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Default
+locked
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Frenzy.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,142 @@
+-------------------------------------------
+-- FRENZY
+-- a hedgewars mode inspired by Hysteria
+-------------------------------------------
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+
+local cTimer = 0
+local cn = 0
+
+function initialSetup(gear)
+	SetHealth(gear, 75) -- official is 80, but that assumes bazookas/grenades that do 50 damage
+end
+
+function showStartingInfo()
+
+	ruleSet = "" ..
+	loc("RULES") .. ": " .. "|" ..
+	loc("Each turn is only ONE SECOND!") .. "|" ..
+	loc("Use your ready time to think.") .. "|" ..
+	loc("Slot keys save time! (F1-F10 by default)") .. "|" ..
+	" |" ..
+	loc("SLOTS") .. ": " .. "|" ..
+	loc("Slot") .. " 1 - " .. loc("Bazooka") .. "|" ..
+	loc("Slot") .. " 2 - " .. loc("Grenade") .. "|" ..
+	loc("Slot") .. " 3 - " .. loc("Shotgun") .. "|" ..
+	loc("Slot") .. " 4 - " .. loc("Shoryuken") .. "|" ..
+	loc("Slot") .. " 5 - " .. loc("Mine") .. "|" ..
+	loc("Slot") .. " 6 - " .. loc("Teleport") .. "|" ..
+	loc("Slot") .. " 7 - " .. loc("Blowtorch") .. "|" ..
+	loc("Slot") .. " 8 - " .. loc("Flying Saucer") .. "|" ..
+	loc("Slot") .. " 9 - " .. loc("Molotov") .. "|" ..
+	loc("Slot") .. " 10 - " .. loc("Low Gravity")
+
+	ShowMission(loc("FRENZY"),
+                loc("a frenetic Hedgewars mini-game"),
+                ruleSet, 0, 4000)
+
+end
+
+function onGameInit()
+
+	if TurnTime > 10001 then
+		Ready = 8000
+	else
+		Ready = TurnTime
+	end
+
+	TurnTime = 1000
+
+	--These are the official settings, but I think I prefer allowing customization in this regard
+	--MinesNum = 8
+	--MinesTime = 3000
+	--MinesDudPercent = 30
+	--Explosives = 0
+
+	--Supposedly official settings
+	HealthCaseProb = 0
+	CrateFreq = 0
+
+	--Approximation of Official Settings
+	--SuddenDeathTurns = 10
+	--WaterRise = 47
+	--HealthDecrease = 0
+
+end
+
+function onGameStart()
+	showStartingInfo()
+	runOnHogs(initialSetup)
+end
+
+function onSlot(sln)
+	cTimer = 8
+	cn = sln
+end
+
+function onGameTick()
+	if cTimer ~= 0 then
+		cTimer = cTimer -1
+		if cTimer == 1 then
+			ChangeWep(cn)
+			cn = 0
+			cTimer = 0
+		end
+	end
+end
+
+function ChangeWep(s)
+
+	if s == 0 then
+		ParseCommand("setweap " .. string.char(amBazooka))
+	elseif s == 1 then
+		ParseCommand("setweap " .. string.char(amGrenade))
+	elseif s == 2 then
+		ParseCommand("setweap " .. string.char(amShotgun))
+	elseif s == 3 then
+		ParseCommand("setweap " .. string.char(amFirePunch))
+	elseif s == 4 then
+		ParseCommand("setweap " .. string.char(amMine))
+	elseif s == 5 then
+		ParseCommand("setweap " .. string.char(amTeleport))
+	elseif s == 6 then
+		ParseCommand("setweap " .. string.char(amBlowTorch))
+	elseif s == 7 then
+		ParseCommand("setweap " .. string.char(amJetpack))
+	elseif s == 8 then
+		ParseCommand("setweap " .. string.char(amMolotov))
+	elseif s == 9 then
+		ParseCommand("setweap " .. string.char(amLowGravity))
+	end
+
+end
+
+function onGearAdd(gear)
+	if GetGearType(gear) == gtHedgehog then
+		trackGear(gear)
+	end
+end
+
+function onGearDelete(gear)
+	if GetGearType(gear) == gtHedgehog then
+		trackDeletion(gear)
+	end
+end
+
+function onAmmoStoreInit()
+	SetAmmo(amBazooka, 9, 0, 0, 0)
+	SetAmmo(amGrenade, 9, 0, 0, 0)
+	SetAmmo(amMolotov, 9, 0, 0, 0)
+	SetAmmo(amShotgun, 9, 0, 0, 0)
+	--SetAmmo(amFlamethrower, 9, 0, 0, 0) -- this was suggested on hw.org but it's not present on base
+	SetAmmo(amFirePunch, 9, 0, 0, 0)
+	SetAmmo(amMine, 9, 0, 0, 0)
+	--SetAmmo(amCake, 1, 0, 2, 0) -- maybe it's beefcake?
+	SetAmmo(amJetpack, 9, 0, 0, 0)
+	SetAmmo(amBlowTorch, 9, 0, 0, 0)
+	SetAmmo(amTeleport, 9, 0, 0, 0)
+	SetAmmo(amLowGravity, 9, 0, 0, 0)
+	--SetAmmo(amSkipGo, 9, 0, 0, 0) -- not needed with 1s turn time
+end
--- a/share/hedgewars/Data/Scripts/Multiplayer/Highlander.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Highlander.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -1,6 +1,6 @@
 --------------------------------
 -- HIGHLANDER / HOGS OF WAR
--- version 0.4
+-- version 0.4b
 -- by mikade
 --------------------------------
 
@@ -63,10 +63,15 @@
 -- add more whitespace
 -- break everything
 
+-----------
+--0.4b
+-----------
+-- as per request, add ice-gun
+
 -------------------------
 -- ideas for the future
 -------------------------
--- add ice gun, structure
+-- add structure
 -- allow switcher, resurrector
 -- add abuse
 -- nerf teleport
@@ -90,7 +95,7 @@
 local atkArray = 	{
 					amBazooka, amBee, amMortar, amDrill, --[[amSnowball,]]
 					amGrenade, amClusterBomb, amMolotov, amWatermelon, amHellishBomb, amGasBomb,
-					amShotgun, amDEagle, amFlamethrower, amSniperRifle, amSineGun,
+					amShotgun, amDEagle, amFlamethrower, amSniperRifle, amSineGun, amIceGun,
 					amFirePunch, amWhip, amBaseballBat, --[[amKamikaze,]] amSeduction, --[[amHammer,]]
 					amMine, amDynamite, amCake, amBallgun, amRCPlane, amSMine,
 					amRCPlane, amSMine,
--- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -1,625 +1,615 @@
-local MUTANT_VERSION = "v0.9.4"
-
---[[                  ___                   ___
-                    (   )                 (   )
-___ .-. .-. ___  ___ | |_    .---. ___ .-. | |_
-(   )   '   (   )(   (   __) / .-, (   )   (   __)
-|  .-.  .-. | |  | | | |   (__) ; ||  .-. .| |
-| |  | |  | | |  | | | | ___ .'`  || |  | || | ___
-| |  | |  | | |  | | | |(   / .'| || |  | || |(   )
-| |  | |  | | |  | | | | | | /  | || |  | || | | |
-| |  | |  | | |  ; ' | ' | ; |  ; || |  | || ' | |
-| |  | |  | ' `-'  / ' `-' ' `-'  || |  | |' `-' ;
-(___)(___)(___'.__.'   `.__.`.__.'_(___)(___)`.__.
-
-
-----  IMPORTANT!
-----
-----  You should save (press Ctrl+S) this script to:
-----  Program Files\Hedgewars\share\hedgewars\Data\Scripts\Multiplayer\Mutant.lua
-----     or (on Linux):
-----  ~/.hedgewars/Data/Scripts/Multiplayer/Mutant.lua
-----
-----  (or wherever scripts like Highlander.lua, Racer.lua are on your system)
-----
-----  Also, if you didn't have Mutant script yet, you need to restart Hedgewars for it to find the script file.
-----
-
-
-----  GAME RULES
-----
-----  Recommended settings:
-----    * one hedgehog per team
-----    * 'Small' one-island map
-----
-----  First one to kill anyone becomes Mutant. Mutant has super-weapons
-----  and a lot of health, which however depletes if he doesn't frag fast.
-----  Goal of Mutant is to use his weapons to hold his status for as long
-----  as he can.
-----  Goal of others is to hunt the Mutant down. The one who kills Mutant,
-----  becomes Mutant himself.
-----  The player with least points (or most deaths) is Bottom Feeder. He
-----  can gain points by killing anyone. Other normal players only get points
-----  for killing Mutant.
-----
-----  Points:
-----    +2 for becoming a Mutant
-----    +1 to a Mutant for killing anyone
-----    +1 to a Bottom Feeder for killing anyone
-----    -1 to anyone for a suicide
-----   other kills don't give you points.
-----
-
---]]
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-HedgewarsScriptLoad("/Scripts/Tracker.lua")
-
---[[
-    MUTANT SCRIPT
-
-    To Do:  -Clean-up this fucking piece of code
-            -Debug
-            -Find a girlfriend
-            -Fix Sheepluva's hat  +[p]
-            -Cookies
-
------------------------]]
-
-local hhs = {}
-local numhhs = 0
-
-local gameOver=false
-
-local mutant = nil
-local mutant_base_health = 200
-local mutant_base_disease = 25
-local disease_timer = 2000
-
-local kill_reward = nil
-local mt_hurt=false
-
-local killsCounter = 0
-
-local team_fire_punishment = 3
-local mutant_kill_reward = 2
-
-local hh_weapons = { amBazooka, amGrenade, amShotgun, amMine}
-
-local mt_weapons = {amWatermelon, amHellishBomb, amBallgun, amRCPlane, amTeleport}
-
-local disease=0
-local timer=0
-
-local winScore = 15
-local hogsLimit = 1
-
-local teams = {}
-
-local circles = {}
-local circleFrame = -1
-
-function onGameInit()
-    TurnTime = 20000
-    WaterRise = 0
-    GameFlags = GameFlags + gfResetWeps + gfPerHogAmmo
-    HealthCaseProb=0
-    HealthCaseAmount=0
-    MinesTime=1000
-    CaseFreq = 2
-
-end
-
-
-function limitHogs(gear)
-    cnthhs = cnthhs + 1
-        if cnthhs > 1 then
-            hogLimitHit = true
-            SetEffect(gear, heResurrectable, false)
-            --SetHealth(gear, 0)
-            SetGearPosition(gear, -100,LAND_HEIGHT)
-        end
-end
-
-function onGameStart()
-    trackTeams()
-    teamScan()
-    runOnHogs(saveStuff)
-    --local str = "/say " .. MUTANT_VERSION
-    --ParseCommand(str)
-
-    hogLimitHit = false
-    for i=0 , TeamsCount - 1 do
-        cnthhs = 0
-        runOnHogsInTeam(limitHogs, teams[i])
-    end
-    if hogLimitHit then
-        AddCaption(loc("ONE HOG PER TEAM! KILLING EXCESS HEDGES"))
-    end
-end
-
-
-
-function giveWeapons(gear)
-
-    if gear == mutant then
-        AddAmmo(gear, amRope)
-        for i=1, #mt_weapons do
-            AddAmmo(gear, mt_weapons[i])
-        end
-
-    else
-        for i=1, #hh_weapons do
-            AddAmmo(gear,hh_weapons[i])
-        end
-    end
-end
-
-function onAmmoStoreInit()
-
-    SetAmmo(amSkip, 9, 0, 0, 0)
-    SetAmmo(amRope,0,1,0,5)
-    SetAmmo(amSnowball,0,1,0,1)
-
-    for i=1, #hh_weapons do
-        SetAmmo(hh_weapons[i], 0, 0, 0, 1)
-    end
-
-    for i=1, #mt_weapons do
-        SetAmmo(mt_weapons[i], 0, 3, 0, 1)
-    end
-
-end
-
-function drawCircles()
-    for i = 0, #hhs do
-        if circles[hhs[i]] ~= nil then
-            DeleteVisualGear(circles[hhs[i]])
-            circles[hhs[i]] = nil
-        end
-
-        if hhs[i] ~= CurrentHedgehog then
-            if mutant == nil then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
-            elseif CurrentHedgehog == mutant then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
-            elseif getGearValue(CurrentHedgehog, "Feeder") and hhs[i] ~= mutant then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
-            elseif hhs[i] == mutant then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
-            end
-        end
-    end
-    circleFrame = 0
-end
-
-function onNewTurn()
-
-    trackTeams()
-    killsCounter = 0
-
-    if mutant == nil then
-        AddCaption( loc("FIRST BLOOD MUTATES") )
-    end
-
-    checkScore()
-    giveWeapons(CurrentHedgehog)
-    drawCircles()
-    setAIHints()
-    kill_reward= numhhs*10
-
-    if CurrentHedgehog == mutant then
-        mt_hurt=true
-        disease= mutant_base_disease - numhhs
-    else
-        mt_hurt=false
-    end
-
-    setGearValue(CurrentHedgehog, "Alive", true)
-
-end
-
-function countBodies()
-        if killsCounter == 2 then
-            AddCaption(loc("DOUBLE KILL"))
-        elseif killsCounter == 3 then
-            AddCaption(loc("MEGA KILL"))
-            PlaySound(sndRegret)
-        elseif killsCounter == 4 then
-            AddCaption(loc("ULTRA KILL"))
-        elseif killsCounter == 5 then
-            AddCaption(loc("MONSTER KILL"))
-            PlaySound(sndIllGetYou)
-        elseif killsCounter == 6 then
-            AddCaption(loc("LUDICROUS KILL"))
-            PlaySound(sndNutter)
-        elseif killsCounter == 7 then
-            AddCaption(loc("HOLY SHYTE!"))
-            PlaySound(sndLaugh)
-        elseif killsCounter > 8 then
-            AddCaption(loc("INSANITY"))
-        end
-
-end
-
-function onGameTick()
-
-    if circleFrame > -1 then
-        for i = 0, #hhs do
-            if circles[hhs[i]] ~= nil and hhs[i]~= nil then
-                hhx, hhy = GetGearPosition(hhs[i])
-                X, Y, dX, dY, Angle, Frame, FrameTicks, State, Timer, Tint = GetVisualGearValues(circles[hhs[i]])
-                SetVisualGearValues(circles[hhs[i]], hhx + 1, hhy - 3, 0, 0, 0, 0, 0, 40 - (circleFrame % 25), Timer, Tint)
-            end
-        end
-
-        circleFrame = circleFrame + 0.06
-
-        if circleFrame >= 25 then
-            for i = 0, #hhs do
-                if circles[hhs[i]] ~= nil then
-                    DeleteVisualGear(circles[hhs[i]])
-                    circles[hhs[i]] = nil
-                end
-            end
-        end
-    end
-
-    if TurnTimeLeft==0 and mt_hurt then
-        mt_hurt = false
-    end
-
-    if mt_hurt and mutant~=nil then
-        timer = timer + 1
-            if timer > disease_timer then
-                timer = 0
-                SetHealth(mutant, GetHealth(mutant)-disease )
-                AddVisualGear(GetX(mutant), GetY(mutant)-5, vgtHealthTag, disease, true)
-                    if GetHealth(mutant)<=0 then
-                        SetHealth(mutant,0)
-                        mt_hurt= false
-                        setGearValue(mutant,"SelfDestruct",true)
-                        TurnTimeLeft = 0
-                    end
-            end
-    end
-end
-
-function saveStuff(gear)
-    setGearValue(gear,"Name",GetHogName(gear))
-    setGearValue(gear,"Hat",GetHogHat(gear))
-end
-
-function armageddon(gear)
-    SetState(gear, gstLoser)
-    SetEffect(gear, heResurrectable, false)
-    SetHealth(gear, 0)
-end
-
-function updateScore()
-local showScore = ""
-
-    for i=0, TeamsCount-1 do
-        if teams[i]~= nil then
-
-            local curr_score = getTeamValue(teams[i], "Score")
-            showScore = showScore .. teams[i] .. ": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
-
-        end
-    end
-
-    ShowMission(loc("Score"),
-                "-------",
-                showScore, 0, 200)
-
-    HideMission()
-
-end
-
-function checkScore()
-local showScore = ""
-local lowest_score_team = nil
-local min_score=nil
-local winTeam = nil
-
-local only_low_score = true
-
-    for i=0, TeamsCount-1 do
-        if teams[i]~=nil then
-            local curr_score = getTeamValue(teams[i], "Score")
-
-            runOnHogsInTeam(removeFeeder, teams[i])
-
-            showScore = showScore .. teams[i] ..": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
-
-            if curr_score >= winScore then
-                gameOver = true
-                winTeam = teams[i]
-            end
-
-            if min_score==nil then
-                min_score= curr_score
-                lowest_score_team = teams[i]
-            else
-                if curr_score <= min_score then
-                    if curr_score == min_score then
-                        if getTeamValue(teams[i], "DeadHogs") == getTeamValue(lowest_score_team, "DeadHogs") then
-                            only_low_score = false
-                        else
-                            if getTeamValue(teams[i], "DeadHogs") > getTeamValue(lowest_score_team, "DeadHogs") then
-                                lowest_score_team = teams[i]
-                            end
-                            only_low_score = true
-                        end
-
-                    else
-                        min_score= curr_score
-                        lowest_score_team = teams[i]
-                        only_low_score = true
-                    end
-                end
-            end
-        end
-    end
-
-    if gameOver then
-        TurnTimeLeft = 0
-        for i=0, #teams do
-            if teams[i]~=winTeam then
-                runOnHogsInTeam(armageddon, teams[i])
-            end
-        end
-
-    ShowMission(    loc("WINNER IS ") .. winTeam,
-                    "~~~~~~~~~~~~~~~~~~~~~~~~~",
-                    showScore, 0, 200)
-    else
-
-    if only_low_score then
-        runOnHogsInTeam(setFeeder, lowest_score_team)
-    end
-
-    ShowMission(    loc("Score"),
-                    loc("-------"),
-                    showScore, 0, 200)
-
-    end
-end
-
-function backToNormal(gear)
-
-    SetHogName(gear, getGearValue(gear,"Name"))
-    SetHogHat(gear, 'NoHat')
-    SetHogHat(gear, getGearValue(gear,"Hat"))
-    setGearValue(mutant,"SelfDestruct",false)
-    mt_hurt=false
-    mutant=nil
-end
-
-function setAIHints()
-    for i = 0, #hhs do
-        if mutant == nil or hhs[i] == mutant or CurrentHedgehog == mutant then
-            SetGearAIHints(hhs[i], aihUsual)
-        else
-            SetGearAIHints(hhs[i], aihDoesntMatter)
-        end
-    end
-end
-
-function removeFeeder(gear)
-
-    if gear~=nil then
-        setGearValue(gear,"Feeder",false)
-        if gear~= mutant then
-            SetHogName(gear, getGearValue(gear,"Name") )
-            SetHogHat(gear, 'NoHat')
-            SetHogHat(gear, getGearValue(gear,"Hat"))
-        end
-    end
-end
-
-function setFeeder(gear)
-
-    if gear~= mutant and gear~= nil then
-        SetHogName(gear,"BOTTOM FEEDER")
-        SetHogHat(gear, 'poke_slowpoke')
-        setGearValue(gear,"Feeder", true)
-    end
-end
-
-function setMutantStuff(gear)
-    mutant = gear
-
-    SetHogName(gear,"MUTANT")
-    SetHogHat(gear,'WhySoSerious')
-    SetHealth(gear, ( mutant_base_health + numhhs*25) )
-    SetEffect(gear, hePoisoned, 1)
-    setGearValue(mutant,"SelfDestruct",false)
-    setGearValue(gear, "Feeder", false)
-
-    AddCaption(getGearValue(gear, "Name") .. loc(" HAS MUTATED"))
-
-    TurnTimeLeft=0
-
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    PlaySound(sndSuddenDeath)
-end
-
-function teamScan()
-
-        for i=0, TeamsCount-1 do --nil filling
-        teams[i]=nil
-        end
-
-        for i=0, #hhs do
-            for j=0, TeamsCount-1 do
-                if teams[j] ==nil and hhs[i]~=nil then
-                teams[j] = GetHogTeamName(hhs[i])
-                setTeamValue(teams[j],"Score",0)
-                setTeamValue(teams[j], "DeadHogs",0)
-                break
-                end
-
-                if teams[j] == GetHogTeamName(hhs[i]) then
-                    break
-                end
-            end
-        end
-
-        ---***---
-end
-
-
-function onGearDamage(gear, dmg)
-
-end
-
-function set_Mutant_and_Score(gear)
-
-local curr_team = GetHogTeamName(CurrentHedgehog)
-
-    if gear == CurrentHedgehog then
-        if CurrentHedgehog == mutant then
-            PlaySound(sndHomerun)
-            if getGearValue(gear, "SelfDestruct")==false then
-                decreaseTeamValue(curr_team,"Score")
-            end
-            backToNormal(gear)
-        else
-            decreaseTeamValue(curr_team,"Score")
-        end
-
-    else
-            if gear == mutant then
-                    backToNormal(mutant)
-                    if curr_team ~=GetHogTeamName(gear) then
-                            if  getGearValue(CurrentHedgehog, "Alive") then
-                            setMutantStuff(CurrentHedgehog)
-                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
-                            end
-                    else
-                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
-                    end
-            else
-                if mutant==nil then
-                        if curr_team ~=GetHogTeamName(gear) then
-                            if getGearValue(CurrentHedgehog, "Alive") then
-                                    setMutantStuff(CurrentHedgehog)
-                                    setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
-                            else
-                                increaseTeamValue(curr_team,"Score")
-                            end
-                        else
-                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
-                        end
-                else
-                    if curr_team ~=GetHogTeamName(gear) then
-                        if CurrentHedgehog==mutant and getGearValue(mutant,"SelfDestruct")==false then
-                            SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+kill_reward)
-                            AddCaption("+" .. kill_reward .. loc(" HP") )
-                            increaseTeamValue(curr_team,"Score")
-                        end
-                        if getGearValue(CurrentHedgehog,"Feeder") then
-                            increaseTeamValue(curr_team,"Score")
-                        end
-                    else
-                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
-                    end
-                end
-            end
-    end
-end
-
-function onGearResurrect(gear)
-if not gameOver then
-    if GetGearType(gear) == gtHedgehog then
-
-        increaseTeamValue(GetHogTeamName(gear), "DeadHogs")
-
-        if gear==CurrentHedgehog then
-            setGearValue(CurrentHedgehog, "Alive", false)
-        end
-        set_Mutant_and_Score(gear)
-        if gear~=CurrentHedgehog then
-            killsCounter = killsCounter + 1
-            countBodies()
-        end
-        AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-        PlaySound(sndWhack)
-        updateScore()
-    end
-end
-end
-
-function onGearAdd(gear)
-
-    -- Catch hedgehogs for the tracker
-    if GetGearType(gear) == gtHedgehog then
-        trackGear(gear)
-        hhs[numhhs] = gear
-        numhhs = numhhs + 1
-        SetEffect(gear, heResurrectable, 1)
-    end
-end
-
-function checkEmptyTeam (teamName)
-    for i=0 , #hhs do
-        if hhs[i]~=nil then
-            if teamName == GetHogTeamName(hhs[i]) then
-                return false
-            end
-        end
-    end
-    return true
-end
-
-function onGearDelete(gear)
-    -- Remove hogs that are gone
-    if GetGearType(gear) == gtHedgehog then
-        numhhs = numhhs - 1
-
-        local found
-        for i=0, #hhs do
-            if hhs[i] == gear then
-                found = i
-                break
-            end
-        end
-        for i = found, #hhs - 1 do
-            hhs[i] = hhs[i + 1]
-        end
-        hhs[#hhs] = nil
-
-        local t_name = GetHogTeamName(gear)
-        if checkEmptyTeam(t_name) then
-            for i = 0, TeamsCount - 1 do
-                if teams[i] == t_name then
-                    found = i
-                    break
-                end
-            end
-            for i = found, TeamsCount - 2 do
-                teams[i] = teams[i + 1]
-            end
-            teams[TeamsCount - 1] = nil
-            TeamsCount = TeamsCount - 1
-        end
-        AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
-        trackDeletion(gear)
-    end
-end
-
---[[
-S T A R R I N G
-
-    prof - Coding, implementing and evangelism
-    vos  - Initial idea and script improvements
---]]
+local MUTANT_VERSION = "v0.9.5"
+
+--[[                  ___                   ___
+                    (   )                 (   )
+___ .-. .-. ___  ___ | |_    .---. ___ .-. | |_
+(   )   '   (   )(   (   __) / .-, (   )   (   __)
+|  .-.  .-. | |  | | | |   (__) ; ||  .-. .| |
+| |  | |  | | |  | | | | ___ .'`  || |  | || | ___
+| |  | |  | | |  | | | |(   / .'| || |  | || |(   )
+| |  | |  | | |  | | | | | | /  | || |  | || | | |
+| |  | |  | | |  ; ' | ' | ; |  ; || |  | || ' | |
+| |  | |  | ' `-'  / ' `-' ' `-'  || |  | |' `-' ;
+(___)(___)(___'.__.'   `.__.`.__.'_(___)(___)`.__.
+
+
+----  Recommended settings:
+----    * one hedgehog per team
+----    * 'Small' one-island map
+
+--]]
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+
+--[[
+    MUTANT SCRIPT
+
+    To Do:  -Clean-up this fucking piece of code
+            -Debug
+            -Find a girlfriend
+            -Fix Sheepluva's hat  +[p]
+            -Cookies
+-----------------------]]
+
+local hhs = {}
+local numhhs = 0
+local meh = false
+
+local gameOver=false
+
+local mutant = nil
+local mutant_base_health = 200
+local mutant_base_disease = 25
+local disease_timer = 2000
+
+local kill_reward = nil
+local mt_hurt=false
+
+local killsCounter = 0
+
+local team_fire_punishment = 3
+local mutant_kill_reward = 2
+
+local hh_weapons = { amBazooka, amGrenade, amShotgun, amMine}
+
+local mt_weapons = {amWatermelon, amHellishBomb, amBallgun, amRCPlane, amTeleport}
+
+local disease=0
+local timer=0
+
+local winScore = 15
+local hogsLimit = 1
+
+local teams = {}
+
+local circles = {}
+local circleFrame = -1
+
+function showStartingInfo()
+
+	ruleSet = loc("RULES") .. ": " ..
+	" |" .. --" |" ..
+	loc("The first player to kill someone becomes the Mutant.") .. "|" ..
+	loc("The Mutant has super-weapons and a lot of health.") .. "|" ..
+	loc("The Mutant loses health quickly if he doesn't keep scoring kills.") .. "|" ..
+	" |" ..
+	loc("Normal players can only score points by killing the mutant.") .. "|" ..
+	" |" .. "" ..
+	loc("The player with least points (or most deaths) becomes the Bottom Feeder.") .. "|" ..
+	loc("The Bottom Feeder can score points by killing anyone.") .. "|" ..
+	" |" ..
+	loc("POINTS") .. ": " ..
+	" |" ..
+	loc("+2 for becoming a Mutant") .. "|" ..
+	loc("+1 to a Mutant for killing anyone") .. "|" ..
+	loc("+1 to a Bottom Feeder for killing anyone") .. "|" ..
+	loc("-1 to anyone for a suicide") .. "|" ..
+	loc("Other kills don't give you points.")
+
+	ShowMission(loc("Mutant"),
+                loc("a Hedgewars tag game"),
+                ruleSet, 0, 5000)
+
+end
+
+function onGameInit()
+    TurnTime = 20000
+    WaterRise = 0
+    GameFlags = GameFlags + gfResetWeps + gfPerHogAmmo
+    HealthCaseProb=0
+    HealthCaseAmount=0
+    MinesTime=1000
+    CaseFreq = 2
+end
+
+
+function limitHogs(gear)
+    cnthhs = cnthhs + 1
+        if cnthhs > 1 then
+            hogLimitHit = true
+            SetEffect(gear, heResurrectable, false)
+            --SetHealth(gear, 0)
+            SetGearPosition(gear, -100,LAND_HEIGHT)
+        end
+end
+
+function onGameStart()
+    trackTeams()
+    teamScan()
+    runOnHogs(saveStuff)
+    --local str = "/say " .. MUTANT_VERSION
+    --ParseCommand(str)
+
+    hogLimitHit = false
+    for i=0 , TeamsCount - 1 do
+        cnthhs = 0
+        runOnHogsInTeam(limitHogs, teams[i])
+    end
+    if hogLimitHit then
+        AddCaption(loc("ONE HOG PER TEAM! KILLING EXCESS HEDGES"))
+    end
+    showStartingInfo()
+end
+
+
+
+function giveWeapons(gear)
+    if gear == mutant then
+        AddAmmo(gear, amRope)
+        for i=1, #mt_weapons do
+            AddAmmo(gear, mt_weapons[i])
+        end
+
+    else
+        for i=1, #hh_weapons do
+            AddAmmo(gear,hh_weapons[i])
+        end
+    end
+end
+
+function onAmmoStoreInit()
+
+    SetAmmo(amSkip, 9, 0, 0, 0)
+    SetAmmo(amRope,0,1,0,5)
+    SetAmmo(amSnowball,0,1,0,1)
+
+    for i=1, #hh_weapons do
+        SetAmmo(hh_weapons[i], 0, 0, 0, 1)
+    end
+
+    for i=1, #mt_weapons do
+        SetAmmo(mt_weapons[i], 0, 3, 0, 1)
+    end
+
+end
+
+function drawCircles()
+    for i = 0, #hhs do
+        if circles[hhs[i]] ~= nil then
+            DeleteVisualGear(circles[hhs[i]])
+            circles[hhs[i]] = nil
+        end
+
+        if hhs[i] ~= CurrentHedgehog then
+            if mutant == nil then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
+            elseif CurrentHedgehog == mutant then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
+            elseif getGearValue(CurrentHedgehog, "Feeder") and hhs[i] ~= mutant then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
+            elseif hhs[i] == mutant then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
+            end
+        end
+    end
+    circleFrame = 0
+end
+
+function onNewTurn()
+
+    trackTeams()
+    killsCounter = 0
+
+    if mutant == nil then
+        AddCaption( loc("FIRST BLOOD MUTATES") )
+    end
+
+    checkScore()
+    giveWeapons(CurrentHedgehog)
+    drawCircles()
+    setAIHints()
+    kill_reward= numhhs*10
+
+    if CurrentHedgehog == mutant then
+        mt_hurt=true
+        disease= mutant_base_disease - numhhs
+    else
+        mt_hurt=false
+    end
+
+    setGearValue(CurrentHedgehog, "Alive", true)
+
+end
+
+function countBodies()
+        if killsCounter == 2 then
+            AddCaption(loc("DOUBLE KILL"))
+        elseif killsCounter == 3 then
+            AddCaption(loc("MEGA KILL"))
+            PlaySound(sndRegret)
+        elseif killsCounter == 4 then
+            AddCaption(loc("ULTRA KILL"))
+        elseif killsCounter == 5 then
+            AddCaption(loc("MONSTER KILL"))
+            PlaySound(sndIllGetYou)
+        elseif killsCounter == 6 then
+            AddCaption(loc("LUDICROUS KILL"))
+            PlaySound(sndNutter)
+        elseif killsCounter == 7 then
+            AddCaption(loc("HOLY SHYTE!"))
+            PlaySound(sndLaugh)
+        elseif killsCounter > 8 then
+            AddCaption(loc("INSANITY"))
+        end
+end
+
+function onGameTick()
+
+    if circleFrame > -1 then
+        for i = 0, #hhs do
+            if circles[hhs[i]] ~= nil and hhs[i]~= nil then
+                hhx, hhy = GetGearPosition(hhs[i])
+                X, Y, dX, dY, Angle, Frame, FrameTicks, State, Timer, Tint = GetVisualGearValues(circles[hhs[i]])
+                SetVisualGearValues(circles[hhs[i]], hhx + 1, hhy - 3, 0, 0, 0, 0, 0, 40 - (circleFrame % 25), Timer, Tint)
+            end
+        end
+
+        circleFrame = circleFrame + 0.06
+
+        if circleFrame >= 25 then
+            for i = 0, #hhs do
+                if circles[hhs[i]] ~= nil then
+                    DeleteVisualGear(circles[hhs[i]])
+                    circles[hhs[i]] = nil
+                end
+            end
+        end
+    end
+
+    if TurnTimeLeft==0 and mt_hurt then
+        mt_hurt = false
+    end
+
+    if mt_hurt and mutant~=nil then
+        timer = timer + 1
+            if timer > disease_timer then
+                timer = 0
+                SetHealth(mutant, GetHealth(mutant)-disease )
+                AddVisualGear(GetX(mutant), GetY(mutant)-5, vgtHealthTag, disease, true)
+                    if GetHealth(mutant)<=0 then
+                        SetHealth(mutant,0)
+                        mt_hurt= false
+                        setGearValue(mutant,"SelfDestruct",true)
+                        TurnTimeLeft = 0
+                    end
+            end
+    end
+
+end
+
+function saveStuff(gear)
+    setGearValue(gear,"Name",GetHogName(gear))
+    setGearValue(gear,"Hat",GetHogHat(gear))
+end
+
+function armageddon(gear)
+    SetState(gear, gstLoser)
+    SetEffect(gear, heResurrectable, false)
+    SetHealth(gear, 0)
+end
+
+function updateScore()
+
+    local showScore = ""
+
+    for i=0, TeamsCount-1 do
+        if teams[i]~= nil then
+
+            local curr_score = getTeamValue(teams[i], "Score")
+            showScore = showScore .. teams[i] .. ": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
+
+        end
+    end
+
+    ShowMission(loc("Score"),
+                "-------",
+                showScore, 0, 200)
+
+    HideMission()
+
+end
+
+function checkScore()
+local showScore = ""
+local lowest_score_team = nil
+local min_score=nil
+local winTeam = nil
+
+local only_low_score = true
+
+    for i=0, TeamsCount-1 do
+        if teams[i]~=nil then
+            local curr_score = getTeamValue(teams[i], "Score")
+
+            runOnHogsInTeam(removeFeeder, teams[i])
+
+            showScore = showScore .. teams[i] ..": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
+
+            if curr_score >= winScore then
+                gameOver = true
+                winTeam = teams[i]
+            end
+
+            if min_score==nil then
+                min_score= curr_score
+                lowest_score_team = teams[i]
+            else
+                if curr_score <= min_score then
+                    if curr_score == min_score then
+                        if getTeamValue(teams[i], "DeadHogs") == getTeamValue(lowest_score_team, "DeadHogs") then
+                            only_low_score = false
+                        else
+                            if getTeamValue(teams[i], "DeadHogs") > getTeamValue(lowest_score_team, "DeadHogs") then
+                                lowest_score_team = teams[i]
+                            end
+                            only_low_score = true
+                        end
+
+                    else
+                        min_score= curr_score
+                        lowest_score_team = teams[i]
+                        only_low_score = true
+                    end
+                end
+            end
+        end
+    end
+
+    if gameOver then
+        TurnTimeLeft = 0
+        for i=0, #teams do
+            if teams[i]~=winTeam then
+                runOnHogsInTeam(armageddon, teams[i])
+            end
+        end
+
+    ShowMission(    loc("WINNER IS ") .. winTeam,
+                    "~~~~~~~~~~~~~~~~~~~~~~~~~",
+                    showScore, 0, 200)
+    else
+
+    if only_low_score then
+        runOnHogsInTeam(setFeeder, lowest_score_team)
+    end
+
+    if meh == false then
+		meh = true
+	else
+		ShowMission(    loc("Score"),
+                    loc("-------"),
+                    showScore, 0, 200)
+	end
+
+    end
+end
+
+function backToNormal(gear)
+    SetHogName(gear, getGearValue(gear,"Name"))
+    SetHogHat(gear, 'NoHat')
+    SetHogHat(gear, getGearValue(gear,"Hat"))
+    setGearValue(mutant,"SelfDestruct",false)
+    mt_hurt=false
+    mutant=nil
+end
+
+function setAIHints()
+    for i = 0, #hhs do
+        if mutant == nil or hhs[i] == mutant or CurrentHedgehog == mutant then
+            SetGearAIHints(hhs[i], aihUsual)
+        else
+            SetGearAIHints(hhs[i], aihDoesntMatter)
+        end
+    end
+end
+
+function removeFeeder(gear)
+    if gear~=nil then
+        setGearValue(gear,"Feeder",false)
+        if gear~= mutant then
+            SetHogName(gear, getGearValue(gear,"Name") )
+            SetHogHat(gear, 'NoHat')
+            SetHogHat(gear, getGearValue(gear,"Hat"))
+        end
+    end
+end
+
+function setFeeder(gear)
+    if gear~= mutant and gear~= nil then
+        SetHogName(gear,"BOTTOM FEEDER")
+        SetHogHat(gear, 'poke_slowpoke')
+        setGearValue(gear,"Feeder", true)
+    end
+end
+
+function setMutantStuff(gear)
+    mutant = gear
+
+    SetHogName(gear,"MUTANT")
+    SetHogHat(gear,'WhySoSerious')
+    SetHealth(gear, ( mutant_base_health + numhhs*25) )
+    SetEffect(gear, hePoisoned, 1)
+    setGearValue(mutant,"SelfDestruct",false)
+    setGearValue(gear, "Feeder", false)
+
+    AddCaption(getGearValue(gear, "Name") .. loc(" HAS MUTATED"))
+
+    TurnTimeLeft=0
+
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    PlaySound(sndSuddenDeath)
+end
+
+function teamScan()
+
+        for i=0, TeamsCount-1 do --nil filling
+        teams[i]=nil
+        end
+
+        for i=0, #hhs do
+            for j=0, TeamsCount-1 do
+                if teams[j] ==nil and hhs[i]~=nil then
+                teams[j] = GetHogTeamName(hhs[i])
+                setTeamValue(teams[j],"Score",0)
+                setTeamValue(teams[j], "DeadHogs",0)
+                break
+                end
+
+                if teams[j] == GetHogTeamName(hhs[i]) then
+                    break
+                end
+            end
+        end
+
+        ---***---
+end
+
+function set_Mutant_and_Score(gear)
+
+local curr_team = GetHogTeamName(CurrentHedgehog)
+
+    if gear == CurrentHedgehog then
+        if CurrentHedgehog == mutant then
+            PlaySound(sndHomerun)
+            if getGearValue(gear, "SelfDestruct")==false then
+                decreaseTeamValue(curr_team,"Score")
+            end
+            backToNormal(gear)
+        else
+            decreaseTeamValue(curr_team,"Score")
+        end
+
+    else
+            if gear == mutant then
+                    backToNormal(mutant)
+                    if curr_team ~=GetHogTeamName(gear) then
+                            if  getGearValue(CurrentHedgehog, "Alive") then
+                            setMutantStuff(CurrentHedgehog)
+                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
+                            end
+                    else
+                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+                    end
+            else
+                if mutant==nil then
+                        if curr_team ~=GetHogTeamName(gear) then
+                            if getGearValue(CurrentHedgehog, "Alive") then
+                                    setMutantStuff(CurrentHedgehog)
+                                    setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
+                            else
+                                increaseTeamValue(curr_team,"Score")
+                            end
+                        else
+                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+                        end
+                else
+                    if curr_team ~=GetHogTeamName(gear) then
+                        if CurrentHedgehog==mutant and getGearValue(mutant,"SelfDestruct")==false then
+                            SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+kill_reward)
+                            AddCaption("+" .. kill_reward .. loc(" HP") )
+                            increaseTeamValue(curr_team,"Score")
+                        end
+                        if getGearValue(CurrentHedgehog,"Feeder") then
+                            increaseTeamValue(curr_team,"Score")
+                        end
+                    else
+                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+                    end
+                end
+            end
+    end
+end
+
+function onGearResurrect(gear)
+if not gameOver then
+    if GetGearType(gear) == gtHedgehog then
+
+        increaseTeamValue(GetHogTeamName(gear), "DeadHogs")
+
+        if gear==CurrentHedgehog then
+            setGearValue(CurrentHedgehog, "Alive", false)
+        end
+        set_Mutant_and_Score(gear)
+        if gear~=CurrentHedgehog then
+            killsCounter = killsCounter + 1
+            countBodies()
+        end
+        AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+        PlaySound(sndWhack)
+        updateScore()
+    end
+end
+end
+
+function onGearAdd(gear)
+
+    -- Catch hedgehogs for the tracker
+    if GetGearType(gear) == gtHedgehog then
+        trackGear(gear)
+        hhs[numhhs] = gear
+        numhhs = numhhs + 1
+        SetEffect(gear, heResurrectable, 1)
+    end
+end
+
+function checkEmptyTeam (teamName)
+    for i=0 , #hhs do
+        if hhs[i]~=nil then
+            if teamName == GetHogTeamName(hhs[i]) then
+                return false
+            end
+        end
+    end
+    return true
+end
+
+function onGearDelete(gear)
+    -- Remove hogs that are gone
+    if GetGearType(gear) == gtHedgehog then
+        numhhs = numhhs - 1
+
+        local found
+        for i=0, #hhs do
+            if hhs[i] == gear then
+                found = i
+                break
+            end
+        end
+        for i = found, #hhs - 1 do
+            hhs[i] = hhs[i + 1]
+        end
+        hhs[#hhs] = nil
+
+        local t_name = GetHogTeamName(gear)
+        if checkEmptyTeam(t_name) then
+            for i = 0, TeamsCount - 1 do
+                if teams[i] == t_name then
+                    found = i
+                    break
+                end
+            end
+            for i = found, TeamsCount - 2 do
+                teams[i] = teams[i + 1]
+            end
+            teams[TeamsCount - 1] = nil
+            TeamsCount = TeamsCount - 1
+        end
+        AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+        trackDeletion(gear)
+    end
+end
+
+--[[
+S T A R R I N G
+    prof - Coding, implementing and evangelism
+    vos  - Initial idea and script improvements
+    mikade - Moving the `how to play` into the game so that people know `how to play`, and whitespace :D
+--]]
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -1,700 +1,706 @@
-
-------------------------------------------
--- RACER 0.5
--- map-independant racing script
--- by mikade
------------------------------------------
-
------------------------------------
---0.1: took all the code from crazy racer and scrapped most of it
------------------------------------
-
--- Removed tumbler system
--- Removed extra adds like boosters etc
--- Added experimental waypoint placement system
--- More user feedback
--- Reduced race complexity limit to 5 waypoints
--- stop placement at complexity limit reached and end turn
--- guys dont keep racing after dying
--- invulnerable feasibility
--- reverted time keeping method
--- reduced feedback display time
--- colour-coded addcaptions
--- cleaned up code
--- support for more players properly added
--- tardis fix
--- remove airstrikes
-
--- i think the remainder 0 .456 sec of the tracktime isnt getting reset on newturn
-
--- update feedback
-
--------
--- 0.2
--------
-
--- allow gameflags
--- extend time to 90s
--- remove other air-attack based weps
--- turn off water rise for sd
-
--------
--- 0.3
--------
-
--- prevent WP being placed in land
--- prevent waypoints being placed outside border
-
--------
--- 0.4
--------
-
--- update user feedback
--- add more sounds
-
--------
--- 0.5
--------
-
--- fix ghost disappearing if hog falls in water or somehow dies
--- lengthen ghost tracking interval to improve performance on slower machines
--- increase waypoint limit to 8
--- allow for persistent showmission information
-
------------------------------
--- SCRIPT BEGINS
------------------------------
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-
-------------------
--- Got Variables?
-------------------
-
-local fMod = 1000000 -- 1
-local roundLimit = 3
-local roundNumber = 0
-local firstClan = 10
-
-local fastX = {}
-local fastY = {}
-local fastCount = 0
-local fastIndex = 0
-local fastColour
-
-local currX = {}
-local currY = {}
-local currCount = 0
-
---------------------------
--- hog and team tracking variales
---------------------------
-
-local numhhs = 0 -- store number of hedgehogs
-local hhs = {} -- store hedgehog gears
-
-local numTeams --  store the number of teams in the game
-local teamNameArr = {}	-- store the list of teams
-local teamClan = {}
-local teamSize = {}	-- store how many hogs per team
-local teamIndex = {} -- at what point in the hhs{} does each team begin
-
-local teamComment = {}
-local teamScore = {}
-
--------
--- racer vars
---------
-
-local cGear = nil
-
-local bestClan = nil
-local bestTime = nil
-
-local gameBegun = false
-local gameOver = false
-local racerActive = false
-local trackTime = 0
-
-local wpCirc = {}
-local wpX = {}
-local wpY = {}
-local wpCol = {}
-local wpActive = {}
-local wpRad = 450 --75
-local wpCount = 0
-local wpLimit = 8
-
-local roundN
-local lastRound
-local RoundHasChanged
-
--------------------
--- general methods
--------------------
-
-function RebuildTeamInfo()
-
-
-	-- make a list of individual team names
-	for i = 0, (TeamsCount-1) do
-		teamNameArr[i] = " " -- = i
-		teamSize[i] = 0
-		teamIndex[i] = 0
-		teamScore[i] = 100000
-	end
-	numTeams = 0
-
-	for i = 0, (numhhs-1) do
-
-		z = 0
-		unfinished = true
-		while(unfinished == true) do
-
-			newTeam = true
-			tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
-
-			if tempHogTeamName == teamNameArr[z] then
-				newTeam = false
-				unfinished = false
-			end
-
-			z = z + 1
-
-			if z == TeamsCount then
-				unfinished = false
-				if newTeam == true then
-					teamNameArr[numTeams] = tempHogTeamName
-					numTeams = numTeams + 1
-				end
-			end
-
-		end
-
-	end
-
-	-- find out how many hogs per team, and the index of the first hog in hhs
-	for i = 0, (numTeams-1) do
-		for z = 0, (numhhs-1) do
-			if GetHogTeamName(hhs[z]) == teamNameArr[i] then
-				teamClan[i] = GetHogClan(hhs[z])
-				if teamSize[i] == 0 then
-					teamIndex[i] = z -- should give starting index
-				end
-				teamSize[i] = teamSize[i] + 1
-				--add a pointer so this hog appears at i in hhs
-			end
-		end
-
-	end
-
-end
-
-
------------------
--- RACER METHODS
------------------
-
-function CheckWaypoints()
-
-	trackFinished = true
-
-	for i = 0, (wpCount-1) do
-
-		g1X, g1Y = GetGearPosition(CurrentHedgehog)
-		g2X, g2Y = wpX[i], wpY[i]
-
-		g1X = g1X - g2X
-		g1Y = g1Y - g2Y
-		dist = (g1X*g1X) + (g1Y*g1Y)
-
-		--if i == 0 then
-		--	AddCaption(dist .. "/" .. (wpRad*wpRad) )
-		--end
-
-		NR = (48/100*wpRad)/2
-
-		if dist < (NR*NR) then
-		--if dist < (wpRad*wpRad) then
-			--AddCaption("howdy")
-			wpActive[i] = true
-			wpCol[i] = GetClanColor(GetHogClan(CurrentHedgehog)) -- new				--GetClanColor(1)
-			SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
-
-			wpRem = 0
-			for k = 0, (wpCount-1) do
-				if wpActive[k] == false then
-					wpRem = wpRem + 1
-				end
-			end
-
-			AddCaption(loc("Way-Points Remaining") .. ": " .. wpRem,0xffba00ff,capgrpAmmoinfo)
-
-		end
-
-		if wpActive[i] == false then
-			trackFinished = false
-		end
-
-	end
-
-	return(trackFinished)
-
-end
-
-function AdjustScores()
-
-	if bestTime == nil then
-		bestTime = 100000
-		bestClan = 10
-		bestTimeComment = "N/A"
-	end
-
-	newScore = false
-
-	-- update this clan's time if the new track is better
-	for i = 0, (numTeams-1) do
-		if teamClan[i] == GetHogClan(CurrentHedgehog) then
-			if trackTime < teamScore[i] then
-				teamScore[i] = trackTime
-				newScore = true
-			else
-				newScore = false
-			end
-		end
-	end
-
-	--bestTime = 100000
-	--bestClan = 10
-
-	-- find the best time out of those so far
-	for i = 0, (numTeams-1) do
-		if teamScore[i] < bestTime then
-			bestTime = teamScore[i]
-			bestClan = teamClan[i]
-		end
-	end
-
-	if bestTime ~= 100000 then
-		bestTimeComment = (bestTime/1000) ..loc("s")
-	end
-
-	if newScore == true then
-		if trackTime == bestTime then -- best time of the race
-			ShowMission(loc("RACER"),
-			loc("TRACK COMPLETED"),
-			loc("NEW RACE RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
-			loc("WINNING TIME: ") .. bestTimeComment, 0, 4000)
-			PlaySound(sndHomerun)
-		else	-- best time for the clan
-			ShowMission(loc("RACER"),
-			loc("TRACK COMPLETED"),
-			loc("NEW CLAN RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
-			loc("WINNING TIME: ") .. bestTimeComment, 4, 4000)
-		end
-	else -- not any kind of new score
-		ShowMission(loc("RACER"),
-		loc("TRACK COMPLETED"),
-		loc("TIME: ") .. (trackTime/1000) ..loc("s") .. "|" ..
-		loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
-		PlaySound(sndHellish)
-	end
-
-
-	--------
-	--new
-	--------
-
-	if bestTime == trackTime then
-		--AddCaption("wooooooooooooooooooooooooooooo")
-
-		fastColour = GetClanColor(GetHogClan(CurrentHedgehog))
-
-		for i = 0, (currCount-1) do
-			fastX[i] = currX[i]
-			fastY[i] = currY[i]
-		end
-
-		fastCount = currCount
-		fastIndex = 0
-
-		--currCount = 0 -- is this needed?
-
-	else
-		currCount = 0
-		fastIndex = 0
-	end
-
-
-end
-
-function onNewRound()
-
-	roundNumber = roundNumber + 1
-
-	totalComment = ""
-	for i = 0, (TeamsCount-1) do
-			if teamNameArr[i] ~= " " then				-- teamScore[teamClan[i]]
-				teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
-				totalComment = totalComment .. teamComment[i]
-			elseif teamNameArr[i] == " " then
-				teamComment[i] = "|"
-			end
-	end
-
-	ShowMission(	loc("RACER"),
-					loc("STATUS UPDATE"),
-					loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
-					loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
-
-	-- end game if its at round limit
-	if roundNumber == roundLimit then
-		for i = 0, (numhhs-1) do
-			if GetHogClan(hhs[i]) ~= bestClan then
-				SetEffect(hhs[i], heResurrectable, 0)
-				SetHealth(hhs[i],0)
-			end
-		end
-		gameOver = true
-		TurnTimeLeft = 1
-	end
-
-end
-
-function CheckForNewRound()
-
-	-------------
-	------ new
-	-------------
-
-	--[[turnN = turnN + 1
-	if gameBegun == false then
-		if turnN == 2 then
-			for i = 0, (numhhs-1) do
-				if hhs[i] ~= nil then
-					SetEffect(hhs[i], heResurrectable, 0)
-					SetHealth(hhs[i],0)
-				end
-			end
-			gameOver = true
-			TurnTimeLeft = 1
-		end
-	else
-
-
-	end]]
-
-	--[[if roundBegun == true then
-
-		if RoundHasChanged == true then
-			roundN = roundN + 1
-			RoundHasChanged = false
-			onNewRound()
-		end
-
-		if lastRound ~= TotalRounds then -- new round, but not really
-
-			if RoundHasChanged == false then
-				RoundHasChanged = true
-			end
-
-		end
-
-		AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
-
-		lastRound = TotalRounds
-
-	end]]
-
-	------------
-	----- old
-	------------
-
-	if GetHogClan(CurrentHedgehog) == firstClan then
-		onNewRound()
-	end
-
-end
-
-function DisableTumbler()
-	currCount = 0
-	fastIndex = 0
-	TurnTimeLeft = 0
-	racerActive = false -- newadd
-end
-
-function HandleGhost()
-
-	-- get the current xy of the racer at this point
-	currX[currCount] = GetX(CurrentHedgehog)
-	currY[currCount] = GetY(CurrentHedgehog)
-	currCount = currCount + 1
-
-	-- draw a ping of smoke where the fastest player was at this point
-	if (fastCount ~= 0) and (fastIndex < fastCount) then
-
-		fastIndex = fastIndex + 1
-
-		tempE = AddVisualGear(fastX[fastIndex], fastY[fastIndex], vgtSmoke, 0, false)
-		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-		SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, fastColour )
-
-		--AddCaption("fC: " .. fastIndex .. " / " .. fastCount)
-
-	else
-
-		--AddCaption("excep fC: " .. fastIndex .. " / " .. fastCount)
-
-	end
-
-
-
-end
-
-----------------------------------
--- GAME METHODS / EVENT HANDLERS
-----------------------------------
-
-function onGameInit()
-	GameFlags = GameFlags + gfInfAttack + gfInvulnerable
-	CaseFreq = 0
-	TurnTime = 90000
-	WaterRise = 0
-end
-
-
-function onGameStart()
-
-	roundN = 0
-	lastRound = TotalRounds
-	RoundHasChanged = false -- true
-
-	RebuildTeamInfo()
-
-	ShowMission	(
-				loc("RACER"),
-				loc("a Hedgewars mini-game"),
-
-				loc("Build a track and race.") .. "|" ..
-				loc("Round Limit:") .. " " .. roundLimit .. "|" ..
-
-				"", 4, 4000
-				)
-end
-
-function PlaceWayPoint(x,y)
-
-	if (wpCount < wpLimit) then -- seems to not work with a hedgehog nil chek
-
-		wpX[wpCount] = x
-		wpY[wpCount] = y
-		wpCol[wpCount] = 0xffffffff
-		wpCirc[wpCount] = AddVisualGear(wpX[wpCount],wpY[wpCount],vgtCircle,0,true)
-																		--100
-		SetVisualGearValues(wpCirc[wpCount], wpX[wpCount], wpY[wpCount], 20, 100, 1, 10, 0, wpRad, 5, wpCol[wpCount])
-
-		wpCount = wpCount + 1
-
-		AddCaption(loc("Waypoint placed.") .. " " .. loc("Available points remaining: ") .. (wpLimit-wpCount))
-
-	end
-
-end
-
-function onNewTurn()
-
-	CheckForNewRound()
-
-	racerActive = false
-
-	trackTime = 0
-
-	currCount = 0 -- hopefully this solves problem
-	AddAmmo(CurrentHedgehog, amAirAttack, 0)
-	gTimer = 0
-
-	-- Set the waypoints to unactive on new round
-	for i = 0,(wpCount-1) do
-		wpActive[i] = false
-		wpCol[i] = 0xffffffff
-		SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
-	end
-
-	-- Handle Starting Stage of Game
-	if (gameOver == false) and (gameBegun == false) then
-		if wpCount >= 3 then
-			gameBegun = true
-			roundNumber = 0
-			firstClan = GetHogClan(CurrentHedgehog)
-			ShowMission(loc("RACER"),
-			loc("GAME BEGUN!!!"),
-			loc("Complete the track as fast as you can!"), 2, 4000)
-		else
-			ShowMission(loc("RACER"),
-			loc("NOT ENOUGH WAYPOINTS"),
-			loc("Place more waypoints using the 'Air Attack' weapon."), 2, 4000)
-			AddAmmo(CurrentHedgehog, amAirAttack, 4000)
-            ParseCommand("setweap " .. string.char(amAirAttack))
-		end
-	end
-
-	if gameOver == true then
-		gameBegun = false
-		racerActive = false -- newadd
-	end
-
-	AddAmmo(CurrentHedgehog, amTardis, 0)
-	AddAmmo(CurrentHedgehog, amDrillStrike, 0)
-	AddAmmo(CurrentHedgehog, amMineStrike, 0)
-	AddAmmo(CurrentHedgehog, amNapalm, 0)
-	AddAmmo(CurrentHedgehog, amPiano, 0)
-
-end
-
-function onGameTick20()
-
-	-- airstrike detected, convert this into a potential waypoint spot
-	if cGear ~= nil then
-		x,y = GetGearPosition(cGear)
-        if x > -9000 then
-            x,y = GetGearTarget(cGear)
-
-
-            if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
-                AddCaption(loc("Please place the way-point in the open, within the map boundaries."))
-                PlaySound(sndDenied)
-            elseif (y > WaterLine-50) then
-                AddCaption(loc("Please place the way-point further from the waterline."))
-                PlaySound(sndDenied)
-            else
-                PlaceWayPoint(x, y)
-                if wpCount == wpLimit then
-                    AddCaption(loc("Race complexity limit reached."))
-                    DisableTumbler()
-                end
-            end
-        else
-            DeleteGear(cGear)
-        end
-        SetGearPosition(cGear, -10000, 0)
-	end
-
-
-	-- start the player tumbling with a boom once their turn has actually begun
-	if racerActive == false then
-
-		if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
-
-			-- if the gamehas started put the player in the middle of the first
-			--waypoint that was placed
-			if gameBegun == true then
-				AddCaption(loc("Good to go!"))
-				racerActive = true
-				trackTime = 0
-
-				SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
-				AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
-				FollowGear(CurrentHedgehog)
-
-				HideMission()
-
-			else
-				-- still in placement mode
-			end
-
-		end
-	end
-
-
-
-	-- has the player started his tumbling spree?
-	if (CurrentHedgehog ~= nil) then
-
-		--airstrike conversion used to be here
-
-		-- if the RACE has started, show tracktimes and keep tabs on waypoints
-		if (racerActive == true) and (gameBegun == true) then
-
-			--ghost
-			if GameTime%40 == 0 then
-				HandleGhost()
-			end
-
-			trackTime = trackTime + 20
-
-			if GameTime%100 == 0 then
-                
-                if trackTime%1000 == 0 then
-                    AddCaption((trackTime/1000)..'.0',GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
-                else
-                    AddCaption(trackTime/1000,GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
-                end
-
-				if (CheckWaypoints() == true) then
-					AdjustScores()
-					racerActive = false
-					DisableTumbler()
-				end
-
-			end
-
-		end
-
-
-
-		-- if the player has expended his tunbling time, stop him tumbling
-		if TurnTimeLeft <= 20 then
-			DisableTumbler()
-		end
-
-	end
-
-end
-
-function onGearResurrect(gear)
-
-	AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
-
-	if gear == CurrentHedgehog then
-		DisableTumbler()
-	end
-
-	-- if the player stops and "dies" or flies into water, stop him racing
-	--[[if gear == CurrentHedgehog then
-		DisableTumbler()
-		ShowMission(loc("RACER"),
-		loc("TRACK FAILED!"),
-		loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
-	end]]
-
-end
-
-function onGearAdd(gear)
-
-	if GetGearType(gear) == gtHedgehog then
-		hhs[numhhs] = gear
-		numhhs = numhhs + 1
-		SetEffect(gear, heResurrectable, 1)
-	end
-
-	if GetGearType(gear) == gtAirAttack then
-		cGear = gear
-	end
-
-end
-
-function onGearDelete(gear)
-
-	if GetGearType(gear) == gtAirAttack then
-		cGear = nil
-	end
-
-end
-
---[[function onAmmoStoreInit()
-	SetAmmo(amRope, 9, 0, 0, 0)
-	SetAmmo(amJetpack, 9, 0, 0, 0)
-	SetAmmo(amSkip, 9, 0, 0, 0)
-end]]
-
-
+
+------------------------------------------
+-- RACER 0.6
+-- map-independant racing script
+-- by mikade
+-----------------------------------------
+
+-----------------------------------
+--0.1: took all the code from crazy racer and scrapped most of it
+-----------------------------------
+
+-- Removed tumbler system
+-- Removed extra adds like boosters etc
+-- Added experimental waypoint placement system
+-- More user feedback
+-- Reduced race complexity limit to 5 waypoints
+-- stop placement at complexity limit reached and end turn
+-- guys dont keep racing after dying
+-- invulnerable feasibility
+-- reverted time keeping method
+-- reduced feedback display time
+-- colour-coded addcaptions
+-- cleaned up code
+-- support for more players properly added
+-- tardis fix
+-- remove airstrikes
+
+-- i think the remainder 0 .456 sec of the tracktime isnt getting reset on newturn
+
+-- update feedback
+
+-------
+-- 0.2
+-------
+
+-- allow gameflags
+-- extend time to 90s
+-- remove other air-attack based weps
+-- turn off water rise for sd
+
+-------
+-- 0.3
+-------
+
+-- prevent WP being placed in land
+-- prevent waypoints being placed outside border
+
+-------
+-- 0.4
+-------
+
+-- update user feedback
+-- add more sounds
+
+-------
+-- 0.5
+-------
+
+-- fix ghost disappearing if hog falls in water or somehow dies
+-- lengthen ghost tracking interval to improve performance on slower machines
+-- increase waypoint limit to 8
+-- allow for persistent showmission information
+
+-------
+-- 0.6
+-------
+
+-- remove hogs from racing area as per request
+
+-----------------------------
+-- SCRIPT BEGINS
+-----------------------------
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+
+------------------
+-- Got Variables?
+------------------
+
+local fMod = 1000000 -- 1
+local roundLimit = 3
+local roundNumber = 0
+local firstClan = 10
+
+local fastX = {}
+local fastY = {}
+local fastCount = 0
+local fastIndex = 0
+local fastColour
+
+local currX = {}
+local currY = {}
+local currCount = 0
+
+--------------------------
+-- hog and team tracking variales
+--------------------------
+
+local numhhs = 0 -- store number of hedgehogs
+local hhs = {} -- store hedgehog gears
+
+local numTeams --  store the number of teams in the game
+local teamNameArr = {}  -- store the list of teams
+local teamClan = {}
+local teamSize = {}     -- store how many hogs per team
+local teamIndex = {} -- at what point in the hhs{} does each team begin
+
+local teamComment = {}
+local teamScore = {}
+
+-------
+-- racer vars
+--------
+
+local cGear = nil
+
+local bestClan = nil
+local bestTime = nil
+
+local gameBegun = false
+local gameOver = false
+local racerActive = false
+local trackTime = 0
+
+local wpCirc = {}
+local wpX = {}
+local wpY = {}
+local wpCol = {}
+local wpActive = {}
+local wpRad = 450 --75
+local wpCount = 0
+local wpLimit = 8
+
+local roundN
+local lastRound
+local RoundHasChanged
+
+-------------------
+-- general methods
+-------------------
+
+function RebuildTeamInfo()
+
+
+        -- make a list of individual team names
+        for i = 0, (TeamsCount-1) do
+                teamNameArr[i] = " " -- = i
+                teamSize[i] = 0
+                teamIndex[i] = 0
+                teamScore[i] = 100000
+        end
+        numTeams = 0
+
+        for i = 0, (numhhs-1) do
+
+                z = 0
+                unfinished = true
+                while(unfinished == true) do
+
+                        newTeam = true
+                        tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
+
+                        if tempHogTeamName == teamNameArr[z] then
+                                newTeam = false
+                                unfinished = false
+                        end
+
+                        z = z + 1
+
+                        if z == TeamsCount then
+                                unfinished = false
+                                if newTeam == true then
+                                        teamNameArr[numTeams] = tempHogTeamName
+                                        numTeams = numTeams + 1
+                                end
+                        end
+
+                end
+
+        end
+
+        -- find out how many hogs per team, and the index of the first hog in hhs
+        for i = 0, (numTeams-1) do
+                for z = 0, (numhhs-1) do
+                        if GetHogTeamName(hhs[z]) == teamNameArr[i] then
+                                teamClan[i] = GetHogClan(hhs[z])
+                                if teamSize[i] == 0 then
+                                        teamIndex[i] = z -- should give starting index
+                                end
+                                teamSize[i] = teamSize[i] + 1
+                                --add a pointer so this hog appears at i in hhs
+                        end
+                end
+
+        end
+
+end
+
+
+-----------------
+-- RACER METHODS
+-----------------
+
+function CheckWaypoints()
+
+        trackFinished = true
+
+        for i = 0, (wpCount-1) do
+
+                g1X, g1Y = GetGearPosition(CurrentHedgehog)
+                g2X, g2Y = wpX[i], wpY[i]
+
+                g1X = g1X - g2X
+                g1Y = g1Y - g2Y
+                dist = (g1X*g1X) + (g1Y*g1Y)
+
+                --if i == 0 then
+                --      AddCaption(dist .. "/" .. (wpRad*wpRad) )
+                --end
+
+                NR = (48/100*wpRad)/2
+
+                if dist < (NR*NR) then
+                --if dist < (wpRad*wpRad) then
+                        --AddCaption("howdy")
+                        wpActive[i] = true
+                        wpCol[i] = GetClanColor(GetHogClan(CurrentHedgehog)) -- new                             --GetClanColor(1)
+                        SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
+
+                        wpRem = 0
+                        for k = 0, (wpCount-1) do
+                                if wpActive[k] == false then
+                                        wpRem = wpRem + 1
+                                end
+                        end
+
+                        AddCaption(loc("Way-Points Remaining") .. ": " .. wpRem,0xffba00ff,capgrpAmmoinfo)
+
+                end
+
+                if wpActive[i] == false then
+                        trackFinished = false
+                end
+
+        end
+
+        return(trackFinished)
+
+end
+
+function AdjustScores()
+
+        if bestTime == nil then
+                bestTime = 100000
+                bestClan = 10
+                bestTimeComment = "N/A"
+        end
+
+        newScore = false
+
+        -- update this clan's time if the new track is better
+        for i = 0, (numTeams-1) do
+                if teamClan[i] == GetHogClan(CurrentHedgehog) then
+                        if trackTime < teamScore[i] then
+                                teamScore[i] = trackTime
+                                newScore = true
+                        else
+                                newScore = false
+                        end
+                end
+        end
+
+        --bestTime = 100000
+        --bestClan = 10
+
+        -- find the best time out of those so far
+        for i = 0, (numTeams-1) do
+                if teamScore[i] < bestTime then
+                        bestTime = teamScore[i]
+                        bestClan = teamClan[i]
+                end
+        end
+
+        if bestTime ~= 100000 then
+                bestTimeComment = (bestTime/1000) ..loc("s")
+        end
+
+        if newScore == true then
+                if trackTime == bestTime then -- best time of the race
+                        ShowMission(loc("RACER"),
+                        loc("TRACK COMPLETED"),
+                        loc("NEW RACE RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+                        loc("WINNING TIME: ") .. bestTimeComment, 0, 4000)
+                        PlaySound(sndHomerun)
+                else    -- best time for the clan
+                        ShowMission(loc("RACER"),
+                        loc("TRACK COMPLETED"),
+                        loc("NEW CLAN RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+                        loc("WINNING TIME: ") .. bestTimeComment, 4, 4000)
+                end
+        else -- not any kind of new score
+                ShowMission(loc("RACER"),
+                loc("TRACK COMPLETED"),
+                loc("TIME: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+                loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
+                PlaySound(sndHellish)
+        end
+
+
+        --------
+        --new
+        --------
+
+        if bestTime == trackTime then
+                --AddCaption("wooooooooooooooooooooooooooooo")
+
+                fastColour = GetClanColor(GetHogClan(CurrentHedgehog))
+
+                for i = 0, (currCount-1) do
+                        fastX[i] = currX[i]
+                        fastY[i] = currY[i]
+                end
+
+                fastCount = currCount
+                fastIndex = 0
+
+                --currCount = 0 -- is this needed?
+
+        else
+                currCount = 0
+                fastIndex = 0
+        end
+
+
+end
+
+function onNewRound()
+
+        roundNumber = roundNumber + 1
+
+        totalComment = ""
+        for i = 0, (TeamsCount-1) do
+                        if teamNameArr[i] ~= " " then                           -- teamScore[teamClan[i]]
+                                teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
+                                totalComment = totalComment .. teamComment[i]
+                        elseif teamNameArr[i] == " " then
+                                teamComment[i] = "|"
+                        end
+        end
+
+        ShowMission(    loc("RACER"),
+                                        loc("STATUS UPDATE"),
+                                        loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
+                                        loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
+
+        -- end game if its at round limit
+        if roundNumber == roundLimit then
+                for i = 0, (numhhs-1) do
+                        if GetHogClan(hhs[i]) ~= bestClan then
+                                SetEffect(hhs[i], heResurrectable, 0)
+                                SetHealth(hhs[i],0)
+                        end
+                end
+                gameOver = true
+                TurnTimeLeft = 1
+        end
+
+end
+
+function CheckForNewRound()
+
+        -------------
+        ------ new
+        -------------
+
+        --[[turnN = turnN + 1
+        if gameBegun == false then
+                if turnN == 2 then
+                        for i = 0, (numhhs-1) do
+                                if hhs[i] ~= nil then
+                                        SetEffect(hhs[i], heResurrectable, 0)
+                                        SetHealth(hhs[i],0)
+                                end
+                        end
+                        gameOver = true
+                        TurnTimeLeft = 1
+                end
+        else
+
+
+        end]]
+
+        --[[if roundBegun == true then
+
+                if RoundHasChanged == true then
+                        roundN = roundN + 1
+                        RoundHasChanged = false
+                        onNewRound()
+                end
+
+                if lastRound ~= TotalRounds then -- new round, but not really
+
+                        if RoundHasChanged == false then
+                                RoundHasChanged = true
+                        end
+
+                end
+
+                AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+
+                lastRound = TotalRounds
+
+        end]]
+
+        ------------
+        ----- old
+        ------------
+
+        if GetHogClan(CurrentHedgehog) == firstClan then
+                onNewRound()
+        end
+
+end
+
+function DisableTumbler()
+        currCount = 0
+        fastIndex = 0
+        TurnTimeLeft = 0
+        racerActive = false -- newadd
+end
+
+function HandleGhost()
+
+        -- get the current xy of the racer at this point
+        currX[currCount] = GetX(CurrentHedgehog)
+        currY[currCount] = GetY(CurrentHedgehog)
+        currCount = currCount + 1
+
+        -- draw a ping of smoke where the fastest player was at this point
+        if (fastCount ~= 0) and (fastIndex < fastCount) then
+
+                fastIndex = fastIndex + 1
+
+                tempE = AddVisualGear(fastX[fastIndex], fastY[fastIndex], vgtSmoke, 0, false)
+                g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+                SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, fastColour )
+
+                --AddCaption("fC: " .. fastIndex .. " / " .. fastCount)
+
+        else
+
+                --AddCaption("excep fC: " .. fastIndex .. " / " .. fastCount)
+
+        end
+
+
+
+end
+
+function TryRepositionHogs()
+
+	if MapHasBorder() == true then
+
+		for i = 0, (numhhs-1) do
+			if hhs[i] ~= nil then
+				SetGearPosition(hhs[i],GetX(hhs[i]), TopY-10)
+			end
+		end
+
+	end
+
+end
+
+----------------------------------
+-- GAME METHODS / EVENT HANDLERS
+----------------------------------
+
+function onGameInit()
+        GameFlags = bor(GameFlags,gfInfAttack + gfInvulnerable)
+        CaseFreq = 0
+        TurnTime = 90000
+        WaterRise = 0
+end
+
+
+function onGameStart()
+
+        roundN = 0
+        lastRound = TotalRounds
+        RoundHasChanged = false -- true
+
+        RebuildTeamInfo()
+
+        ShowMission     (
+                                loc("RACER"),
+                                loc("a Hedgewars mini-game"),
+
+                                loc("Build a track and race.") .. "|" ..
+                                loc("Round Limit:") .. " " .. roundLimit .. "|" ..
+
+                                "", 4, 4000
+                                )
+
+	TryRepositionHogs()
+
+end
+
+function PlaceWayPoint(x,y)
+
+        if (wpCount < wpLimit) then -- seems to not work with a hedgehog nil chek
+
+                wpX[wpCount] = x
+                wpY[wpCount] = y
+                wpCol[wpCount] = 0xffffffff
+                wpCirc[wpCount] = AddVisualGear(wpX[wpCount],wpY[wpCount],vgtCircle,0,true)
+                                                                                                                                                --100
+                SetVisualGearValues(wpCirc[wpCount], wpX[wpCount], wpY[wpCount], 20, 100, 1, 10, 0, wpRad, 5, wpCol[wpCount])
+
+                wpCount = wpCount + 1
+
+                AddCaption(loc("Waypoint placed.") .. " " .. loc("Available points remaining: ") .. (wpLimit-wpCount))
+
+        end
+
+end
+
+function onNewTurn()
+
+        CheckForNewRound()
+	TryRepositionHogs()
+
+        racerActive = false
+
+        trackTime = 0
+
+        currCount = 0 -- hopefully this solves problem
+        AddAmmo(CurrentHedgehog, amAirAttack, 0)
+        gTimer = 0
+
+        -- Set the waypoints to unactive on new round
+        for i = 0,(wpCount-1) do
+                wpActive[i] = false
+                wpCol[i] = 0xffffffff
+                SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
+        end
+
+        -- Handle Starting Stage of Game
+        if (gameOver == false) and (gameBegun == false) then
+                if wpCount >= 3 then
+                        gameBegun = true
+                        roundNumber = 0
+                        firstClan = GetHogClan(CurrentHedgehog)
+                        ShowMission(loc("RACER"),
+                        loc("GAME BEGUN!!!"),
+                        loc("Complete the track as fast as you can!"), 2, 4000)
+                else
+                        ShowMission(loc("RACER"),
+                        loc("NOT ENOUGH WAYPOINTS"),
+                        loc("Place more waypoints using the 'Air Attack' weapon."), 2, 4000)
+                        AddAmmo(CurrentHedgehog, amAirAttack, 4000)
+            ParseCommand("setweap " .. string.char(amAirAttack))
+                end
+        end
+
+        if gameOver == true then
+                gameBegun = false
+                racerActive = false -- newadd
+        end
+
+        AddAmmo(CurrentHedgehog, amTardis, 0)
+        AddAmmo(CurrentHedgehog, amDrillStrike, 0)
+        AddAmmo(CurrentHedgehog, amMineStrike, 0)
+        AddAmmo(CurrentHedgehog, amNapalm, 0)
+        AddAmmo(CurrentHedgehog, amPiano, 0)
+
+end
+
+function onGameTick20()
+
+        -- airstrike detected, convert this into a potential waypoint spot
+        if cGear ~= nil then
+                x,y = GetGearPosition(cGear)
+        if x > -9000 then
+            x,y = GetGearTarget(cGear)
+
+
+            if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
+                AddCaption(loc("Please place the way-point in the open, within the map boundaries."))
+                PlaySound(sndDenied)
+            elseif (y > WaterLine-50) then
+                AddCaption(loc("Please place the way-point further from the waterline."))
+                PlaySound(sndDenied)
+            else
+                PlaceWayPoint(x, y)
+                if wpCount == wpLimit then
+                    AddCaption(loc("Race complexity limit reached."))
+                    DisableTumbler()
+                end
+            end
+        else
+            DeleteGear(cGear)
+        end
+        SetGearPosition(cGear, -10000, 0)
+        end
+
+
+        -- start the player tumbling with a boom once their turn has actually begun
+        if racerActive == false then
+
+                if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
+
+                        -- if the gamehas started put the player in the middle of the first
+                        --waypoint that was placed
+                        if gameBegun == true then
+                                AddCaption(loc("Good to go!"))
+                                racerActive = true
+                                trackTime = 0
+
+                                SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
+                                AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
+                                FollowGear(CurrentHedgehog)
+
+                                HideMission()
+
+                        else
+                                -- still in placement mode
+                        end
+
+                end
+        end
+
+
+
+        -- has the player started his tumbling spree?
+        if (CurrentHedgehog ~= nil) then
+
+                --airstrike conversion used to be here
+
+                -- if the RACE has started, show tracktimes and keep tabs on waypoints
+                if (racerActive == true) and (gameBegun == true) then
+
+                        --ghost
+                        if GameTime%40 == 0 then
+                                HandleGhost()
+                        end
+
+                        trackTime = trackTime + 20
+
+                        if GameTime%100 == 0 then
+
+                if trackTime%1000 == 0 then
+                    AddCaption((trackTime/1000)..'.0',GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+                else
+                    AddCaption(trackTime/1000,GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+                end
+
+                                if (CheckWaypoints() == true) then
+                                        AdjustScores()
+                                        racerActive = false
+                                        DisableTumbler()
+                                end
+
+                        end
+
+                end
+
+                -- if the player has expended his tunbling time, stop him tumbling
+                if TurnTimeLeft <= 20 then
+                        DisableTumbler()
+                end
+
+        end
+
+end
+
+function onGearResurrect(gear)
+
+        AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+
+        if gear == CurrentHedgehog then
+                DisableTumbler()
+        end
+
+end
+
+function onGearAdd(gear)
+
+        if GetGearType(gear) == gtHedgehog then
+                hhs[numhhs] = gear
+                numhhs = numhhs + 1
+                SetEffect(gear, heResurrectable, 1)
+        end
+
+        if GetGearType(gear) == gtAirAttack then
+                cGear = gear
+        end
+
+end
+
+function onGearDelete(gear)
+
+        if GetGearType(gear) == gtAirAttack then
+                cGear = nil
+        end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,2 @@
+Default
+Default
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,450 @@
+ObjectList = {}
+PointsBuffer = ''  -- A string to accumulate points in
+
+-- Overall padding for roping freedom
+Padding = 430
+
+function AddPoint(x, y, width, erase)
+ PointsBuffer = PointsBuffer .. string.char(band(x,0xff00) / 256 , band(x,0xff) , band(y,0xff00) / 256 , band(y,0xff))
+ if width then
+     width = bor(width,0x80)
+     if erase then
+         width = bor(width,0x40)
+     end
+     PointsBuffer = PointsBuffer .. string.char(width)
+ else
+     PointsBuffer = PointsBuffer .. string.char(0)
+ end
+ if #PointsBuffer > 245 then
+     ParseCommand('draw '..PointsBuffer)
+     PointsBuffer = ''
+ end
+end
+function FlushPoints()
+ if #PointsBuffer > 0 then
+     ParseCommand('draw '..PointsBuffer)
+     PointsBuffer = ''
+ end
+end
+
+-- This could probably use less points and more precision
+-- 700x700 for object space
+function DrawStar(x, y, d, f)
+-- default scale is 700x700 or so
+    s = 700
+    if not(d == 1) then s = div(s,d) end
+    if NoOverlap(x,y,s,s) then
+        AddCollision(x,y,s,s)
+        if not(d == 1) then
+            i = 6-d
+            j = math.min(div(5,d),1)
+            -- centre
+            AddPoint(x,y,div(20,d))
+            -- arms
+            AddPoint(x-div(325,d),y-f*div(108,d),2)
+            AddPoint(x+div(325,d),y-f*div(108,d))
+            AddPoint(x-div(205,d),y+f*div(270,d))
+            AddPoint(x,y-f*div(345,d))
+            AddPoint(x+div(205,d),y+f*div(270,d))
+            AddPoint(x-div(325,d),y-f*div(108,d))
+            if d < 4 then
+            -- fill in arm 1
+            AddPoint(x-div(275,d),y-f*div(92,d),i)
+            AddPoint(x-div(50,d),y-f*div(92,d))
+            AddPoint(x-div(105,d),y+f*div(25,d))
+            AddPoint(x-div(250,d),y-f*div(80,d))
+            AddPoint(x-div(115,d),y-f*div(70,d))
+            AddPoint(x-div(130,d),y-f*div(25,d))
+            AddPoint(x-div(175,d),y-f*div(60,d))
+            -- fill in arm 2
+            AddPoint(x+div(275,d),y-f*div(92,d),i)
+            AddPoint(x+div(50,d),y-f*div(92,d))
+            AddPoint(x+div(105,d),y+f*div(25,d))
+            AddPoint(x+div(250,d),y-f*div(80,d))
+            AddPoint(x+div(115,d),y-f*div(70,d))
+            AddPoint(x+div(130,d),y-f*div(25,d))
+            AddPoint(x+div(175,d),y-f*div(60,d))
+            -- fill in arm 3
+            AddPoint(x-div(175,d),y+f*div(230,d),i)
+            AddPoint(x-div(110,d),y+f*div(60,d))
+            AddPoint(x,y+f*div(120,d))
+            AddPoint(x-div(155,d),y+f*div(215,d))
+            AddPoint(x-div(105,d),y+f*div(95,d))
+            AddPoint(x-div(60,d),y+f*div(130,d))
+            AddPoint(x-div(85,d),y+f*div(155,d),j)
+            -- fill in arm 4
+            AddPoint(x,y-f*div(300,d),3)
+            AddPoint(x+div(50,d),y-f*div(125,d))
+            AddPoint(x-div(50,d),y-f*div(125,d))
+            AddPoint(x,y-f*div(270,d))
+            AddPoint(x-div(40,d),y-f*div(160,d))
+            AddPoint(x+div(40,d),y-f*div(160,d))
+            AddPoint(x,y-f*div(195,d),j)
+            -- fill in arm 5
+            AddPoint(x+div(175,d),y+f*div(230,d),i)
+            AddPoint(x+div(110,d),y+f*div(60,d))
+            AddPoint(x,y+f*div(120,d))
+            AddPoint(x+div(155,d),y+f*div(215,d))
+            AddPoint(x+div(105,d),y+f*div(95,d))
+            AddPoint(x+div(60,d),y+f*div(130,d))
+            AddPoint(x+div(85,d),y+f*div(155,d),j)
+            end
+        else
+            -- centre
+            AddPoint(x,y,20)
+            -- arms
+            AddPoint(x-325,y-f*108,1)
+            AddPoint(x+325,y-f*108)
+            AddPoint(x-205,y+f*270)
+            AddPoint(x,y-f*345)
+            AddPoint(x+205,y+f*270)
+            AddPoint(x-325,y-f*108)
+            -- fill in arm 1
+            AddPoint(x-275,y-f*92,4)
+            AddPoint(x-50,y-f*92)
+            AddPoint(x-105,y+f*25)
+            AddPoint(x-250,y-f*80)
+            AddPoint(x-115,y-f*70)
+            AddPoint(x-130,y-f*25)
+            AddPoint(x-175,y-f*60)
+            -- fill in arm 2
+            AddPoint(x+275,y-f*92,4)
+            AddPoint(x+50,y-f*92)
+            AddPoint(x+105,y+f*25)
+            AddPoint(x+250,y-f*80)
+            AddPoint(x+115,y-f*70)
+            AddPoint(x+130,y-f*25)
+            AddPoint(x+175,y-f*60)
+            -- fill in arm 3
+            AddPoint(x-175,y+f*230,4)
+            AddPoint(x-110,y+f*60)
+            AddPoint(x-10,y+f*120)
+            AddPoint(x-155,y+f*215)
+            AddPoint(x-105,y+f*95)
+            AddPoint(x-60,y+f*130)
+            AddPoint(x-85,y+f*155,5)
+            -- fill in arm 4
+            AddPoint(x,y-f*300,3)
+            AddPoint(x+50,y-f*125)
+            AddPoint(x-50,y-f*125)
+            AddPoint(x,y-f*270)
+            AddPoint(x-40,y-f*160)
+            AddPoint(x+40,y-f*160)
+            AddPoint(x,y-f*195,5)
+            -- fill in arm 5
+            AddPoint(x+175,y+f*230,4)
+            AddPoint(x+110,y+f*60)
+            AddPoint(x+10,y+f*120)
+            AddPoint(x+155,y+f*215)
+            AddPoint(x+105,y+f*95)
+            AddPoint(x+60,y+f*130)
+            AddPoint(x+85,y+f*155,5)
+        end
+        return true
+    else
+        return false
+    end
+end
+
+-- well. this was easy
+function DrawCircle(x, y, w)
+    if NoOverlap(x,y,w*10+6,w*10+6) then
+        AddCollision(x,y,w*10+6,w*10+6)
+        AddPoint(x,y,w)
+        return true
+    else
+        return false
+    end
+end
+
+function DrawCrescent(x, y, w, s)
+    b = div(w*(GetRandom(4)+1)*10+6,6)
+    
+    if NoOverlap(x,y,w*10+6,w*10+6) then
+        AddCollision(x,y,w*10+6,w*10+6)
+        AddPoint(x,y,w)
+        if s then -- side
+            if GetRandom(1) == 0 then
+                b = b*-1
+            end
+            AddPoint(x-b,y,w,true)
+        else -- top
+            AddPoint(x,y-b,w,true)
+        end
+        return true
+    else
+        return false
+    end
+end
+
+function DrawCones(x,w,h,c)
+    y = 2048-h
+    hw = div(w,2)
+    if NoOverlap(x+div(w*c,2),y+div(h,2),w*c,h) then
+        AddCollision(x+div(w*c,2),y+div(h,2),w*c,h)
+        x = x + hw
+        for i = 1,c do -- I'm guessing outlining is slightly more efficient than fanning at 16px brush
+            AddPoint(x,y,1)
+            AddPoint(x-hw+8,2048)
+            AddPoint(x+hw-8,2048)
+            AddPoint(x,y)
+            for j = x-hw+25,x+hw,34 do
+                AddPoint(x,y+30,3)
+                AddPoint(j,2048)
+            end
+            if GetRandom(2)==0 then
+                AddPoint(x,y-20,8)
+            end
+            x = x + w
+        end
+    else
+        return false
+    end
+    
+end
+
+function DrawPlateau(x,y,l,t,b)
+    if NoOverlapXY(x-28,y-28,x+l+28,y+l+28) then
+        AddPoint(x,y,5)
+        AddPoint(x+l,y)
+
+        to = GetRandom(6)
+        if not(to==0) then
+            if GetRandom(2)==0 then
+                to = div(l,to)
+            else
+                to = l-div(l,to)
+            end
+        end
+        if t>0 and NoOverlapXY(x+to-28,y-t-28,x+to+28,y+28) then
+            AddPoint(x+to,y-t,5)
+            AddPoint(x+to,y)
+            if GetRandom(2)==0 then
+                AddPoint(x+to,y-t+75,20)
+            else -- square off
+                AddPoint(x+to-20,y-t,1)
+                AddPoint(x+to-20,y-t-20)
+                AddPoint(x+to+20,y-t-20)
+                AddPoint(x+to+20,y-t)
+            end
+            tSucc = true
+        end
+
+        if to > 120 and GetRandom(2)==0 then -- left bumper
+            AddPoint(x+15,y-20,9)
+        else -- square off
+            --AddPoint(x-50,y,2)
+            AddPoint(x,y+20,1)
+            AddPoint(x-20,y+20)
+            AddPoint(x-20,y-20)
+            AddPoint(x,y-20)
+        end
+        if to < (l-120) and GetRandom(2)==0 then -- right bumper
+            AddPoint(x+l-15,y-20,9)
+        else -- square off
+            --AddPoint(x+l+50,y,2)
+            AddPoint(x+l,y+20,1)
+            AddPoint(x+l+20,y+20)
+            AddPoint(x+l+20,y-20)
+            AddPoint(x+l,y-20)
+        end
+        bo = GetRandom(6)
+        if not(bo == 0) then
+            if GetRandom(2)==0 then
+                bo = div(l,bo)
+            else
+                bo = l-div(l,bo)
+            end
+        end
+        -- still consider a success even if we can't place this one.  Might need to return more than true/false
+        if b>0 and NoOverlapXY(x+bo-28,y-28,x+bo+28,y+b+28) then
+            AddPoint(x+bo,y,5)
+            AddPoint(x+bo,y+b)
+            if GetRandom(2)==0 then
+                AddPoint(x+bo,y+b-75,20)
+            else -- square off
+                AddPoint(x+bo-20,y+b,1)
+                AddPoint(x+bo-20,y+b+20)
+                AddPoint(x+bo+20,y+b+20)
+                AddPoint(x+bo+20,y+b)
+            end
+            bSucc = true
+        end
+        if bSucc then AddCollisionXY(x+bo-28,y-28,x+bo+28,y+b+28) end
+        if tSucc then AddCollisionXY(x+to-28,y-t-28,x+to+28,y+28) end
+        AddCollisionXY(x-28,y-28,x+l+28,y+28) 
+        return true
+    else
+        return false
+    end
+end
+
+function AddCollision(x,y,w,h)
+    table.insert(ObjectList,{x-div(w+Padding,2),
+                             y-div(h+Padding,2),
+                             x+div(w+Padding,2),
+                             y+div(h+Padding,2)})
+end
+
+function AddCollisionXY(x,y,x2,y2)
+    table.insert(ObjectList,{x-div(Padding,2),
+                             y-div(Padding,2),
+                             x2+div(Padding,2),
+                             y2+div(Padding,2)})
+end
+
+-- bounding box check
+function NoOverlap(x,y,w,h)
+    w = w
+    h = h
+    x = x-div(w,2)
+    y = y-div(h,2)
+    x2 = x+w
+    y2 = y+h
+    return NoOverlapXY(x,y,x2,y2)
+end
+function NoOverlapXY(x,y,x2,y2)
+    i=1
+    l=table.getn(ObjectList)
+    while i<=l do
+        ox = ObjectList[i][1]
+        oy = ObjectList[i][2]
+        ox2 = ObjectList[i][3]
+        oy2 = ObjectList[i][4]
+         --   WriteLnToConsole(ox..' '..oy..' '..ox2..' '..oy2..' - '..x..' '..y..' '..x2..' '..y2)
+        --if (math.abs(ox + ox2 -x - x2) <= (ox2 - ox + x2 - x)) and (math.abs(oy + oy2 - y - y2) <= (oy - oy2 + y - y2)) then
+        if x < ox2 and ox < x2 and y < oy2 and oy < y2 then
+            return false
+        end
+        i=i+1
+    end
+    return true
+end
+
+function dbg()
+    i=1
+    l=table.getn(ObjectList)
+    while i<=l do
+        ox = ObjectList[i][1]
+        oy = ObjectList[i][2]
+        ox2 = ObjectList[i][3]
+        oy2 = ObjectList[i][4]
+        AddPoint(ox,oy,1)
+        AddPoint(ox2,oy)
+        AddPoint(ox2,oy2)
+        AddPoint(ox,oy2)
+        AddPoint(ox,oy)
+        AddPoint(ox2,oy2)
+        i=i+1
+    end
+end
+
+function onGameInit()
+    MapGen = 2
+    TemplateFilter = 0
+    TotGen = 0
+    Tries = 0
+    if band(GameFlags,gfBottomBorder) == 0 and GetRandom(2) == 0 then
+        AddPoint(-50,2010,7)
+        AddPoint(4150,2010)
+        for i = 0,GetRandom(3) do
+            x = GetRandom(4096)
+            w = GetRandom(40)+10
+            AddPoint(x,2200,w,true)
+            AddPoint(x,1900)
+            table.insert(ObjectList,{x-div(w*9,2),
+                                     2010-div(100,2),
+                                     x+div(w*9,2),
+                                     2010+div(100,2)})
+        end
+    end
+        
+    if GetRandom(2) == 0 then
+        l = GetRandom(3)+1
+        w = GetRandom(200)+200
+        h = GetRandom(350)+200
+        x = GetRandom(4096-w*l)
+        DrawCones(x,w,h,l)
+        --if DrawCones(x,w,h,l) then TotGen = TotGen+1
+    end
+    if GetRandom(2) == 0 then
+        for i = 1,GetRandom(5)+1 do
+            w = GetRandom(35)+15
+            x = GetRandom(4096-w*12)+w
+	    if GetRandom(2)==0 then
+		y = 2048-GetRandom(w*10+6)
+	    else
+	    	y = 2048
+	    end
+           -- if AddPoint(x,y,w) then TotGetn = TotGen+1
+           DrawCircle(x,y,w)
+        end
+    end
+    if GetRandom(2)==0 then
+        x = GetRandom(3300)+350
+        y = GetRandom(1300)+350
+        if DrawStar(x,y, 1, 1+GetRandom(2)*-2) then
+            TotGen = TotGen+1
+        end
+    end
+
+    while (TotGen < 6) and (Tries < 100) do
+        l = GetRandom(1000-Tries*10)+300
+        x = GetRandom(3900-l)+100
+        y = GetRandom(1900)+100
+        if GetRandom(2)==0 then b = GetRandom(800)+300
+        else b = 0 end
+        if GetRandom(2)==0 then t = GetRandom(800)+300
+        else t = 0 end
+        if y-t < 50 then t = y - 50 end
+        if t < 200 then t = 0 end
+        if DrawPlateau(x,y,l,t,b) then
+            TotGen = TotGen+1
+        end
+        Tries = Tries + 1
+    end
+    Tries = 0
+    while (TotGen < 17) and (Tries < 1000) do
+        if Tries < 500 and GetRandom(2)==0 then
+            x = GetRandom(3300)+350
+            y = GetRandom(1300)+350
+            if DrawStar(x,y, 1, 1+GetRandom(2)*-2) then
+                TotGen = TotGen+1
+            end
+        else
+            if Tries > 500 then d = GetRandom(2)+3
+            else d = GetRandom(3)+2 end
+            x = GetRandom(4000-div(700,d))+div(700,d*2)
+            y = GetRandom(1300-div(700,d))+div(700,d*2)
+            if DrawStar(x,y, d, 1+GetRandom(2)*-2) then
+                TotGen = TotGen+1
+            end
+        end
+        w = GetRandom(35-div(Tries,29))+15
+        x = GetRandom(4050-w*20)+w*10
+        y = GetRandom(2000-w*20)+w*10
+        if DrawCircle(x,y,w) then
+            TotGen = TotGen+1
+        end
+        w = GetRandom(35-div(Tries,29))+5
+        x = GetRandom(4050-w*20)+w*10
+        y = GetRandom(2000-w*20)+w*10
+        if DrawCrescent(x,y,w,GetRandom(2)==0) then
+            TotGen = TotGen+1
+        end
+        Tries = Tries + 1
+    end
+--    Padding = div(Padding,2)
+--    Tries = 0
+--    while (TotGen < 21) and (Tries < 10000) do
+--        r = GetRandom(20-div(Tries,223))+5
+--        x = GetRandom(4050-r*20)+r*10
+--        y = GetRandom(2000-r*20)+r*10
+--        if DrawCircle(x,y,r) then
+--            TotGen = TotGen+1
+--        end
+--        Tries = Tries + 1
+--    end
+    --dbg()
+    FlushPoints()
+end 
Binary file share/hedgewars/Data/Sounds/frozen_hog_impact.ogg has changed
Binary file share/hedgewars/Data/Sounds/hog_freeze.ogg has changed
Binary file share/hedgewars/Data/Sounds/ice_beam.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_uk/JustYouwait.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/Default_uk/Justyouwait.ogg has changed
Binary file share/hedgewars/Data/Themes/Bamboo/Flake.png has changed
Binary file share/hedgewars/Data/Themes/Blox/LandBackTex.png has changed
--- a/share/hedgewars/Data/Themes/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/Themes/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -9,14 +9,15 @@
     Castle
     Cheese
     Christmas
+    City
     Compost
+    CrazyMission
     Deepspace
     Desert
-    City
-    CrazyMission
     EarthRise
     Eyes
     Freeway
+    Fruit
     Golf
     Halloween
     Hell
Binary file share/hedgewars/Data/Themes/Cave/Stalactite.png has changed
Binary file share/hedgewars/Data/Themes/Cave/Stalactite_mask.png has changed
Binary file share/hedgewars/Data/Themes/Cave/Stalagmite01.png has changed
Binary file share/hedgewars/Data/Themes/Cave/Stalagmite01_mask.png has changed
Binary file share/hedgewars/Data/Themes/Cave/Stalagmite02.png has changed
Binary file share/hedgewars/Data/Themes/Cave/Stalagmite02_mask.png has changed
Binary file share/hedgewars/Data/Themes/Cheese/cheese.png has changed
Binary file share/hedgewars/Data/Themes/Cheese/cheese_mask.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/Rock.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/RockShort.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/RockShort_mask.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/Rock_mask.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/horizontL.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/horizontR.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/icon.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/icon@2x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/Banana.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg4227"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   width="188"
+   height="122"
+   sodipodi:docname="Banana.svg"
+   inkscape:export-filename="/home/alumno/Banana2.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata4233">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs4231" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="576"
+     id="namedview4229"
+     showgrid="false"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="188.27075"
+     inkscape:cy="88.86354"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g3851" />
+  <rect
+     style="opacity:0;fill:#ba9d00;fill-opacity:1;fill-rule:evenodd;stroke:#ff73e1;stroke-width:0.6600787;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect2996"
+     width="199.33992"
+     height="199.33992"
+     x="-5.6699605"
+     y="-39.66996"
+     rx="7.4470072"
+     ry="0.11719175" />
+  <g
+     id="g3851"
+     transform="matrix(-1,0,0,1,189.2706,0)">
+    <g
+       id="g2999"
+       transform="matrix(-0.8235295,-0.56727344,-0.56727344,0.8235295,206.82408,64.339957)">
+      <rect
+         transform="matrix(-1,0,0,1,189.2706,0)"
+         ry="0.14342025"
+         rx="9.2296047"
+         y="-2.4507911"
+         x="-1.4142135"
+         height="128.69344"
+         width="193.04016"
+         id="rect3892"
+         style="fill:#ba9d00;fill-opacity:0;fill-rule:evenodd;stroke:none" />
+      <path
+         style="fill:#aeb800;fill-opacity:1;stroke:#c8af00;stroke-width:0.46497238;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 173.22161,12.368156 c 0.38299,-1.254549 2.88882,-2.136399 5.31113,-2.136399 0.80919,0.197421 8.56261,0.719772 7.31308,4.737604 -2.73447,1.357662 -12.82099,0.135614 -12.62421,-2.601205 z"
+         id="path3763"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccc" />
+      <path
+         style="fill:#f6ee00;fill-opacity:1;stroke:#ba9d00;stroke-width:2.23267698;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 174.72691,14.430121 c 3.68436,1.59464 6.76084,1.396765 10.53259,0.852596 3.16749,12.573215 -6.38409,38.106194 -11.05639,22.947806 -0.56544,-1.970698 1.04489,-7.745226 1.5155,-13.284104 0.38228,-4.499216 -0.30164,-8.900955 -0.9917,-10.516298 z"
+         id="path3759"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsc" />
+      <path
+         style="fill:#f6ee00;fill-opacity:1;stroke:#ba9d00;stroke-width:2.86675739;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="M 14.118276,98.012947 C 6.5242914,93.166946 2.9983654,84.741923 1.8511903,80.802314 1.5117082,79.636462 1.6496188,78.973436 1.6160582,78.77484 c 0,0 -0.7585206,-2.515724 0.8157026,-3.080172 37.5043142,-13.447416 79.3121062,2.84349 108.7990492,-7.238897 42.1655,-15.932764 67.15724,-40.596497 69.14144,-36.895025 0.87923,1.640186 1.60235,3.283492 2.18586,4.925062 4.87426,13.712407 1.19063,27.947485 -4.97935,37.929279 C 140.38936,134.58 70.667237,128.54467 14.290595,98.119144 c -0.05869,-0.03263 -0.115089,-0.07075 -0.172319,-0.106197 z"
+         id="path3755"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cssscssscc" />
+      <path
+         style="fill:#f6d700;fill-opacity:1;stroke:none"
+         d="m 126.05682,97.959228 c 30.99402,-10.590639 51.90402,-42.860122 55.76745,-41.990571 4.6666,-1.178675 -5.68246,21.512754 -16.3621,32.394781 -22.4607,21.518362 -41.68714,33.775812 -88.869476,29.914632 -6.714536,-0.54948 -12.127377,-2.52613 -16.24804,-3.51148 -15.230481,-3.64199 -19.540632,-6.44601 -19.2136,-7.60165 21.074895,-6.16755 62.599736,-2.3449 84.925766,-9.205712 z"
+         id="path3755-8"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsscc" />
+      <path
+         style="fill:#f6ee00;fill-opacity:1;stroke:none"
+         d="m 176.69271,18.470917 c 3.28193,1.594639 4.25223,0.117875 7.612,-0.426293 2.8215,12.573216 -7.75472,47.26985 -11.91666,32.11147 -0.50369,-1.970699 2.99871,-16.908889 3.41791,-22.447761 0.34053,-4.499223 1.50144,-7.622073 0.88675,-9.237416 z"
+         id="path3759-1"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsc" />
+      <path
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         d="m 185.22914,16.262035 c 0.3729,6.793985 -0.95213,14.4881 -3.35782,19.872777 0.43982,-2.493879 2.50799,-6.855983 2.99692,-19.508125 0.0193,-0.500018 0.36693,-0.187987 0.36098,-0.364652 z"
+         id="path3811"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         d="m 184.04975,16.447571 c 0.3729,6.793979 -0.95213,14.488101 -3.35781,19.87277 0.43981,-2.493879 2.50799,-6.855976 2.99691,-19.508125 0.0193,-0.500018 0.36693,-0.187987 0.36098,-0.364645 z"
+         id="path3811-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#ffff00;fill-opacity:1;stroke:none"
+         d="m 46.396036,78.059476 c 9.61941,-0.782867 18.50776,0.447762 28.49952,0.400598 C 131.10109,71.001302 127.57596,62.608275 151.79818,50.65543 162.6647,67.30652 120.1764,81.050393 111.67801,82.77471 68.769756,90.815892 20.384966,88.60193 13.808626,86.848176 9.191806,85.616977 2.2070864,78.930403 3.4871764,78.177117 c 2.90155,-1.707452 29.0777996,0.36669 42.9088596,-0.117641 z"
+         id="path3938-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccssc" />
+      <path
+         style="fill:#ebb000;fill-opacity:1;stroke:none"
+         d="m 178.34655,69.354915 c -1.03692,3.62674 -4.80002,9.760945 -8.75445,14.805148 -2.07159,2.642479 -4.51976,5.046467 -5.97744,6.482336 -6.73661,6.635803 -11.3907,10.605581 -18.39689,14.945561 -19.68708,12.19516 -40.18229,14.72677 -64.772767,12.90932 -8.039936,-0.30915 -24.115294,-3.44612 -34.95135,-8.30855 -1.57065,-0.92962 -0.49367,-1.64994 2.08257,-1.73924 6.45203,-0.22363 47.8998,6.01939 68.962127,0.53135 23.21067,-6.04783 43.20085,-21.762931 60.04973,-40.131212 0.41027,-0.44727 1.41173,-0.681808 1.75847,0.505287 z"
+         id="path3755-8-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csssccsssc" />
+      <path
+         style="opacity:0.65591401;fill:#fffff4;fill-opacity:0.50965247;stroke:none"
+         d="m 63.141072,72.675461 c 9.34075,0.02053 13.86867,1.433303 22.55808,0.89946 5.39675,-0.331557 10.066969,-0.03862 19.666538,-1.532352 21.56711,-7.693615 34.5254,-14.683402 47.59194,-22.765952 4.44492,5.066169 -3.38161,11.38085 -16.63807,18.19416 -4.76161,2.447286 -9.90984,5.73305 -16.09555,7.385835 -6.81999,1.822262 -14.15651,4.734903 -22.034838,5.739436 C 55.958072,85.980763 0.5346416,79.992728 3.5135516,77.270766 23.441754,69.890694 39.153934,70.772391 63.141072,72.675461 z"
+         id="path3938"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csccssscc" />
+      <path
+         style="opacity:0.17204303;fill:#808080;fill-opacity:1;stroke:none"
+         d="m 184.92002,19.005236 c 0.59659,6.950201 1.04615,8.860806 -2.99505,15.99138 -0.17966,0.317013 -1.10197,-0.231739 -1.33716,0.07181 0.0362,-1.570984 0.72315,-4.863702 1.22582,-8.631549 0.39707,-2.976307 0.80244,-6.125771 -0.17436,-9.81309 3.46833,-0.09551 3.12785,0.600195 3.28075,2.381442 z"
+         id="path3811-4-6-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="sscscs" />
+      <path
+         style="fill:#ba9d00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 1.854167,79.082528 0,-3.875 c 2.5833333,0 5.7228328,-1.144256 5.875,-0.75 0,0 2.457974,2.169987 2.40533,4.625 -0.08906,4.153477 -1.9276336,5.758883 -5.8169417,5.758883 l -2.375,-1 z"
+         id="path3781"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccssccc" />
+      <path
+         style="opacity:0.17204303;fill:#808080;fill-opacity:1;stroke:none"
+         d="m 176.45515,18.530647 c -0.59659,6.950201 -0.86937,10.982126 0.16662,16.698487 0.065,0.358542 1.10197,-0.231739 1.33716,0.07181 -0.0362,-1.570984 2.10528,-5.570809 1.60261,-9.338656 -0.39707,-2.976307 -0.80244,-6.125771 0.17436,-9.81309 -3.46833,-0.09551 -3.12785,0.600195 -3.28075,2.381449 z"
+         id="path3811-4-6-7-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="sscscs" />
+      <rect
+         style="opacity:0;fill:#ba9d00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         id="rect3835"
+         width="188.56349"
+         height="122.03048"
+         x="-189.2706"
+         y="-0.32947311"
+         rx="9.0267563"
+         ry="0.13948013"
+         transform="scale(-1,1)" />
+    </g>
+  </g>
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/Banana1.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Banana2.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/BlueWater.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Border.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/Border.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   width="128"
+   height="32"
+   sodipodi:docname="Border.svg"
+   inkscape:export-filename="/home/alumno/Border.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="576"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="4.6875"
+     inkscape:cx="64"
+     inkscape:cy="18.499355"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <g
+     id="g3070"
+     transform="translate(0.2245075,0.10721314)">
+    <path
+       sodipodi:nodetypes="ccccccsssssccccscc"
+       inkscape:connector-curvature="0"
+       id="path2989"
+       d="m 128.00989,4.540193 0,-1.5555713 -63.918366,0.4002938 -64.16231572,-3.33453995 -0.13317,4.11842995 c 0,0 0.0416,5.4350374 0.25739,5.4450807 1.12729002,3.1826308 3.75077002,2.8905698 5.61735002,2.9254808 2.6968,0.05044 4.8541697,-0.05992 7.5499797,-0.224285 4.21062,-0.256723 8.4917,2.455958 12.66232,1.191102 1.90205,-0.576845 5.276394,0.04414 7.731429,-2.234525 2.759525,-2.5612649 5.552523,3.62746 8.388817,3.621123 4.79433,-0.01069 6.835152,-3.509979 10.711598,-3.291019 6.699636,2.456307 11.479518,0.607804 18.365457,1.247273 3.106412,0.193695 5.169745,-2.9922912 8.271262,-2.572101 9.382295,7.019144 17.230978,-1.9735465 24.547659,-0.7092611 6.60817,1.3665811 12.59694,0.4820161 17.35256,1.5555521 2.28252,0.515259 6.7314,-1.3747811 6.7314,-1.3747811 z"
+       style="fill:#008b00;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+  </g>
+  <path
+     style="fill:#00a900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     d="m 0.37712361,5.1624845 0,-5.1618448348 10.89016439,-0.0794579952 31.077592,0.0980617 12.489991,-0.0813154 9.316134,0.10831885 28.825199,-0.11555165 13.102566,0.023414 22.19235,-0.00601 0.19966,5.33746513 C 125.73695,7.9109204 115.48311,5.1549724 105.04283,5.3825149 94.419613,9.6233867 80.886124,5.5266001 78.082063,4.7039006 74.041553,3.5184322 70.9642,7.6927091 66.691245,7.9211814 62.69452,5.9294814 55.788358,4.7432211 50.673272,5.2061815 44.476156,5.7670746 39.471408,7.6849911 34.688255,7.2617296 27.833951,6.655192 24.143873,4.2520626 18.722054,4.0892781 8.7898029,3.7910726 2.1851718,5.1308145 0.37712361,5.1624845 z"
+     id="path2991"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccccccsccccc" />
+  <g
+     id="g3070-0"
+     transform="matrix(1,0,0,-1,0.2245075,31.950753)"
+     style="fill:#004600;fill-opacity:1">
+    <path
+       sodipodi:nodetypes="ccccccsssssccccscc"
+       inkscape:connector-curvature="0"
+       id="path2989-1"
+       d="m 128.00989,4.540193 0,-1.5555713 -63.918366,0.4002938 -64.16231572,-3.33453995 -0.13317,4.11842995 c 0,0 0.0416,5.4350374 0.25739,5.4450807 1.12729002,3.1826308 3.75077002,2.8905698 5.61735002,2.9254808 2.6968,0.05044 4.8541697,-0.05992 7.5499797,-0.224285 4.21062,-0.256723 8.4917,2.455958 12.66232,1.191102 1.90205,-0.576845 5.276394,0.04414 7.731429,-2.234525 2.759525,-2.5612649 5.552523,3.62746 8.388817,3.621123 4.79433,-0.01069 6.835152,-3.509979 10.711598,-3.291019 6.699636,2.456307 11.479518,0.607804 18.365457,1.247273 3.106412,0.193695 5.169745,-2.9922912 8.271262,-2.572101 9.382295,7.019144 17.230978,-1.9735465 24.547659,-0.7092611 6.60817,1.3665811 12.59694,0.4820161 17.35256,1.5555521 2.28252,0.515259 6.7314,-1.3747811 6.7314,-1.3747811 z"
+       style="fill:#004600;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+  </g>
+  <path
+     style="fill:#002d00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     d="M 0,26.758679 0,31.920541 10.890164,32 l 31.077592,-0.09807 12.489991,0.0813 9.316134,-0.108331 28.825199,0.115551 13.10257,-0.02342 22.19235,0.0059 0.19966,-5.337483 c -2.73383,-2.625369 -12.98767,0.130591 -23.42795,-0.09695 C 94.042489,22.29779 80.509,26.394591 77.704939,27.217291 73.664429,28.402766 70.587076,24.228474 66.314121,24 62.317396,25.991707 55.411234,27.177973 50.296148,26.715011 44.099032,26.154085 39.094284,24.236161 34.311131,24.659425 27.456827,25.265966 23.766749,27.669102 18.34493,27.831888 8.4126793,28.130095 1.8080482,26.790346 0,26.758679 z"
+     id="path2991-9"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccccccsccccc" />
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,6 @@
+file(GLOB images *.png)
+
+install(FILES
+    theme.cfg
+    ${images}
+    DESTINATION ${SHAREPATH}Data/Themes/Fruit)
Binary file share/hedgewars/Data/Themes/Fruit/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Clouds.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/Clouds.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   width="256"
+   height="512"
+   sodipodi:docname="Clouds.svg"
+   inkscape:export-filename="/home/alumno/Clouds.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#081471"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="576"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="0.5"
+     inkscape:cx="167.15145"
+     inkscape:cy="322.26631"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <path
+     style="fill:#d8320e;fill-opacity:1;stroke:#291c2e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     d="m 167.79628,429.90625 c 6.88621,-54.20506 -95.910233,-47.98209 -91.152321,6.33998 -36.780523,13.44756 -17.393783,55.60537 68.176851,45.15254 6.07372,5.86147 14.71644,7.1321 22.90295,4.54859 50.44072,0.35828 33.06824,-64.7277 0.0725,-56.04111 z"
+     id="path3628"
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#fa4307;fill-opacity:1;stroke:none"
+     d="m 162.03744,441.25881 c -1.36319,-49.25801 -70.84174,-44.59276 -73.56421,-0.0256 -37.89558,0.67449 -29.98797,47.87467 57.17122,35.71956 6.0099,7.17251 13.2001,8.57757 21.7257,5.87623 43.45828,-5.64496 20.24934,-50.77328 -5.33271,-41.57015 z"
+     id="path3624"
+     sodipodi:nodetypes="ccccc" />
+  <path
+     style="fill:#d8320e;fill-opacity:1;stroke:none"
+     d="M 35.51038,60.826602 C 30.10945,5.369057 173.31939,8.812326 176.54237,56.135592 202.32043,49.47102 245.36426,58.660968 243.28372,83.01503 241.20317,107.36909 165.62848,112.01794 126.37288,101.9661 14.82644,110.79522 -9.11426,74.486646 35.51038,60.826602 z"
+     id="path2818"
+     sodipodi:nodetypes="cczcc" />
+  <path
+     style="fill:#fa4307;fill-opacity:1;stroke:none;opacity:1"
+     d="M 47.935121,67.693673 C 55.279955,21.727655 154.13261,20.419517 165.21999,67.471595 c 17.14098,-3.43759 63.50622,-0.561734 63.15549,20.35266 -0.35074,20.914395 -62.747,24.193685 -102.0026,14.141845 C 14.82644,110.79522 4.5308199,68.60796 47.935121,67.693673 z"
+     id="path3594"
+     sodipodi:nodetypes="cczcc" />
+  <path
+     sodipodi:nodetypes="cczcc"
+     id="path3592"
+     d="M 58.290041,72.487617 C 50.71962,34.11482 162.60753,34.981818 158.50847,75.525421 180.25962,71.545459 222.35333,78.028505 219.69751,92.027645 217.0417,106.02679 165.62848,112.01794 126.37288,101.9661 14.82644,110.79522 23.156926,71.503599 58.290041,72.487617 z"
+     style="fill:#fc7d01;fill-opacity:1;stroke:none;opacity:1" />
+  <path
+     sodipodi:nodetypes="cczcc"
+     id="path3596"
+     d="M 35.51038,60.826602 C 30.10945,5.3690574 173.31939,8.8123258 176.54237,56.135592 202.32043,49.47102 245.36426,58.660968 243.28372,83.015027 241.20317,107.36909 165.62848,112.01794 126.37288,101.9661 14.82644,110.79522 -9.11426,74.486646 35.51038,60.826602 z"
+     style="fill:none;fill-opacity:1;stroke:#291c2e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     style="fill:#d8320e;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+     d="m 91.280324,186.44749 c -0.572532,-52.33401 78.269996,-60.0929 77.262046,6.50166 25.56939,18.81678 9.23638,58.58843 -50.30508,47.32204 -7.93005,7.2174 -19.934946,7.40328 -28.344387,4.54859 -50.462498,6.87804 -46.267598,-69.35997 1.387421,-58.37229 z"
+     id="path3598"
+     sodipodi:nodetypes="ccccc" />
+  <path
+     sodipodi:nodetypes="ccccc"
+     id="path3600"
+     d="m 97.00091,200.50411 c 2.307391,-48.17327 59.56702,-58.37674 63.55102,-0.2503 25.9859,2.78382 20.49274,49.59484 -42.32241,39.74083 -7.88081,7.17251 -19.811166,7.35723 -28.16839,4.5203 -41.903581,3.57537 -33.516057,-54.16312 6.93978,-44.01083 z"
+     style="fill:#fa4307;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
+  <path
+     style="fill:#fc7d01;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
+     d="m 100.64431,209.90024 c 0.40908,-42.47835 53.97713,-52.6313 55.11368,-3.31842 20.0414,-0.66782 26.05371,40.96574 -37.52847,33.41282 -7.88081,7.17251 -19.811166,7.35723 -28.16839,4.5203 -36.344259,-0.62802 -24.042151,-43.27546 10.58318,-34.6147 z"
+     id="path3602"
+     sodipodi:nodetypes="ccccc" />
+  <path
+     sodipodi:nodetypes="ccccc"
+     id="path3604"
+     d="m 91.280324,186.44749 c -0.572532,-52.33401 78.269996,-60.0929 77.262046,6.50166 25.56939,18.81678 9.23638,58.58843 -50.30508,47.32204 -7.93005,7.2174 -19.934946,7.40328 -28.344387,4.54859 -50.462498,6.87804 -46.267598,-69.35997 1.387421,-58.37229 z"
+     style="fill:none;stroke:#291c2e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+  <path
+     sodipodi:nodetypes="cczcc"
+     id="path3606"
+     d="m 200.66036,311.36124 c 3.82282,-50.33223 -108.617799,-46.47836 -110.791616,-3.53573 -20.29452,-5.91384 -54.028615,2.64179 -52.210845,24.72238 1.817778,22.08058 61.203712,25.91198 91.956301,16.59385 87.66707,7.43976 106.19423,-25.6173 71.04616,-37.7805 z"
+     style="fill:#d8320e;fill-opacity:1;stroke:none" />
+  <path
+     sodipodi:nodetypes="cczcc"
+     id="path3608"
+     d="m 190.95474,317.65364 c -6.11513,-41.6576 -83.75665,-42.33994 -92.108644,0.39683 -13.487225,-3.03075 -49.877382,-0.1856 -49.444047,18.78374 0.433343,18.96934 49.459562,21.62566 80.212151,12.30753 87.66707,7.43976 95.43399,-30.88016 61.34054,-31.4881 z"
+     style="fill:#fa4307;fill-opacity:1;stroke:none" />
+  <path
+     style="fill:#fc7d01;fill-opacity:1;stroke:none"
+     d="m 182.85893,322.05497 c 5.65555,-34.84599 -82.20648,-33.4888 -78.6813,3.26676 -17.111802,-3.4992 -50.120181,2.59619 -47.928803,15.28105 2.191368,12.68487 42.612784,17.85709 73.365373,8.53896 87.66707,7.43976 80.82828,-28.15856 53.24473,-27.08677 z"
+     id="path3610"
+     sodipodi:nodetypes="cczcc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:none;stroke:#291c2e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     d="m 200.66037,311.36125 c 3.82282,-50.33223 -108.617806,-46.47837 -110.791623,-3.53574 -20.29452,-5.91384 -54.028616,2.6418 -52.210846,24.72238 1.817778,22.08058 61.203715,25.91199 91.956299,16.59386 87.66708,7.43976 106.19424,-25.61731 71.04617,-37.7805 z"
+     id="path3612"
+     sodipodi:nodetypes="cczcc" />
+  <path
+     sodipodi:nodetypes="ccccc"
+     id="path3626"
+     d="m 159.62078,452.65494 c 2.4529,-46.81733 -66.020473,-42.32621 -62.612044,-3.5896 -29.498451,-3.1085 -38.604784,40.92719 48.134714,29.30647 8.04379,8.39285 14.92143,7.93815 21.27755,5.10122 35.16882,3.16859 20.7172,-41.91953 -6.80022,-30.81809 z"
+     style="fill:#fc7d01;fill-opacity:1;stroke:none"
+     inkscape:connector-curvature="0" />
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/Droplet.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/Droplet.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,478 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   width="16"
+   height="64"
+   sodipodi:docname="Droplet.svg"
+   inkscape:export-filename="/home/alumno/Droplet.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Carlos Vives B.</dc:title>
+          </cc:Agent>
+        </dc:creator>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective10" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="31.882462"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3615"
+       xlink:href="#linearGradient3617"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2851" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2837" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3743"
+       xlink:href="#linearGradient3718"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3738"
+       xlink:href="#linearGradient3718"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3733"
+       xlink:href="#linearGradient3718"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3728"
+       xlink:href="#linearGradient3718"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="48"
+       x2="64"
+       y1="31.882462"
+       x1="64"
+       id="linearGradient3724"
+       xlink:href="#linearGradient3605"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective10-6"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3706">
+      <stop
+         id="stop3708"
+         offset="0"
+         style="stop-color:#9aa3dc;stop-opacity:1;" />
+      <stop
+         id="stop3710"
+         offset="1"
+         style="stop-color:#9aa3dc;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3718">
+      <stop
+         id="stop3720"
+         offset="0"
+         style="stop-color:#545c9d;stop-opacity:1;" />
+      <stop
+         style="stop-color:#545c9d;stop-opacity:0.49803922;"
+         offset="0.5"
+         id="stop3603" />
+      <stop
+         id="stop3722"
+         offset="1"
+         style="stop-color:#545c9d;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3605">
+      <stop
+         style="stop-color:#545c9d;stop-opacity:1;"
+         offset="0"
+         id="stop3607" />
+      <stop
+         style="stop-color:#545c9d;stop-opacity:0.24705882;"
+         offset="0.5907774"
+         id="stop3613" />
+      <stop
+         style="stop-color:#545c9d;stop-opacity:0;"
+         offset="1"
+         id="stop3611" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3617">
+      <stop
+         id="stop3619"
+         offset="0"
+         style="stop-color:#545c9d;stop-opacity:1;" />
+      <stop
+         id="stop3621"
+         offset="0.52097768"
+         style="stop-color:#545c9d;stop-opacity:0.24705882;" />
+      <stop
+         id="stop3623"
+         offset="1"
+         style="stop-color:#545c9d;stop-opacity:0;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective2844"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3644"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       gradientTransform="matrix(1,0,0,2.7977291,-2.1118922,-84.521709)"
+       gradientUnits="userSpaceOnUse"
+       y2="53.688095"
+       x2="67.920876"
+       y1="42.525238"
+       x1="67.903694"
+       id="linearGradient3780"
+       xlink:href="#linearGradient3774"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3774">
+      <stop
+         id="stop3776"
+         offset="0"
+         style="stop-color:#ff9300;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.99607843;"
+         offset="0.00048828"
+         id="stop3802" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.99607843;"
+         offset="0.00097656"
+         id="stop3800" />
+      <stop
+         style="stop-color:#44ab00;stop-opacity:0.99607843;"
+         offset="0.00195312"
+         id="stop3798" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.99607843;"
+         offset="0.00390625"
+         id="stop3796" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.99215686;"
+         offset="0.0078125"
+         id="stop3794" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.98431373;"
+         offset="0.015625"
+         id="stop3792" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.96862745;"
+         offset="0.03125"
+         id="stop3790" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.9372549;"
+         offset="0.0625"
+         id="stop3788" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.8745098;"
+         offset="0.17754041"
+         id="stop3786" />
+      <stop
+         style="stop-color:#ff9300;stop-opacity:0.74901961;"
+         offset="0.37418443"
+         id="stop3784" />
+      <stop
+         style="stop-color:#fedbf8;stop-opacity:0"
+         offset="0.5"
+         id="stop3782" />
+      <stop
+         id="stop3778"
+         offset="1"
+         style="stop-color:#ff9300;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="31.882462"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3615-4"
+       xlink:href="#linearGradient3617-6"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2851-5" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2837-2" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3743-0"
+       xlink:href="#linearGradient3718-5"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3738-0"
+       xlink:href="#linearGradient3718-5"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3733-4"
+       xlink:href="#linearGradient3718-5"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="48"
+       x2="64"
+       y1="39.058487"
+       x1="64"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3728-3"
+       xlink:href="#linearGradient3718-5"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="48"
+       x2="64"
+       y1="31.882462"
+       x1="64"
+       id="linearGradient3724-3"
+       xlink:href="#linearGradient3605-3"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective10-4"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3706-4">
+      <stop
+         id="stop3708-6"
+         offset="0"
+         style="stop-color:#9aa3dc;stop-opacity:1;" />
+      <stop
+         id="stop3710-0"
+         offset="1"
+         style="stop-color:#9aa3dc;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3718-5">
+      <stop
+         id="stop3720-1"
+         offset="0"
+         style="stop-color:#545c9d;stop-opacity:1;" />
+      <stop
+         style="stop-color:#545c9d;stop-opacity:0.49803922;"
+         offset="0.5"
+         id="stop3603-9" />
+      <stop
+         id="stop3722-1"
+         offset="1"
+         style="stop-color:#545c9d;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3605-3">
+      <stop
+         style="stop-color:#545c9d;stop-opacity:1;"
+         offset="0"
+         id="stop3607-9" />
+      <stop
+         style="stop-color:#545c9d;stop-opacity:0.24705882;"
+         offset="0.5907774"
+         id="stop3613-4" />
+      <stop
+         style="stop-color:#545c9d;stop-opacity:0;"
+         offset="1"
+         id="stop3611-7" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3617-6">
+      <stop
+         id="stop3619-6"
+         offset="0"
+         style="stop-color:#ff6200;stop-opacity:1;" />
+      <stop
+         id="stop3621-4"
+         offset="0.52097768"
+         style="stop-color:#ff6200;stop-opacity:0.24705882;" />
+      <stop
+         id="stop3623-3"
+         offset="1"
+         style="stop-color:#ff6200;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3617-6"
+       id="linearGradient3714"
+       gradientUnits="userSpaceOnUse"
+       x1="64"
+       y1="31.882462"
+       x2="64"
+       y2="48" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3617-6"
+       id="linearGradient3717"
+       gradientUnits="userSpaceOnUse"
+       x1="64"
+       y1="31.882462"
+       x2="64"
+       y2="48"
+       gradientTransform="translate(-133.491,9.5795401)" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#949ed6"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="576"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="7.9999999"
+     inkscape:cx="-1.3666015"
+     inkscape:cy="38.637082"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <path
+     sodipodi:type="arc"
+     style="color:#000000;fill:#ff6600;fill-opacity:1;fill-rule:nonzero;stroke:#ffd42a;stroke-width:1.73254383000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+     id="path2884"
+     sodipodi:cx="7.7661896"
+     sodipodi:cy="8.4255676"
+     sodipodi:rx="4.5063076"
+     sodipodi:ry="4.5063076"
+     d="m 12.272497,8.4255676 a 4.5063076,4.5063076 0 1 1 -9.012615,0 4.5063076,4.5063076 0 1 1 9.012615,0 z"
+     transform="matrix(0.57718597,0,0,0.57718597,3.5174643,51.136881)" />
+  <path
+     transform="matrix(0.48723869,0,0,0.48723869,4.2160119,35.894737)"
+     d="m 12.272497,8.4255676 a 4.5063076,4.5063076 0 1 1 -9.012615,0 4.5063076,4.5063076 0 1 1 9.012615,0 z"
+     sodipodi:ry="4.5063076"
+     sodipodi:rx="4.5063076"
+     sodipodi:cy="8.4255676"
+     sodipodi:cx="7.7661896"
+     id="path3630"
+     style="color:#000000;fill:#ff6600;fill-opacity:1;fill-rule:nonzero;stroke:#ffd42a;stroke-width:2.05238217000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+     sodipodi:type="arc" />
+  <path
+     sodipodi:type="arc"
+     style="color:#000000;fill:#ff6600;fill-opacity:1;fill-rule:nonzero;stroke:#ffd42a;stroke-width:1.32086337000000009;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+     id="path3632"
+     sodipodi:cx="7.7661896"
+     sodipodi:cy="8.4255676"
+     sodipodi:rx="4.5063076"
+     sodipodi:ry="4.5063076"
+     d="m 12.272497,8.4255676 a 4.5063076,4.5063076 0 1 1 -9.012615,0 4.5063076,4.5063076 0 1 1 9.012615,0 z"
+     transform="matrix(0.75708055,0,0,0.75708055,2.1203692,17.621166)" />
+  <path
+     transform="matrix(0.43791409,0,0,0.43791409,4.5990761,4.3103248)"
+     d="m 12.272497,8.4255676 a 4.5063076,4.5063076 0 1 1 -9.012615,0 4.5063076,4.5063076 0 1 1 9.012615,0 z"
+     sodipodi:ry="4.5063076"
+     sodipodi:rx="4.5063076"
+     sodipodi:cy="8.4255676"
+     sodipodi:cx="7.7661896"
+     id="path3634"
+     style="color:#000000;fill:#ff6600;fill-opacity:1;fill-rule:nonzero;stroke:#ffd42a;stroke-width:2.28355289000000017;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+     sodipodi:type="arc" />
+  <rect
+     style="color:#000000;fill:#545c9d;fill-opacity:1;fill-rule:nonzero;stroke:#9aa3dc;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+     id="rect3603"
+     x="-38.614849"
+     y="21.853107"
+     width="0"
+     height="0"
+     rx="128"
+     ry="128" />
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/Flake.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Girder.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/LandBackTex.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/LandBackTex.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,355 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   width="240"
+   height="240"
+   sodipodi:docname="LandBackTex.svg"
+   inkscape:export-filename="/home/alumno/LandTex.png"
+   inkscape:export-xdpi="180"
+   inkscape:export-ydpi="180">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="576"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="0.98333333"
+     inkscape:cx="2.4185786"
+     inkscape:cy="89.959001"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <rect
+     style="fill:#a00000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     id="rect6362-2"
+     width="245.06123"
+     height="240"
+     x="-0.82381439"
+     y="0" />
+  <path
+     style="fill:#a00000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     d="m -0.8238169,45.299127 0,-45.13296469 122.9694569,0 122.96946,0 0,45.13296469 c -32.5153,34.430713 -73.21598,9.738833 -104.79755,9.01344 -40.989815,0 -73.180476,35.557016 -102.164654,7.935503 C 26.990153,51.610128 -0.8238169,45.299127 -0.8238169,45.299127 z"
+     id="path8053-2"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccccsc" />
+  <path
+     style="fill:#8e0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     d="m -0.7839639,77.974368 0,-43.103353 1.7255681,0 c 0.9490608,0 5.6802538,1.564059 10.5137498,3.475687 11.928457,4.717653 20.698709,10.134467 27.219686,16.811829 5.25494,5.38095 11.234577,9.419576 16.095131,10.870589 1.743305,0.520428 5.484593,0.820972 9.605155,0.771601 8.522995,-0.102126 13.076477,-1.482101 33.822605,-10.250281 21.033349,-8.889575 30.596649,-11.541829 41.587409,-11.533722 6.32058,0.0048 10.94939,0.857754 30.50628,5.622335 19.50463,4.75185 24.43939,3.199429 35.03832,2.736834 10.58496,-0.461987 14.2368,-4.053646 22.51845,-9.136336 4.75027,-2.915379 5.15199,-2.503138 9.72367,-7.306932 1.94047,-2.038992 6.56319,-2.285711 6.7215,-2.285711 0.15831,0 0.4714,60.184143 0.4714,83.890982 0,0 -11.52851,-11.23072 -19.85007,-1.07116 -29.00312,35.40905 -68.50781,2.83973 -102.64905,3.61099 -36.863209,0.83275 -80.483557,27.25966 -110.589063,1.27434 -4.4934327,-3.87847 -9.7723273,3.15878 -11.5159686,-5.47155 -1.7640732,-8.73149 -0.9447723,-38.906142 -0.9447723,-38.906142 z"
+     id="path8825-2"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccsssssssssssscssssc" />
+  <path
+     style="fill:#7e0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     d="m -1.0847357,106.17198 c 15.2834687,-5.81848 10.6054128,8.77873 34.7161807,14.75411 25.166073,6.23693 63.820796,-5.31895 84.613955,-5.25031 21.25889,0.0701 86.65679,-2.74298 112.65186,-8.32828 10.47951,-2.25163 12.90054,-1.70704 12.90054,-1.70704 l 0.18355,69.01918 c 0,0 -5.98471,-3.08321 -16.37315,4.67838 -25.76305,19.24849 -52.70289,9.29007 -93.33067,9.59254 -35.958875,0.26771 -67.699114,4.80055 -110.534816,-2.87936 -11.50153,-2.06207 -14.7175712,-12.47698 -24.1394709,-11.39156 0.3760056,-33.36102 -0.4090583,-52.79629 -0.687989,-68.48766 z"
+     id="path8829-7"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="csssccsssccc" />
+  <g
+     id="g3044"
+     style="fill:#000000"
+     transform="matrix(1.0210885,0,0,1,-1.0847459,0)">
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,38.8411,-83.851215)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-0"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,41.55609,-94.925726)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-3"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.59238187,-0.43174056,-0.28113037,0.90973907,10.08477,24.974226)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-4"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,112.1639,58.32996)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-6"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,87.72489,-63.875755)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-3"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,151.98454,79.27951)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-6"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,132.40971,-22.248043)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-3"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,88.97635,16.973638)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-3"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,176.41453,29.407128)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-4-4"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,220.06267,-107.27773)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-4-3-4"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,131.33797,-105.77486)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-4-3-1-39"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,214.54084,-1.3396008)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-74-7"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,222.21373,-47.072616)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-1-2"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,156.05786,93.089866)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-8-58"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,184.94882,-47.600392)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-5-9"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,113.26926,114.8096)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-9-0"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,135.81205,14.052233)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-7-2"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,201.50517,80.230526)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-5-4"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,97.00118,80.340996)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-4-38-7"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,74.8708,-27.846868)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-4-3-8-6"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,125.75391,-93.350442)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-4-3-1-3-5"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,32.19821,75.374751)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-0-7"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,31.09286,89.955298)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-8-5-1"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.54173473,-0.3954267,0.25709444,0.83322058,70.91349,110.90484)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-9-9-3"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,34.17129,-66.115345)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-2-3-5-4-3-0-3"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,5.30853,-49.040812)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-1-5-8"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.54173473,-0.3954267,-0.25709444,0.83322058,30.70157,-20.301408)"
+       d="m -74.745762,103.72881 c 0,2.52741 -1.024433,4.57627 -2.288135,4.57627 -1.263703,0 -2.288136,-2.04886 -2.288136,-4.57627 0,-2.5274 1.024433,-4.576268 2.288136,-4.576268 1.263702,0 2.288135,2.048868 2.288135,4.576268 z"
+       sodipodi:ry="4.5762715"
+       sodipodi:rx="2.2881358"
+       sodipodi:cy="103.72881"
+       sodipodi:cx="-77.033897"
+       id="path7309-7-5-9-5-5-0-5"
+       style="opacity:0.50879995;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/LandTex.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/LandTex.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   width="240"
+   height="240"
+   sodipodi:docname="LandTex.svg"
+   inkscape:export-filename="/home/ranitas/LandTex.png"
+   inkscape:export-xdpi="180"
+   inkscape:export-ydpi="180">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="959"
+     inkscape:window-height="744"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="197.60139"
+     inkscape:cy="139.98653"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <rect
+     style="fill:#007800;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     id="rect6362-2"
+     width="242.12071"
+     height="240"
+     x="-2"
+     y="1.5258789e-05" />
+  <path
+     style="fill:#006900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     d="m -2,67.454553 0.1872007,-44.682327 1.7001611,0 c 0.9350872,0 5.5966192,1.621355 10.3589482,3.603012 11.752825,4.89047 20.393945,10.505717 26.818911,17.427682 5.177567,5.578068 11.069161,9.76464 15.85815,11.268806 1.717635,0.539489 5.40384,0.851047 9.463731,0.799867 8.397503,-0.105872 12.883942,-1.536394 33.324608,-10.625775 20.72365,-9.215217 30.14616,-11.964634 40.9751,-11.956226 6.2275,0.0049 10.78816,0.889173 30.0571,5.828293 19.21745,4.925924 24.07955,3.316632 34.52243,2.837087 10.4291,-0.478906 14.02718,-4.202139 22.18689,-9.471017 4.68033,-3.022177 5.07613,-2.594834 9.5805,-7.574602 1.91189,-2.113685 6.93102,-2.36944 7.08698,-2.36944 0.15599,0 0,62.388826 0,86.964117 0,0 -7.90828,-5.1699 -19.55779,-1.11041 -38.85174,13.53861 -67.84012,5.10113 -101.13767,6.66942 C 83.126555,116.77276 40.126713,140.39512 10.464473,113.4579 6.0372003,109.43735 0.1833992,116.73239 -1.5345691,107.78588 -1.8855187,94.859569 -2,67.454553 -2,67.454553 z"
+     id="path8825-2"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccsssssssssssccssscc" />
+  <path
+     style="fill:#005500;fill-opacity:1;fill-rule:evenodd;stroke:none"
+     d="m -1.9999898,104.11919 c 15.0997808,-6.400835 10.4779488,9.65741 34.2989348,16.23088 24.863609,6.86114 63.05375,-5.85136 83.596995,-5.77583 21.00341,0.077 85.61529,-3.01755 111.29794,-9.16188 10.35355,-2.47696 12.92683,-1.87786 12.92683,-1.87786 l 0,75.92721 c 0,0 -5.91279,-3.39184 -16.17637,5.1466 -25.45341,21.17505 -52.06946,10.2199 -92.20894,10.55268 -35.526705,0.29447 -66.885465,5.28102 -109.206335,-3.16757 C 11.165768,189.72493 7.3086609,178.26762 -2,179.46171 c 0.3714865,-36.7001 0.2755784,-58.08059 0,-75.34252 z"
+     id="path8829-7"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="csssccsssccc" />
+  <g
+     id="g4094"
+     transform="matrix(1.1298943,0,0,1,-17.696501,11.237427)">
+    <path
+       transform="matrix(0.07239434,-0.02732889,0.037041,0.1144023,26.89849,170.0357)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.07239434,-0.02732889,-0.037041,0.1144023,96.00332,152.69877)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,-0.07343725,-0.11277764,-0.03757461,177.39469,123.4436)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,0.07343725,-0.11277764,0.03757461,131.96895,82.086464)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.07239434,-0.02732889,-0.037041,0.1144023,186.20497,154.78254)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-6"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.07239434,-0.02732889,0.037041,0.1144023,117.10014,137.44561)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-8"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,-0.07343725,-0.11277764,-0.03757461,208.12515,43.269483)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-63"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,0.07343725,-0.11277764,0.03757461,162.69941,1.9123473)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-2"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.07239434,-0.02732889,-0.037041,0.1144023,216.93543,74.608424)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-6-6"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.07239434,-0.02732889,0.037041,0.1144023,147.8306,57.2715)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-8-3"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,-0.07343725,-0.11277764,-0.03757461,93.2099,72.154264)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-63-6"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,0.07343725,-0.11277764,0.03757461,47.78416,30.797124)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-2-2"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.07239434,-0.02732889,-0.037041,0.1144023,102.02018,103.4932)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-6-6-0"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.07239434,-0.02732889,0.037041,0.1144023,32.91535,86.156274)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-8-3-5"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,0.07343725,-0.11277764,0.03757461,176.93669,126.73584)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-2-2-8"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.07239434,-0.02732889,-0.037041,0.1144023,231.17272,199.43192)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-6-6-0-3"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.07239434,-0.02732889,0.037041,0.1144023,162.06788,182.09499)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-8-3-5-5"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.02694078,0.07343725,-0.11277764,0.03757461,75.24178,124.67265)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-2-2-8-0"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.07239434,-0.02732889,-0.037041,0.1144023,129.47781,197.36873)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-6-6-0-3-2"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.07239434,-0.02732889,0.037041,0.1144023,60.37297,180.0318)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-8-3-5-5-4"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.02694078,0.07343725,0.11277764,0.03757461,70.77317,51.879468)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-63-6-5-1-7"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.02694078,-0.07343725,0.11277764,-0.03757461,116.19893,93.236604)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-2-2-8-0-9"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.07239434,0.02732889,0.037041,-0.1144023,61.96289,20.540524)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-9-6-6-0-3-2-2"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.07239434,0.02732889,-0.037041,-0.1144023,131.06773,37.877451)"
+       sodipodi:open="true"
+       sodipodi:end="6.2714539"
+       sodipodi:start="0"
+       d="m 76.223709,211.41611 c 0,15.98502 -9.3365,28.94343 -20.853657,28.94343 -11.517156,0 -20.853656,-12.95841 -20.853656,-28.94343 0,-15.98502 9.3365,-28.94344 20.853656,-28.94344 11.421734,0 20.718232,12.75241 20.852222,28.6039"
+       sodipodi:ry="28.943438"
+       sodipodi:rx="20.853657"
+       sodipodi:cy="211.41611"
+       sodipodi:cx="55.370052"
+       id="path4642-2-8-8-3-5-5-4-7"
+       style="opacity:0.1971326;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#0a190d;stroke-width:5.79517746;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+  </g>
+  <path
+     style="fill:#6eab00;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 26.991263,122.01389 c 0,-11.35826 -7.842673,-23.905005 -9.284214,-35.727881 C 16.040721,72.61953 25.491641,57.149018 25.491641,44.019605 26.393947,30.350894 20.742837,17.139212 20.742837,3.6249996 l 0,-5.3803995 3.225252,0 3.22525,0 0,5.3803995 c -1.837153,13.8043924 5.328349,27.8250894 5.019737,40.1029874 -0.436437,9.065082 -9.8388,32.242107 -8.563751,43.10109 1.616625,11.643683 9.792441,24.062173 9.792441,35.184813 0,26.02756 -13.246664,43.99954 -13.246664,70.0271 -0.519947,14.80744 6.998237,28.71299 6.998237,43.33401 l 0,6.3804 -3.22525,0 -3.225252,0 0,-4.1304 0,-2.625 c 0.220685,-12.40328 -6.665416,-23.80402 -6.998238,-35.91037 0,-28.37711 13.246664,-48.69863 13.246664,-77.07574 z"
+     id="path3966"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccsccccccccs" />
+  <path
+     style="fill:#6eab00;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 108.60168,98.486116 c 0,11.358274 -15.657325,38.904994 -14.215795,50.727874 1.666335,13.66648 18.715415,34.63699 18.715415,47.76641 1.77557,13.53693 -9.7512,26.69557 -9.7512,39.26961 l 0,5.50539 -3.22524,0 -3.225261,0 0,-5.50539 c 0.235201,-13.52038 8.820341,-28.06255 9.480261,-38.978 0.43644,-9.06508 -16.661195,-37.7421 -17.936245,-48.60109 -1.61662,-11.64368 13.707555,-39.06216 13.707555,-50.184804 0,-26.02756 -12.253335,-28.99954 -12.253335,-55.0271 -0.40636,-13.6612 7.001764,-26.12426 7.001764,-39.5840099 l 0,-5.6304 3.225261,0 3.22524,0 0,5.5054 c 0.8124,11.7559299 -6.681704,21.2300199 -7.001758,32.6603799 0,28.37711 12.253338,33.69862 12.253338,62.07573 z"
+     id="path3966-1"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccscccccccs" />
+  <path
+     style="fill:#6eab00;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 68.97362,127.76389 c 0,-11.35826 -15.592677,-39.655008 -17.034218,-51.477878 -1.666328,-13.66648 10.534588,-33.63699 10.534588,-46.76641 0.90231,-13.66871 -6.4988,-12.38039 -6.4988,-25.8945997 l 0,-5.3804 3.22525,0 3.22525,0 0,5.3804 c -1.83715,13.8043897 7.07835,13.3250897 6.76974,25.6029897 -0.43644,9.06508 -12.588801,36.7421 -11.31375,47.60109 1.61662,11.64368 17.54244,39.812168 17.54244,50.934808 0,15.26111 -14.52986,22.94031 -13.10676,36.47903 1.00397,9.55134 11.3601,19.03162 11.3601,29.79807 -0.51995,14.80744 -11.25177,26.71299 -11.25177,41.33401 l 0,6.3804 -3.22525,0 -3.22525,0 0,-4.1304 0,-2.625 c 0.220685,-12.40328 11.58458,-21.80402 11.25176,-33.91037 0,-13.15442 -10.575141,-24.75757 -11.728646,-36.51589 -1.334871,-13.60708 13.475316,-21.58716 13.475316,-36.80985 z"
+     id="path3966-8"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccssccccccccss" />
+  <path
+     style="fill:#6eab00;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 222.92548,122.01389 c 0,-11.35826 -7.84268,-23.905006 -9.28422,-35.727876 -1.66633,-13.66648 7.78459,-29.13699 7.78459,-42.26641 0.90231,-13.66871 -4.7488,-26.88039 -4.7488,-40.3946004 l 0,-5.3804 3.22525,0 3.22525,0 0,5.3804 c -1.83715,13.8043904 5.32835,27.8250904 5.01974,40.1029904 -0.43644,9.06508 -9.8388,32.2421 -8.56375,43.10109 1.61662,11.64368 9.79244,24.062166 9.79244,35.184806 0,26.02756 -13.24667,43.99954 -13.24667,70.0271 -0.51994,14.80744 6.99824,28.71299 6.99824,43.33401 l 0,6.3804 -3.22525,0 -3.22525,0 0,-4.1304 0,-2.625 c 0.22068,-12.40328 -6.66542,-23.80402 -6.99824,-35.91037 0,-28.37711 13.24667,-48.69863 13.24667,-77.07574 z"
+     id="path3966-2"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccsccccccccs" />
+  <path
+     style="fill:#6eab00;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 188.11089,98.486114 c 0,11.358266 -15.65733,38.904986 -14.21579,50.727876 1.66633,13.66648 18.71541,34.63699 18.71541,47.76641 1.77557,13.53693 -9.75119,26.69557 -9.75119,39.2696 l 0,5.50539 -3.22525,0 -3.22526,0 0,-5.50539 c 0.2352,-13.52037 8.82034,-28.06254 9.48027,-38.97799 0.43644,-9.06508 -16.66121,-37.7421 -17.93626,-48.60109 -1.61662,-11.64369 13.70757,-39.06217 13.70757,-50.184806 0,-26.02756 -12.25335,-28.99954 -12.25335,-55.027101 -0.40636,-13.6612 7.00177,-26.12426 7.00177,-39.5840094 l 0,-5.6304 3.22526,0 3.22525,0 0,5.5054 c 0.81239,11.7559294 -6.68171,21.2300194 -7.00176,32.6603794 0,28.377111 12.25333,33.698621 12.25333,62.075731 z"
+     id="path3966-1-6"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccscccccccs" />
+  <path
+     style="fill:#6eab00;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 134.14695,127.76389 c 0,-11.35826 15.59268,-39.655006 17.03422,-51.477876 1.66633,-13.66648 -10.53459,-33.636991 -10.53459,-46.766411 -0.90231,-13.66871 6.4988,-12.38039 6.4988,-25.8945994 l 0,-5.3804 -3.22525,0 -3.22525,0 0,5.3804 c 1.83715,13.8043894 -7.07835,13.3250894 -6.76974,25.6029894 0.43644,9.06508 12.5888,36.742101 11.31375,47.601091 -1.61662,11.64368 -17.54244,39.812166 -17.54244,50.934806 0,15.26111 14.52986,22.94031 13.10676,36.47903 -1.00397,9.55134 -11.3601,19.03162 -11.3601,29.79807 0.51995,14.80744 11.25177,26.71299 11.25177,41.33401 l 0,6.3804 3.22525,0 3.22525,0 0,-4.1304 0,-2.625 c -0.22068,-12.40328 -11.58458,-21.80402 -11.25176,-33.91037 0,-13.15442 10.57514,-24.75757 11.72865,-36.51589 1.33487,-13.60708 -13.47532,-21.58716 -13.47532,-36.80985 z"
+     id="path3966-8-7"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccssccccccccss" />
+  <path
+     style="opacity:0.42000002;fill:#000000;fill-opacity:1;stroke:#354b00;stroke-width:1.46265709;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 30.52332,122.01389 c 0,-11.35826 -7.56563,-23.905009 -8.956247,-35.727883 C 19.959609,72.619528 29.076665,57.149016 29.076665,44.019603 29.947101,30.350892 24.49562,17.13921 24.49562,3.6249985 l 0,-5.380399 3.111316,0 3.111316,0 0,5.380399 C 28.946,17.42939 35.858374,31.450087 35.560666,43.727985 c -0.421022,9.065082 -9.491239,32.242107 -8.26123,43.10109 1.559512,11.643686 9.446516,24.062175 9.446516,35.184815 0,26.02756 -12.778718,43.99954 -12.778718,70.0271 -0.50158,14.80744 6.751018,28.71299 6.751018,43.33401 l 0,6.3804 -3.111316,0 -3.111316,0 0,-4.1304 0,-2.625 c 0.212889,-12.40328 -6.429956,-23.80402 -6.751021,-35.91037 0,-28.37711 12.778721,-48.69863 12.778721,-77.07574 z"
+     id="path3966-6"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccsccccccccs" />
+  <path
+     style="opacity:0.42000002;fill:#000000;fill-opacity:1;stroke:#354b00;stroke-width:1.44404352;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 71.178261,127.76389 c 0,-11.35826 -14.661451,-39.655009 -16.0169,-51.477882 -1.566811,-13.66648 9.90544,-33.63699 9.90544,-46.76641 0.848423,-13.66871 -6.110678,-12.38039 -6.110678,-25.8945985 l 0,-5.3804 3.032632,0 3.032631,0 0,5.3804 c -1.727432,13.8043885 6.655617,13.3250885 6.365438,25.6029885 -0.410375,9.06508 -11.836973,36.7421 -10.63807,47.60109 1.520072,11.643683 16.494769,39.812172 16.494769,50.934812 0,15.26111 -13.662107,22.94031 -12.323998,36.47903 0.944012,9.55134 10.681652,19.03162 10.681652,29.79807 -0.488897,14.80744 -10.579791,26.71299 -10.579791,41.33401 l 0,6.3804 -3.032631,0 -3.032632,0 0,-4.1304 0,-2.625 c 0.207505,-12.40328 10.892726,-21.80402 10.579782,-33.91037 0,-13.15442 -9.943572,-24.75757 -11.028187,-36.51589 -1.25515,-13.60708 12.670543,-21.58716 12.670543,-36.80985 z"
+     id="path3966-8-4"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccssccccccccss" />
+  <path
+     style="opacity:0.42000002;fill:#000000;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 112.62153,98.486122 c 0,11.358268 -15.657321,38.904988 -14.215791,50.727868 1.666331,13.66648 18.715411,34.63699 18.715411,47.76641 1.77557,13.53693 -9.7512,26.69557 -9.7512,39.26961 l 0,5.50539 -3.22524,0 -3.22526,0 0,-5.50539 c 0.2352,-13.52038 8.82034,-28.06255 9.48026,-38.978 0.43644,-9.06508 -16.661191,-37.7421 -17.936241,-48.60109 -1.61662,-11.64368 13.707551,-39.06216 13.707551,-50.184798 0,-26.027562 -12.253331,-28.999542 -12.253331,-55.027102 -0.40636,-13.6612 7.001761,-26.12426 7.001761,-39.584008 l 0,-5.6304 3.22526,0 3.22524,0 0,5.5054 c 0.8124,11.755928 -6.6817,21.230018 -7.00175,32.660378 0,28.37711 12.25333,33.69862 12.25333,62.075732 z"
+     id="path3966-1-2"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccscccccccs" />
+  <path
+     style="opacity:0.42000002;fill:#000000;fill-opacity:1;stroke:#354b00;stroke-width:1.44518554;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 137.4293,127.76389 c 0,-11.35826 14.68465,-39.655003 16.04224,-51.477873 1.5693,-13.66648 -9.92111,-33.636991 -9.92111,-46.76641 -0.84977,-13.668711 6.12035,-12.380391 6.12035,-25.8945995 l 0,-5.3804 -3.03743,0 -3.03743,0 0,5.3804 c 1.73016,13.8043885 -6.66615,13.3250885 -6.37551,25.6029895 0.41102,9.06508 11.8557,36.7421 10.6549,47.60109 -1.52248,11.64368 -16.52087,39.812163 -16.52087,50.934803 0,15.26111 13.68372,22.94031 12.3435,36.47903 -0.94551,9.55134 -10.69856,19.03162 -10.69856,29.79807 0.48968,14.80744 10.59654,26.71299 10.59654,41.33401 l 0,6.3804 3.03743,0 3.03743,0 0,-4.1304 0,-2.625 c -0.20783,-12.40328 -10.90996,-21.80402 -10.59653,-33.91037 0,-13.15442 9.95931,-24.75757 11.04564,-36.51589 1.25714,-13.60708 -12.69059,-21.58716 -12.69059,-36.80985 z"
+     id="path3966-8-7-8"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccssccccccccss" />
+  <path
+     style="opacity:0.42000002;fill:#000000;fill-opacity:1;stroke:#354b00;stroke-width:1.46899056;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 191.13477,98.486135 c 0,11.358255 -15.23532,38.904975 -13.83263,50.727865 1.62141,13.66648 18.21097,34.63699 18.21097,47.76641 1.72771,13.53693 -9.48837,26.69557 -9.48837,39.2696 l 0,5.50539 -3.13832,0 -3.13833,0 0,-5.50539 c 0.22886,-13.52037 8.58261,-28.06254 9.22475,-38.97799 0.42468,-9.06508 -16.21214,-37.7421 -17.45282,-48.60109 -1.57305,-11.64369 13.33811,-39.06217 13.33811,-50.184795 0,-26.027561 -11.92309,-28.999541 -11.92309,-55.027102 -0.3954,-13.6612 6.81305,-26.12426 6.81305,-39.5840095 l 0,-5.6303999 3.13833,0 3.13832,0 0,5.5053999 c 0.7905,11.7559295 -6.50161,21.2300195 -6.81304,32.6603795 0,28.377111 11.92307,33.698621 11.92307,62.075732 z"
+     id="path3966-1-6-5"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccscccccccs" />
+  <path
+     style="opacity:0.42000002;fill:#000000;fill-opacity:1;stroke:#354b00;stroke-width:1.48919702;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     d="m 226.57307,122.01389 c 0,-11.35826 -7.84268,-23.904999 -9.28422,-35.727866 -1.66633,-13.66648 7.78459,-29.13699 7.78459,-42.26641 0.90231,-13.66871 -4.7488,-26.88039 -4.7488,-40.3945995 l 0,-5.3804 3.22525,0 3.22525,0 0,5.3804 c -1.83715,13.8043895 5.32835,27.8250895 5.01974,40.1029895 -0.43644,9.06508 -9.8388,32.2421 -8.56375,43.10109 1.61662,11.643677 9.79244,24.062156 9.79244,35.184796 0,26.02756 -13.24667,43.99954 -13.24667,70.0271 -0.51994,14.80744 6.99824,28.71299 6.99824,43.33401 l 0,6.3804 -3.22525,0 -3.22525,0 0,-4.1304 0,-2.625 c 0.22068,-12.40328 -6.66542,-23.80402 -6.99824,-35.91037 0,-28.37711 13.24667,-48.69863 13.24667,-77.07574 z"
+     id="path3966-2-5"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ssccccccccsccccccccs" />
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/Orange.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   width="128"
+   height="112"
+   sodipodi:docname="Orange.svg"
+   inkscape:export-filename="Orange1.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="959"
+     inkscape:window-height="744"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="1.489975"
+     inkscape:cx="88.580237"
+     inkscape:cy="95.117618"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g3957" />
+  <g
+     id="g3109"
+     transform="matrix(1.0331379,0,0,1.0130054,-3.3010509,-0.24371002)">
+    <g
+       transform="matrix(1.0329798,0,0,1.0764546,2.4775277,177.96782)"
+       id="g3957">
+      <path
+         style="fill:#fd872b;fill-opacity:1;stroke:#f57319;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m 51.304166,-63.96069 c -10.207682,-0.867542 -20.243789,-4.635127 -27.999996,-10.511286 -2.10329,-1.593468 -6.881355,-5.843962 -6.881355,-6.072153 0,-0.08124 18.840677,-13.512632 38.677961,-32.747731 19.83729,-19.2351 37.32916,-36.21307 38.87083,-37.72882 l 2.80303,-2.7559 2.07438,2.15394 c 9.629134,9.99848 14.655504,23.78925 13.585994,37.2757 -0.99798,12.58457 -6.00751,23.602736 -14.946894,32.874798 -9.18635,9.528232 -21.44213,15.631508 -34.65945,17.260116 -2.89562,0.356791 -8.77499,0.485012 -11.5245,0.251336 z"
+         id="path3941"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csssscsssscc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#fd872b;fill-opacity:1;stroke:#f57219;stroke-width:2.11780047;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path2982"
+         sodipodi:cx="-22.819176"
+         sodipodi:cy="-42.02943"
+         sodipodi:rx="59.061394"
+         sodipodi:ry="31.208578"
+         d="m 36.242218,-42.02943 c 0,17.236021 -26.4426867,31.208578 -59.061394,31.208578 -32.618707,0 -59.061393,-13.972557 -59.061393,-31.208578 0,-17.236022 26.442686,-31.208578 59.061393,-31.208578 32.6187073,0 59.061394,13.972556 59.061394,31.208578 z"
+         transform="matrix(-0.72680035,0.59922422,-0.60467638,-0.72854865,11.762587,-137.63201)" />
+      <g
+         id="g3924">
+        <rect
+           transform="matrix(-0.639732,0.76859805,0.71021217,0.70398769,0,0)"
+           ry="0"
+           y="-63.931553"
+           x="-125.27991"
+           height="30.56741"
+           width="1.4072362"
+           id="rect3814-2"
+           style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.5109638;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(0.67235945,0.74022481,-0.74022481,0.67235945,0,0)"
+           ry="0"
+           y="-170.95041"
+           x="-54.178646"
+           height="44.102364"
+           width="2.0134568"
+           id="rect3814"
+           style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.50999999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(-0.67235945,-0.74022481,0.74022481,-0.67235945,0,0)"
+           ry="0"
+           y="73.316986"
+           x="52.724506"
+           height="44.102364"
+           width="2.0134568"
+           id="rect3814-9"
+           style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.50999999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(-0.639732,0.76859805,0.71021217,0.70398769,0,0)"
+           ry="0"
+           y="-39.901241"
+           x="-125.67917"
+           height="30.56741"
+           width="1.4072362"
+           id="rect3814-2-5"
+           style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.5109638;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(-0.99024252,-0.1393548,-0.22472136,0.97442307,0,0)"
+           ry="0"
+           y="-162.71594"
+           x="-25.775795"
+           height="30.56741"
+           width="1.4072362"
+           id="rect3814-2-7"
+           style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.5109638;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(-0.99024252,-0.1393548,-0.22472136,0.97442307,0,0)"
+           ry="0"
+           y="-123.78313"
+           x="-25.984497"
+           height="30.56741"
+           width="1.4072362"
+           id="rect3814-2-7-8"
+           style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.5109638;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(-0.08785817,-0.99613299,-0.99999937,0.00112435,0,0)"
+           ry="0"
+           y="-100.37899"
+           x="121.80799"
+           height="30.56741"
+           width="1.4072362"
+           id="rect3814-2-7-7"
+           style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.5109638;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      </g>
+      <rect
+         style="fill:#ffd776;fill-opacity:1;stroke:#f5aa19;stroke-width:0.5000546;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3814-2-7-9"
+         width="1.4134246"
+         height="36.565731"
+         x="-108.69991"
+         y="-70.077881"
+         ry="0"
+         transform="matrix(0.16729488,0.9859069,-0.98219628,0.18785757,0,0)" />
+      <g
+         id="g3834">
+        <path
+           transform="matrix(0.9649508,0.88457471,-0.67573977,0.73714026,-22.464501,-132.27382)"
+           d="m 52.685449,-42.86837 c 0,4.540672 -1.577547,8.221615 -3.523549,8.221615 -1.946003,0 -3.52355,-3.680943 -3.52355,-8.221615 0,-4.540673 1.577547,-8.221615 3.52355,-8.221615 1.946002,0 3.523549,3.680942 3.523549,8.221615 z"
+           sodipodi:ry="8.2216148"
+           sodipodi:rx="3.5235491"
+           sodipodi:cy="-42.86837"
+           sodipodi:cx="49.1619"
+           id="path3794"
+           style="fill:#fcde7c;fill-opacity:1;stroke:#f5aa19;stroke-opacity:1"
+           sodipodi:type="arc" />
+        <path
+           transform="matrix(0.55692107,0.44000692,-0.39000302,0.36666978,9.6469899,-126.2285)"
+           d="m 52.685449,-42.86837 c 0,4.540672 -1.577547,8.221615 -3.523549,8.221615 -1.946003,0 -3.52355,-3.680943 -3.52355,-8.221615 0,-4.540673 1.577547,-8.221615 3.52355,-8.221615 1.946002,0 3.523549,3.680942 3.523549,8.221615 z"
+           sodipodi:ry="8.2216148"
+           sodipodi:rx="3.5235491"
+           sodipodi:cy="-42.86837"
+           sodipodi:cx="49.1619"
+           id="path3794-1"
+           style="opacity:0.35114507;fill:#ffffff;fill-opacity:1;stroke:#f5aa19;stroke-opacity:1"
+           sodipodi:type="arc" />
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:none;stroke:#ffd776;stroke-width:1.99791515;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path2982-1"
+         sodipodi:cx="-22.819176"
+         sodipodi:cy="-42.02943"
+         sodipodi:rx="59.061394"
+         sodipodi:ry="31.208578"
+         d="m 36.242218,-42.02943 c 0,17.236021 -26.4426867,31.208578 -59.061394,31.208578 -32.618707,0 -59.061393,-13.972557 -59.061393,-31.208578 0,-17.236022 26.442686,-31.208578 59.061393,-31.208578 32.6187073,0 59.061394,13.972556 59.061394,31.208578 z"
+         transform="matrix(-0.6392895,0.52237525,-0.54855265,-0.6425389,16.124617,-136.42274)" />
+      <path
+         style="opacity:0.2;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 20.41363,-121.52941 c 16.696134,-26.7849 54.947754,-44.08447 69.020352,-31.21496 2.932816,2.68208 3.999899,5.0841 4.38017,9.85982 0.403496,5.06876 -0.141491,7.93613 -2.637734,13.87527 -5.381256,-21.16665 -30.452933,-22.39506 -70.762788,7.47987 z"
+         id="path3770"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csccc" />
+      <path
+         style="opacity:0.2;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 41.029298,-142.85342 c 4.739952,-3.49212 9.815419,-6.49375 15.027355,-8.84316 8.69884,-3.92122 15.462072,-5.378 22.491221,-4.84454 6.451797,0.48963 10.920921,2.98436 13.442292,7.50365 0.888003,1.59166 1.14036,2.74104 1.440302,6.55997 -6.419737,-18.70494 -44.723148,-4.34045 -52.40117,-0.37592 z"
+         id="path3772"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cssscc" />
+      <path
+         style="opacity:0.15;fill:#f9f9f9;fill-opacity:1;stroke:none"
+         d="m 100.45997,-135.14946 c 0.81257,-3.01852 1.03266,-4.5023 1.1877,-8.00692 l 0.14952,-3.37979 1.50388,2.24691 c 6.39627,9.55649 9.15542,20.98807 7.76184,32.15851 -1.43017,11.46372 -6.20076,21.30662 -14.471617,29.858491 -8.607176,8.899625 -19.617886,14.638294 -31.9297,16.64144 28.387068,-22.152548 37.865847,-40.830641 35.798377,-69.518641 z"
+         id="path3953"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscssscc" />
+      <path
+         style="opacity:0.18;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 101.22635,-138.17339 c 0.26678,-1.47653 0.49032,-3.70392 0.49676,-4.94974 0.006,-1.24583 0.15199,-2.26514 0.32345,-2.26514 0.84815,0 5.26914,8.36429 6.74007,12.75189 2.29139,6.83493 2.95566,15.5134 1.73378,22.65139 -1.52985,8.93706 -4.91231,16.454859 -10.64443,23.65811 10.88118,-31.13981 5.76188,-38.114 1.35037,-51.84651 z"
+         id="path3955"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccssscc" />
+    </g>
+    <path
+       transform="matrix(0.48016759,-0.38790087,0.59894087,0.28471474,46.068156,60.997191)"
+       d="m 29.530697,-20.384773 c 0,2.316669 -1.20194,4.194701 -2.684609,4.194701 -1.482668,0 -2.684609,-1.878032 -2.684609,-4.194701 0,-2.31667 1.201941,-4.194701 2.684609,-4.194701 1.482669,0 2.684609,1.878031 2.684609,4.194701 z"
+       sodipodi:ry="4.1947012"
+       sodipodi:rx="2.6846089"
+       sodipodi:cy="-20.384773"
+       sodipodi:cx="26.846088"
+       id="path3082"
+       style="fill:#fdeaaa;fill-opacity:1;stroke:#ffe680"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.48016759,-0.38790087,-0.59894087,0.28471474,73.992871,58.172661)"
+       d="m 29.530697,-20.384773 c 0,2.316669 -1.20194,4.194701 -2.684609,4.194701 -1.482668,0 -2.684609,-1.878032 -2.684609,-4.194701 0,-2.31667 1.201941,-4.194701 2.684609,-4.194701 1.482669,0 2.684609,1.878031 2.684609,4.194701 z"
+       sodipodi:ry="4.1947012"
+       sodipodi:rx="2.6846089"
+       sodipodi:cy="-20.384773"
+       sodipodi:cx="26.846088"
+       id="path3082-9"
+       style="fill:#fdeaaa;fill-opacity:1;stroke:#ffe680"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.38790087,0.48016759,0.28471474,0.59894087,77.44825,58.388228)"
+       d="m 29.530697,-20.384773 c 0,2.316669 -1.20194,4.194701 -2.684609,4.194701 -1.482668,0 -2.684609,-1.878032 -2.684609,-4.194701 0,-2.31667 1.201941,-4.194701 2.684609,-4.194701 1.482669,0 2.684609,1.878031 2.684609,4.194701 z"
+       sodipodi:ry="4.1947012"
+       sodipodi:rx="2.6846089"
+       sodipodi:cy="-20.384773"
+       sodipodi:cx="26.846088"
+       id="path3082-91"
+       style="fill:#fdeaaa;fill-opacity:1;stroke:#ffe680"
+       sodipodi:type="arc" />
+  </g>
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/Orange1.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Orange2.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Sky.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/SkyL.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Snowball.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/Splash.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/Splash.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,1024 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   width="160"
+   height="500"
+   sodipodi:docname="Splash.svg"
+   inkscape:export-filename="/home/ranitas/Splash.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="959"
+     inkscape:window-height="744"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="2.6700353"
+     inkscape:cx="121.13111"
+     inkscape:cy="316.39606"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <image
+     y="0"
+     x="0"
+     id="image4345"
+     xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAH0CAYAAAC6pyZ4AAAABHNCSVQICAgIfAhkiAAAIABJREFU
+eJzsnXm8HFWZ979PdffdcpPcm5WwCQriqygoCooKKuI24w446iABkhtgBmfU1xlnnBlkdHR8B5cR
+heQmkKCio1FwAx1xwQUQQRREUdQIYcme3Ny9l6rz/nHqdFX37e67VfXpeznfz6fTud3VVaeqf/2c
+pc55fqKUwuGwhWe7AI4nNk6ADqs4ATqs4gTosIoToMMqToAOqzgBOqziBOiwihOgwypOgA6rOAE6
+rOIE6LCKE6DDKk6ADqs4ATqs4gTosIoToMMqToAOqzgBOqziBOiwihOgwypOgA6rOAE6rOIE6LCK
+E6DDKk6ADqs4ATqs4gTosIoToMMqToAOqzgBOqziBOiwihOgwypZ2wWYHiL083oUZwFH4uERcAfw
+Q9apm22XzjF9xHqK3i3SQZGzUVwEHAfcD/wauB/FAyiGgCIeLwfWAU8DQAFSsaebEP6RDh5ilP+H
+8A6Ez6N4H33qYDNPacb0y5HA+cBChBJwFzluYrUan9LnPycLGOcwPAIUPll2NPzs1fJkspyA4j76
+1J8SOYdpkq4AN8gLEM5DOAKFQvEAwh8ROlD0AIcCbwaWooBxdEzO1diXDwwBw0AJLb42oAtYFP6t
+gDECOvDKjQvFjaxTb0rvJBOiX94LfATIVL0zhOIbwNfw+Q6XqOHyO5+QTro4FY+XAC9FcTKVV+8x
+FO9jnfp8xR63SAcFbgReFb5SBPoJ+HcuUrsblvNqOY4Mp1Pi21yiHpn+iVaSngD75RTgZ4AWRjF8
+PQsxcejXh8NHYEqFvoy58P8BMBZuXwsjxDEgH35uBearuIs+dXIi55QWG+WpKO6jRDsH0dfCRPh2
+YAH6/DLkgbvCv5YBq4AcAfq8x9E/TsLPdoafhV8A2zBXuMQxDHESebTcF6Ovof6J/xMjXMu71Fi5
+fJeLx2G8BJ93I7yGqO75Hp28gXPVyExPPb02oJBBoRhD2IuOYAYPfYGrBRWEjyxQCB+GEjBKdIFz
+QEf4XAjfy6AvTRE4gBYhfCmxc0qLgJOBdnYTnbNCXzMfLax9QBvtdPIiMujr5KOFV5i4S0ALeQBY
+wEnkOKn8+gGi6wgwgpb0QhbSyadZwMfol3vQV1WxjOeylx6G0d9NJ9ADCC9nnKuA82Z66ukJcK26
+nX75IiO8rUJ8PvqCGbGYC22il/nlZ2Kl84kiqKGIvjwd4fZj4Wd6ws+1A7CPTtYnfWqJk+UnjBAJ
+aYjKiO+hz6cdLcb42IVCi6kYPkzzhHD7LiqvnQr3b47VhRbUaPjIAl20I7wAwnKMEn0nJjDkgUOA
+2g2mKZNuL9jjQ/TwVkYQxoGD1K9G45iLWppsQ/QXYjDibgMWArB+NtVD07hQPcx6eQThCIbRX3gc
+0wQxlaL51syPtx6meWOaMhBFVcMQOgJ2hI8AfU0D9PUfp7L5tCjcn/luAu6d2knWJt1xwDXqAbJ8
+k4VE1W7atAPdgEeBEp9uwhGTweNHtDG1a2R+nI3EF6dIFLlqfSZAi34/sAdd3R+AcPyh8riD4f/b
+wmfhlimWoibpD0QLH2URusAdKR+rjehXCtdzidqZ8hGTQ7iDTqIvtlUx0bcLUPyMPnXPbHaXvgDX
+qtvJ8igLMD2y9DDHyAIBH0/5aMkSsI02KqvLVqQDfX0XAB7/PtvdNetW3DbaiXcOkieHjh46+n2X
+i9T9KR0pHTI8XBbfrJr1KWJGHpYBwqdZq7492102R4CKbeXQndbFXYAWt67CvpPSUdKjwHB5CLp6
+KLoV8NDjhQuBDoaBy5PabfoI28rCS+vithOJWzHrEfqmk2VBUzppM6WbaNAabqJP7U1it80TYJq/
+bnMW0TEeTeEo6aLoLt8JakUhtqOvs77G25PabXNmwwRsK9+7FWYm+0YN8xyKDAE5RoAxvOQuUBPp
+AnQUz9Ba1bC5JRipJbEfuP3ZMI4nNG5CqsMqToAOqzgBOqziBOiwihOgwypOgA6rOAE6rOIE6LCK
+E6DDKk6ADqs4ATqs4gTosIoToMMqToAOqzgBOqziBOiwihOgwypOgA6rOAE6rOIE6LCKE6DDKk6A
+Dqs4ATqs4gTosIoToMMqToAOqzgBOqziBOiwyhzziouxSVbi82RG+VWFqYpjTjH3smNdJd1kuQk4
+LXxlBLgZn/dxsdpmsWSOGZCmVdfTEDqAURR/pk9VW81Ub78M4WXASwlYCOwFvssoPyxHuPWyAuHr
+CM+vsYdBYA19auuEd66RJfi0s4NdXKaCiR+dj4hA60eX5AW4QV6D8N/AMbFXS8CfUfweCR8Bvw8F
++vLwcSK101COAw+gbVqORrGKQbTnRUDkpRblnv4vSvx72dSvX94AbEZ7KN2B4jzWqT8kes6txObF
+r0S8fwZOAgYQ7kCpL7N6YOIPswVIVoCXS5ZVbAdWkY+97qFbm42ynBpXHvO5HNpCKp7UfAxtplLt
+oCTAEnQeY81B4DoEQXFp1da/YQfPmpeR8LqePpRsoBjAWAk8gc4sZASEyzjvwKxtFZIm+QjYLz/C
+57SaSVyNFat5Fia6PFaTIeqrN67EtWAXEol9HO0AFKCNCyOXzmewTv12SuczV9i89FQk+CF7xtoY
+yFe+15WDVV3gyQdYfSCR7PZJkbwAN8obUdzAHvSXX0SLwXZ/+7ByGe6lT51otzAJc/3SRRT937M/
+fwj7xqMfXpHI26M3A4d1F/EyJ3L+vpb58SU/DriWrwE/pRctvBF0d2IXuptgo1ls3H3gUTKcZaEE
+6VLw38qor8U3iLZoLaCvdQH92l4f9ozlkOBq3UFpDVIYiFaKgIvJUipXh6AvxijaCK+Wv60xXTau
+6HkiA+v4NkNoQ71d4fOB2Pb58P8HiFw0M2hnHy2+l3Kh+uPsz7HFELmAXaNR5KvFCLC7AAX/NLYs
+bpkfYZrDMFcQ8B4eQYul+jAe2rbBQwuyXhsw8qaYvA1oELTosmhP27Z5LL7rlj6DkcL9PDoMu2lc
+w2SAo3Jw6IJ7WX2gJZoh6d2KK/EBPB5lIbVNCo0vbdwFvRYBkRnzVFmAvtjLgTYemxviE2G9nMzV
+chyXyzS+F/+FDBYis++GmwJ7ipD3T2Dzkr+cRWETI907If1yNkW+zOPoqnc6IpopHlp4S9E9YuF8
+1qotTTjyzOmXLuAO4FnhK0PAL4FfIPwM4XbWKD2u8AnppJOVCMficSySW8NI8dkI+sdqTKz3o695
+9Y+7GzgqAwu9Xajit1A8AHyBPrVjkjLmCHghGR5nrXowmRNP/VacCP3cw25OZBB9QdKmCy2+QwHY
+RZ4ncanKN/yMbfrlPcAVZbf0DLp5YuxbdTwcRXenKqOjMa6OC80LtzSdwPh7C4mEGo1O+Ag/QHEz
+Hv8LDOGzFGEJihUIrwDegB5tBdiF4gOsU+tne+opD44ohciVdHMNY+HRGlW3SdCOHg/UfKblxQcg
+lBgh+oEacRi0FW1XOcoFRMKrFz+MCNtj+1LATiprohzQRYZOzqSNMys6fj568H8M3U43QzoLWYlw
+NRvk+7O9q9SM0bk7y0dJW4DGj04LcAy4OsWjJUfAzrKgDqCvkel8ZWOPDFpECi1Cv+rZCNdDC69A
+peecudtkRNZG1MY+GPus2VdANGJhvruxcPul7GEds25Xpy/Acf5YPkrao0/G6K8DUHyfdclYiqaO
+YhcZ9JdrfqAm0s203Tw++SaYSWzxO1PxdmR1sGhDV8L69ugdSUx2SH9C6qU1R/3SwbSbADzuatpx
+Z4uwEA9704NNZBsluh9fq6YykVO3L3+RxKGbcMpKYU4n7bsguq2kCbg75aMlh8eTCWj9+emmPamr
+7l8mscvmnLIKK5JmCNDMnmmbQxEw4GiK6Gqvlan0DE5EO836zaUfAU0VpiPgTs5Xe1I8WrIIR1Mi
+/RGCJDA/Eo+lSeyuWY7pOgLGb6vB1DsljbdTCKbH6JNlB/Cb6RfSIsIIigPAYjIpddVUg/3WCwzV
+r0e9bYW5wz5L5t6aEMe8otWbvY55jhOgwypOgA6rOAE6rOIE6LCKE6DDKk6ADqs4ATqs4gTosIoT
+oMMqToAOqzgBOqziBOiwihOgwypOgA6rOAE6rOIE6LCKE6DDKk6ADqs4ATqs4gTosIrt1OGzY6O8
+HMWrEAYpcSUXqwO2i+SYHnNzWeYnpJMutiCcE3v1AIrLWKeutFYux7SZewK8So4gy41oJ6BavJs+
+9YlmFskxc5ITYL88Bfg4Os3sEoQ7UdyKcCuKu2p6xV0tvWQ5E8WrgFei8y5tR/FtPLZMSAW7Qd6E
+sBFYwig6m1MBnY6jB9OgUAh/xVr15bpl3SoZ9vFisuxijXpg9ifvmCnJCHCDnIFwIzoBbC1GEG5H
+cSuKexCeB7waOJl4so4SlNNsACh+BnwX2IHHGSjOKuc/rrYjEExGfNAJxt5Mn7qpYputkmE/b0d4
+P/BUdJKJd7BOfX6GZ+6YJckIsF++ArwZ0PlE4nmJ49Zc1X1uhZbKKJXJGTNoKXcTF6NO3X2Qif4h
+xD53aMVxvo3HFQSMILwMxQVUmigSluBw+uZIMsupcNWKbrqKF6Lk6UhwNwsOXsfZqnl5GqdBUgJ8
+GDgS0NFpqM52JuVsjsimoZFloKBTgmWonzSxmg502pxM1esBlKvtdmBxxbuX0KfmRjrfydjUvZJc
+7g58dQSlQMh4ioz8ljZex9sOPGy7eNUkMw6ouH5K2/lEbkbGRLDxfrVIqzO9N2IceAxtD7YvfOwG
+Hg3/b3IcxxHmh+P65ZIlk/siA4UnsW0wy8NDGbYdzLJ77HjyfIHLpeWG3ZIR4E7+DfgmAL3oCFdE
+f/F7mFq+4plgvNBqvT6CFvowWnTxQN9Zse2NPM78aAMe3XsRpeA09ox5FembD+Y9xkqn8KSei+0V
+rjbJCPAyVaKXs4BrEbQ1ajvas8NHm+cNJ3KkiCG0Bdh+dLSrlV20yESBZogL8BsIb+EyNRdSQzZm
+q2Tw1d8xUhSU0j+6uC/fWEmAi+wVsDbJ3Yo7WxXoUxci/DNZtFlMN5FN1zA6KtXCRLIxoojVSBLV
++ypR2StWUDbGGYy9bn4cHiDcTC9n1xwemouMLn4DHkcxWtKJKIfRP8CB8P1xXxCeyube020VsRYp
+2LWqjwB30IXuyS4kShxuerEmHW0+/HsPOpIdRF+4g+iothctrHj1OUjtaGp60kW018YoWnDxzsby
+clluYJw3tWrPcEYoeQ2gI53xHIHI62M8FKbwOhvFq0c6jVKPfyTgxyxEi64HLaaAyHlnKpTQghsi
+6jnXi4wKLdw4i4mSli8FOlHAZfTxoSQ8LloKxbMZ94VATWx25IE2BXlfaMs+w0bx6pHObJg16ico
+vkUO3Rb00CKcKaaKnk5LrQs9JAO6Y9RNAeEN9KkPzjvxbZEORP4Po0Ud5arNyUwncMwXRD0BBAiQ
+4f2Aojv82xjvNQvT9uwFFgHwTtaqbzSxBE2k91hEZRkrSc2RAeN6pDsih3DN4iUTdmGJ9AS4Rt2H
+8D8sIKroOxp9IEE6iCy7tPiupU9taNLRLaCOBXSEK1A7630eGAurkEymZaJguhNSAz6EYETQPAGa
+YZbod355k45sB1HHUAj08Eu9Pn0eKAVCSQE8s3mFa0y6AlynfgtspxtiXh7pE/fahd30qe1NOKo9
+AjmWQtjtrSfAIuHtz5KAOrlJJZuU9KfkK35QvqcL6bcDjetjJPRETPVaGuEY8oHugDQaJSig24FK
+nt+sok1G+gIUfg5E1W/1JIGkMWcUCX3umBZukBPYKK8M51ZOh2Mp+rqz0chvLo8ekPbUU/jsokSs
+tmZL+hWiYqAiIqUtQIMRoOJXTTri7OiXNQgbyx2IDfID4FPs5JtcpmpP21gvK/C4As87lEWBlDtf
+u6k90SMPFHzBLwl+/gNskP3AHQg/pk9Vz7A08ycvweNVwF4U9+PxA9aoxGqV9Kfkb5S/RPFNxtAX
+pkhkTZ8G7eihl1XodqDP07hY/T7FIyZDvzyEz5M4gBZPDn0rM8efUXwO+BOK7Qi78TgeeBGKt+Gz
+lDw68mXQ5++jZwTtQVe9GfRA/Aqi4SnzteuKuwDcjeIuPH5BwEhYggspcCZQOZ9TsZF1qi+J026G
+AE9HcSvj6MkDPvrCpIUR4BGAR55eFnC2am0j1C3SQ4EDPIq+Psa6NUN0P93Mi/SI2nPj6DtFCi1a
+Cd/vQo88mFpAwm1Hw33HrWHbwn2bTpupoQroW5rxNmUWfXdJj+0+KYnOXTOqYD091Xg1NmMlsvmi
+4HctLz6APM8vi2KQyokVA2iBGK9ePZFCC84nurVp4oiHbm8PEA1HBWjRmUm9pq1omkZm1roRn080
+OSQIXzeziErhc4Y3AJ+a7ak3R4DmlwlTt2idDdEv/7dNONosEUE4h3G0iKrvk/tEM7nLH6G+xWp8
+5neGSKz1Jv8WaxyzmvjkkV70ZJDF9PE5uYZzVb05TlMi/XjkV0XA6v+nQbSO5PGUjzQ7rpVD6ecW
+xjmfISiLcDKm2moyt+Amm3k+HUbQkz7yPIMxvsBWmVW3Mn0BLgwFGD9S2keNLsmulI80c66W4yhy
+J/s4o7yEoHo2TytSQHcidwCjvI4DfJMtMuN7XOkLUIdoH4n9DqsjoNR5eDUemfJDVTyy5YdPhkeB
++1A8SCtyjRyD4jZ2cji70F9oWssWGlHvuk/2KKJ/MHvwKfFMSjxvxkWYc5kRHPMKlx3LYRUnQIdV
+nAAdVnECdFjFCdBhFSdAh1WcAB1WcQJ0WMUJ0GEVJ0CHVZwAHVZxAnRYxQnQYRUnQIdVnAAdVmm5
+pNXTZqtkGOBs4GgU+/C4jzXqZ7aL5Zgac3tCar8sBm6Bqhm5wm0McybvUvMj+/08ZnYR8EpZRAdn
+oHg6ip2081VWq4HJP5gAW6UNuJFq8QEoXsgC/gN4d1PK4pgxM4+A6+UoPG4Cnh57NQ98G+GLFLmZ
+S9TkufGvlHY6eTKKYwko4PMbLlGPNPyMThnxhbJb5gjR0sJ29LrVLAGKZ4YZuhwtyswEeK0spMSD
+aHe2eoyj+B4eN6L4RtkKq19yeLwYxV+geDVwHBM7QweBryF8hrXqrop3+iUHXA+cTQm9OKY6Ja2H
+zoyg2MI6dX7Dc9HV+N8Cr0EYQfi/rFH3NfyMIzFmJsCNci6Kz5b/3oVe1ZVDp4XoIsqMr/GBn6LY
+j/Byqk0NS1DO7GlWvUWLy39OQD/CrejEEP8O/AWj6NVk9da8HgK0UyTgRVykfj7h/X5ZBvw9Wnzx
+XPrb6ORZs11w7ZgaM2sDqnLOU43JSVxEx66DaBF1oavDDjIIp5eXY5bQVaaxW60loiw6B0k3J5Mh
+SqhYzy2zGp2QI4fHt9ko72Et19FPFsVpCG8EVhOl6onzZMb4MPB3kxzBkQAzi4Dr5Xg8fl3+ex+N
+nZAELcQcWnjTdefoIMr6NBWPOdDiX17nPeNBZ8rSRjydL8BB+tRs8vo7psjMOyEb5EvlTkCAXinf
+aoZXpkNiFlRDJLzq015BpYeczxIuVgdSL+MTnJnfCRHOR7itvJflNCfxUBzjN1wvp0oenSXqALra
+NlV3rW0nGmAflVg5HXWZ+ThgnxrlcjmNVVwCfIg2FrOMKPefydBk2oFJi3OESl9iQf8Iav2kTKqx
+LurnqK6s1hWSuL1ic/jcwhX4mfNAXonOEngbyvs45+9rPLRliWTuhGySlSiuRfEaBtERxyfqpZqk
+iV3Uj7km/ZfZPkuU2DyOj+7k1GpH9lZ9RlFpbLgoLEM1Heg2YCTOm+hTf1mnpK3Llu5DIPc9FMcx
+VhREoCOrEPaBOpfVA7fYLmI1Cd6KE6GfjwN/z170l55HizFOB1oExgW9QP2esIfpRevtjZtmvSJ3
+Q9mZqYSufuPtUiNQM1xkEj/qH8VDKH4J3IDwpTnnorl54XIk+0OE49gxmmGoEJoTCizpCFjSPgzB
+c1l98A+WS1pBgpMRlGKHvIdVnEAvL2UM/eV2U9lDHmfqmaACtJCnOiIXP84IlUJtRwu5l2gUUriF
+gC+R5dtcoFo7l+BkSO5sRB3HUFHK4gNti7dvzMMPulneuYWtclorZY1NdjbMZSqgX95Ohl+xmBUc
+QAtwjMb2AUlSq+XWia5+l2JG/vII72atuqpJpUofQfsA7xvT8dw0P0z+54G8x5KOkxnpeRvwOUul
+nEDy8wH71A7gPyqSZHc32D5tFqLvcyzGiK8EnD6vxIcISp1OIRAKoWGNqTkOEN2qHCsJSl1sqZA1
+SWdCaifXAPvLFq06qXXz6USLrtK4ej196k4LpUmPzy96CsJShotR1Ws6aWbQHWC0JHjyPDb3PKfZ
+RaxHOgI8V40gXFXubEDtm15p4hGZJC7AnOkBMlzW5JKkTxHtepT3tQAVlZ5xRozmfeHs5hWuMelN
+yRe0Papp8DfLKdPQRTT2aJoAwoe5UO1vcknSxxMd3+OGhfEOmElWbgSIPLWJpWtImn7BjwJ/Kkc+
+M7bXLMxttfh4onBTE0vQPFTYwDDtv1pjpAV0j7gYgJ4C1xKkuyhJ8ZMKA5RmOabXPuYga/hdk0rQ
+ZLylFAMtMKgvQDBR8OjZ2iskRdqr4n4MRBGorf6GiRKv7qNj3hV9Q/MMFRxJMajd/jPEBSi0Mbz4
+Sc0qXiPSdky/HWi+AOPHiSLg/Or5xvHkiHL1W93+Mxi7LrOdZFqiHZiuAEs8BEQiiDzc0iVeuUS2
+rRNnRc8XFEdSCu9lNrqBWCDqqBAcm3KppkS6crhU5YF9FYJIuyMiRAIUIgH68zgCEhNgozmZeSAf
+GMug6Zpip0Iz4tFjFaJLu+lbHf10hbOdS9TOlI9sh8slC6zCV/pMGwmwSNgT9gXF0c0o3mQ0R4DG
+YhTSj4Dx/Udtwfkb/Q7vOQwhM6UIaDoohQDgyamXbQqkL0AJHStNZEo7AsaHep4IAhQ5AoBiIJSY
+3EmzgL4nLDyZ/sNqzY5sKukPDQc8Vm6XlZpwxPj+Te87YG7kitkkz0dxCoqH8bg7HMxvjHAUgS94
+amqLtQKgUNJDMbmxlwHfmrBNvzwlXDm4DOEm1qifTPdUpkr6uWH6pQ/YwB6i9RhpmqiuIHIVPwIQ
+SoywqKXzxOjF9h9Fr1OOL164F/gGHl9nDfdUjGNeK4dS5P0IfZifnSJa/zIQ7qkLPQ1tIbpGKNdA
+AiI7CIIvA79GuJ+AP+NxKopNwFKikcVPsoN/4DKV+LKzZgjwL4BvsZ9oDcce0pkfmCFaitkGrALg
+HvrUSSkcLRmukiPI8GWE51MABtHzJz10cyL+yMo4nhQpBe3kaKOIvqYBUdXbET5MU6SIng1TRF/z
++JKHLJEos+Fx42lOuoiECz/G4xzWqETDRzOq4MfLPr+GDOkIcK51QDbIa8myGZ+lDKAnkJosET6V
+PslZIKM6yKkOvNh21Y7oZnszAhAQCS8uwEzsWYhWGJr95dCiHcHMqTwN+AUbZA3r1HeSugTNmB7w
+GMCEscDpLk6fCvEOSLQ4qfUE2C+vAC7D51SG0VHMRJ7JrosRWMDU2nxTwQiw1usdYZm0EA+jm2/T
+L3cg/Btr1fdmfej08wOK0M9uxuhkb7gmbRQYTGEVcS+KzvBSLmeUNnx8TuFi9fvEjzUTNstySmwk
+z+vZh17dlw8frXiXOv4NZTCLuBS9FOmhQJavkeHvZjPFbW4nqHTMeVyOaIdVnAAdVnECdFjFCdBh
+FSdAh1WcAB1WcQJ0WMUJ0GEVJ0CHVZwAHVZxAnRYxQnQYRUnQIdV5r5fsOEaOYYSpwLD7OQbaUwf
+dyTP3J+OtUU6KPBJYA3RtNftwMfo5Brn+dbazFyAV0svHn+Bx2vQc5EPEnAD69TNSRawIZvkcAJu
+oJZnsOY+2jiF1WqqadEdTWamdq2HUuIu4NAa7/4C4W2sVQ9OaV96RdhTgKeh8BDupk9tn/Rz6+Ul
+ePwPASvL6ylAJ6NcRLxx0U+fWjelsjiazvQFuFUyHOAO4HmMoKdtmxVWUZfmAIo+dnIDl6nKlQva
+L/j5BJwBnAGcwsTMgY+i2EAbGzhf7ZnweW3Z+g8U8djNxIQ8Jie0yVGteAPr1Ncbnle/5FC8BeHF
+aK/jn7GTra4tmS7TF+A1cgw+f2CMiet7M+gItBATgf6E4kaEhcByhJUoTqRexugSlcmFII/ii8AN
+ePyegGcjvBc4iTH08s5GC3NWYjKl7iLgWVykdtfcbqO8HMWVwNOq3vkdAa/mIvVQg6M4ZsH0BbhJ
+TiLgbnygnvuYENkj1EvFYZYBxh9mqWYWvSa1siqNPjeAXtAzGRngMExk3gO8lz51Xfn99XIUHlcA
+by7v25Q/4pv0qddN4WiOGTB9AV4pi2gPv/4dRB4UNfdOpWVqCS2yIvUTKVazAB1VzTrVgUmOWU03
+sKzilZ8i3IbiGOANQIYx9IJw47rZS9zWYTt9qiWyic5HZtYJ6ZcNQB95dDWc1PrUtOhEp6eIR1Pj
+JDRI7TbkEZjIWaSP9nmb3tcyM7sTsoO/QXEj7cAhVFaz0/GCS5Ii9X8IY+jl8XvReVN2oZsP+6id
+UVQRr4Zz9Ic+HI7EmcVAtAj9fBh4H0X0l1oiskfNEFm0poWPzipQoDI3ygKmdo/HR1fn1WVchLZv
+1fyaPk5wETAdZn8nZIO8A2ETJXLsRH+he2PvmwQ3STOGFl+t4mfQVW6j3AujRGOHK8LnLHroJu5t
+J7yFterLsytsk9my+FjEex0QgPddztv3G9tFqkcyt+J0rpOvUqSbnegeavwGmHGrrEWJqFNiMjhl
+iTx9q3vRJiPUZG6+pvNSTSH8vBndWxhutzgsYyTaXxPwTi5St05ypNZiy5L/RNR7yn8rApR6P+cP
+XGGxVHVJ7l7wBnkuws0UWM4OdBSMD+Ea82lBi8zYR03WgWlD96QFLZ7ptC870eIy2aSGiXrQWbTg
+FqOjpRb6MIqvIHyWPm6dc9Xu5t5/weMy9o177M97dGQU3TlFb3sAvI+3Ypi9AAAgAElEQVTzDnzM
+dhGrSXYywkY5EcVtjNHFY+gGv+2vUNACjKeDM9ExGm7ZjnAlio30qamMMLYeW3qPQvgDoyXh0eHK
+emNxe8DKzlFU8JxWc0xPdj7gWvUrFOfRGbqXWc9AjP4BxMXXTTQ2qMX3aXbwFNaqK+as+AACeSEA
+e0LD6njtcjDvMVLqBO+/7BSuPslPSF2nvoLig/QSefW2CqaHvBjopgCspU9dOi/u93rBqZQCbcVV
+QA8x7SNqBo37AryKTUsPt1bGGqQzI3odHyDLbnpojSgIkX9wJ7rqFS6gT22yW6gEUXIyY37klmki
+v2nzFnxByJBV77BUwpqkNCVfKRT3s5jINtU2JhrrGTI/Zq263mp5kkZYxlgp8oszlE0Kw1Co1FlN
+LdckpGlYfT8eutqzPfHfDIp3AO34KN5puURpsKjsmFlLgIVA8BV4HAvSMg2jdAUIejyvWS6Z9TDN
+AD0WuYl16l57hUmNbopBlIjcELdv1V7BHWxacljTS1eH9AQYxATY3njT1GknmuIlfMVyaZLn+qWL
+EDyKgTT0Ch4P24i5oCVsuiBNARbQt39y2K2CjQ+G/hH4FOeIa9J0UKUVlFRoRFjj/Uq3dFCt4RMH
+aQrwUjUIPEIbkbWADYx7uhbgfVyihutvPEcpZA6hVKP9V34/fM6HA6JKHdOUck2BtGVxf3m1h60o
+aI6v26G3WypFumSClQ0Nq8sumb4QKPCeCBEQQPGbikVLzcYcG7QAFbdZKEX6KG8lRSX41L/1Ga+G
+lRzfpJJNSroCFPSKNlvtQHNHNIexu5qfEVCplfhBY/uzio6IHMuVYrtrCKQvwOHyUWwI0BxTX+qd
+XKgetlCKJiCH4KvJ3dJBtwNFZVnQU70C0ApptwG1P2blUsvmYdp/WoDzr/drELUSP5CGETBAC9T0
+hEWe2YyiTUbacSmKgDZ6wXEBqnksQNRKfDW5A2kByAYSDlS3hACbFwHjz83AdEAE0wacvwIUWUkx
+aFwFQ9gOVOHEBHVyE0o2KWn3gocqjtJMARrxtQGCTwd3N/Ho02erZLhcZvZ9KFbiq8ZVMEQC1ZMW
+TuGqFbUWLWg2y/K67yVIulWwMIzCjgDN/Wfd/ru/ZdO0aUf5i4EXs4p2NsifEX6H4gHgd3g8wDB/
+4l0xS9R+eRpwPopnIHQgGZ8lSg/BDKEXXBmv30VEDupt4YO8hx+00zbyMTbIt1D8mYCHyPAcPN6K
+4hUEPJl+eRjF18jw36xRf07j9NPND9gvRwIPM4xeIxKfIJk2PWjxLQcWsIE+dVGTjjw1+uVFwEcI
+eBEj6EVcZh5fhmjstPyQgIyMEwQdFPEoEGWXMF9hjsrJH4ooG0WJaJa0cUrPxI7lhfsbD8thXNM7
+0JN32/kE43w4vMOVGOlGwAzDZet5aG5HJN4BkRZp/31COunidQgXUOAVDKO7aYXwYfLjmIXxXvyh
+PDKqC0GLw4gqHj+k6nOE7wdUOqzHtzH/N71kM5vGCL8dGKSNTv6Rbi5hvXwe2MJF6udJXJJ0Begz
+BIwjeHjkyCBNEaG+eIoMAVmGKXFHE45an6ullwzvJMM6DrCEQXKMoSgi5aWo1RjhTJXpNm8atRfj
+KxfzmI6coo0FtNHHQt7Bx+WPdPIBLlZfm+aRKw8151P0OuY0Lku+wypOgA6rOAE6rOIE6LCKE6DD
+Kk6ADqs4ATqs4gTosIoToMMqToAOqzgBOqziBOiwihOgwyq2E6clg7YP+zvgKSi+xTq+OucSjD9B
+SWY61mZZToDPoww2Pd3tVXIEWX4KHBl79R4U/8A69f2mlsUxbWYnwI3ydhTvAZ4dvrID+ARZ1nOB
+GkqgfI3pl2XAT/B5GnmiKekaPzTOnlsmM08wZi7AfjkbqPflPoZiDevUd6a8v2vlUIocAxyJ8Afg
+HvpUfTuaLdJDgVsY5bnsJZo9vBC9HkQvhB+jjUNZrQamXA5HU5mZADfLcoo8ACylROQTZxaxLAz/
+r7gej/9mrbprwj42yUp8zsTjTBRnAquqthgHtqL4T9ap31a8c40swee7jHESu5mYkMdDm1Xr9SDn
+s1ZtmdqJibi2Y3OZmQA3yitR6Oi2l8hzLc4iTDZ6gF8C9wFLEJagWAEcW95WES3KyaBXdeVi7+ql
+gZ+mnTsZ4UQ8riLPsxpaxWYAbUhwBevUe+uei46k5wNnAycDQyjuQfg4feqmxhfCMVtmJsAN8iaE
+rwKwG70OtRZtaBusenmYSmg3pTFqR7Fuarumj4fHnWzRzgqgiwE83swaflgR3TbICQh/C7yN2mYS
+AYpXsU7dMslRHLNgpsMw0Yr66tVYAdHywAK6W7IAXS2bbKUKbWh4kPr57AK0mfQQla7pY+j1xVP5
+3RSALnoI+D79bAcZCEuyEGEZo+j1uGPh9hki0euVfK8FnABTZGYC9PgjigLQVpH1KgAOoMWxhGiY
+2yy8NnYJ40zudmkwzuYzSaw7hI6+2qvkSOBI/HBfccfM6vJn0aJXHDqDozqmwczuhKxVt6N4IzBO
+D1F7Lb5oulZ0MwbTUxXfbPHRHaTt4eMhtFP6ARpnaIhsJZwAU2bmt+LWqZuB1+MxxgqiVfbGGamA
+rkJbgXhWANARuN7CbJNHBUCxM81iOWZ7L7hPfRfFa8kxjsmltCC213FMgrZ0CNDtt0F0tTrZPZh4
+p6dWwsw2IJ4TKsMnEiilowHJ3IrbIK9C+DoDtDGAjn4DRFVwN1qYtSjFHiaPjMlLkqvzGfO5ASZG
+snru7EV01Svonnn8p5fDdE1Mp+rXCP/MWvWtBiVocebGmGaSjumvR/gKO8kyjo5+cfddkyrM9Jqr
+HcxrYVzWu6gUTJ7GPeglVIrXR0e+gChrFuG+F2N6578CvoTi23Payuu6nj6UnAO8ABhAcTdZ9UHO
+HWjJ/IjJ5obpl4vxuYrH0V/6AaLs7EDZvDBAC3Q6tKNFVZrCZ+NRUIXlKKIjXBe6+l2CicpfIuDj
+SWV7ssrmJR/FU+9msCCM+UJXVtGVVWQEUH/DeQP9totYTfLJiTbKVkY5i13oL33/ZB9IAUFHtiw6
+yo6jhWeq2FVAG0XgUvrUBgslTJ4tPe9F5MMMFoSdo1ELN+PB4Qt82jJ5CF7C6oMTb4taJPkJqYo1
+dPJnFmPPKVOh24d70eITojboUqCNPPCyeSM+AOSvKCnYPVbZvfIDeGQ4QzFoR3kftVS4uiQvwD51
+EHg3vUTVpm06iNqT+h7OJ+hTP7VZpES5ZvES4JmMFrUVF0Q/wCIQKNg96iGcytU9vfYKOpF0puQr
+HgS0AG34g1Rj7vRq8e0iy4ftFSYFMt5pCMJISX+fpp1cIhoGGy0JBT9Lh/cqS6WsSToCFB4D7HnE
+xWkjyoGs/YL/tSmTZZvLkwAtMqi802TySAMMFgVRZzS1ZJOQjgB1NTxKDvsR0DQBtPjy9HCdzeKk
+gmIhJaXbe1ApQDPVDWC0KMDRzS1cY9JcFfdYOfI0056hmrhfnHAvZ6tCo83nJCKLyn7BUDn0Ff+7
+EAiqYu2MddIU4ONl4dlc/Bl3zFS01BBEgvRQDKOfsWaIYwb7lYKSf7i+S9IapBsBW0+Ac3+wuRai
+VlEMI2Ct+G78QQCKKkf/skOaVbTJSE8aqgUiYNwLQ5uyzM8IqDi0HAHrTXUrV8O+0FE4ohnFmgrp
+SUNaQIDx6AdDrOF3lkqSLsKqchuwngBNNVwIoCRHNaFUUyLNCDhW/n8rCFC4by7MDpk2W6UNxTJK
+YQSsNyUtHgGFZzWjaFMhzQgo5fEnW01e0wPWEfDXlkqRLoM9qxCEktLXu95E27LzkS8IJzWvgI15
+YgiwDVDcZ6kU6ZLx9Hpqfwp+wXn0bbmCel7q5ZoizakcbVV8cQHO1whIcCil8AJPxTEdoOj3sKX3
+qBQLNWXSbANGEdCGAE3P18ywnq8CFIk6IFNyTAfGfUFUS1TDaUZAsRb5ILoFp58fCW8Pzj9UcCh+
+eKEnE2BA6AnsC4G0xKSE9KYK2I6AldVv67b/tkqG/RwPPBMYQniENrZNmlCpX7qAxeQWPpWgJGWL
+1VoI0cQQDyiUBOEsPnfI33Puzkon+c/JAsY4GTiBgF+xlNvTvH2ZngAl1vWwIcDKCNh61W+/LAb6
+gL9DcVjFoqwSsEH2I/wJyQCym4LagVJtdMhTCfyVKI4iQCgN6c8cBqxAMUrAGB4eUp7/mCVamqqA
+jILCQA/INjbKb1E8is5h8WyKnE6JHIL+8R5gmH65loD/x0XqsaQvQ7qTpWxWwS3ZARFhE88h4K0E
+9DHCQkbRy0SL4SNav7wEjyVk/WiFYCZ8Px9ua9zVy7tHyJAhg/7MGDqHjnFBj6dN8YCMWkGGFXhE
+5tSl8D0zm72Tbrp4J11cRL9sAf6HHfwkqUSkaVbBBWAYYUF4Yabz2caYiwhUxFn9ugoXyOfxCMjx
+IILdFWHr5Xh83k2BN5NnEUNocZSIhNeKQ+TmOus5lW20sZZuLqCbg3xKbqGdq1nHT2YzwO8c0x1W
+cVnyHVZxAnRYxQnQYRUnQIdVnAAdVnECdFjFCdBhFSdAh1WcAB1WcQJ0WMUJ0GEVJ0CHVZwAHVZx
+AnRYxQnQYRUnQIdV5pcALxePfmmFrNSOKTL7GdFbJcMwS8jTxkU8biX/ygY5DeE/geejzVk+inAl
+faqek7GjRZidADfJywi4CjgufOUh4Hp8PsbF6sDsizcFNsrbUWxmYj7++4FTnAhbm5kLcLMsp8h2
+IhvqOI+iWM069f2G+1gvx+OxGjgV8BB2oriFLDdygXp80jL0y7uAj1E/+8y76FOfnHQ/DmvMXIAb
+5HKEfwOitLAe1UnJryPg/RPWk+rFz/8CvHfCJzRFYCvCJ1mrJiaV3CptHOAzwBoU2i1zBL20sAPt
+kqSXY36TPvW6aZ3X5eJxCE9B6KBPtchyzvnLzAW4UW5C8RpAG6IYR/MMkfNkJK3fAj9AsR9hKXAW
+sBKgnFKsRLSCv1KStwOfJMt3uEANhVGzH3gBeSIzloqzAg4HMuxgB0dOuoZ1k6xEcS6Ks9AZCoyz
+yFb61DlTuRyOmTEbAX4NxesB7UJenRYiAywjMrCOkwdGw0etjJ7G1LA7/LyuYI0BVy8B2oCwkdtH
+T/iATWT4Ry5Ula51/ZJD+EsU5wOvBrI108l5HMEa9WiDIzlmwWwWpkfSqdUC84Fd6FjSGf5dpLFb
+uSEgEqiH9nnrQMjQW7ZqDRp8HnSVrAW4Bp+3s1FuIgh9Mz3agdejWIYKjzOCXiyeAw6t2NNTASfA
+lJi5ALXlwVlA5WiiolKQRkgzJUBHuul6GxmD6h5A6ERxVrlcKnx/CN10iIu5emQ04DjgB9MttmNq
+zHwgupePAXcCxoNNUwT2oaOJ7aQLB4Ht6EisvZt0pNsJPIbuvFRH0vaqv4V9KZfyCc3sxgGvluPI
+8Eugk53o6jXuEaxztOgqNK17LgE68aIfHms2x4m8hA276eWIeemu1CLMThYXq98D/wDoDofJumQw
+7atGEdG4px9EC3cvOqPTXqKoVa/NGISfOYiuSieLVaY89dqPvcTF9yPgVCe+dEkmOdEG+RLCOQyi
+BTFE7Xaf8eyFqB1Wz9eimjZ0h8ZUkaYnXD3AUikiTSl8DKPFXL1NR/haOyMovoDHFtaq26dYstah
+f8liOjiXgBeBOhY4gLAD5V3P6v3/24o2FckI8CrpJsudwNPZiY52+5i8tztTMmgB14pkGXSVb9LR
+Fqu2E2B5+JxDC6+LARSfosSn+Bs1N9t8n190HEXvRjw5lqGiMFYSch50ZBSdWYXit3j+y3jHYEud
+X3Lp2frlacDPKbKQx9Fjfc25Gzx1BN0rbkPfLdE95HvJ8HouVA9bLdtsuKb3SWS4B8UiHh3OMF6q
+HBhbkFOs6PTJeh9i9YHLLZWyJsl1DfrU7xDOL0cVnV2ztYiLrxfw+DqdvHBOiw8gy+sRFrF3zCuL
+LyCqgUaKwoG8B1zMVrHt4FxBsn3TteqrKK5gEbqtVnk7zi5dRO3IXgAeo4O3c64aafSxOYFC3+8e
+LOrvMw/sQXfkjGHaUNFDWMpo7/NtFLEeyQ+O7OSfgN0sRVd5ixI/wvTxiMYqe8Nnxfvmhfh0RHsR
+oyUhCBu7eXQbWaHHPUE7KRUCAdUS9gyG5AWob/w/QBtRfmHbVXF3WJYOjG/wz1jH9XYLlRCDixYj
+ZBiNtfviA0dmBACg4IPi1GYWbzLSGh7Wtqhmimj13YVmkiH6AZho7HFFKw5JzIg2WQyE0Y1oZlEc
+Y9Waby2nTEhPgL8HojvNNtuBcfEbIfr8xEZRUmIpAMWwx5GvscV4+KxF2kP/kiObUbCpkI4ApSoC
+toIAtWcwwO+5SO22Vp6k8UWLKR9GwFr3bYynSD4Uaa51omA6AiyFEdAIsPoWXTMxZTB3PhQ/tlSS
+tDgy7Fzov+rdOBxHm1Vrs5p5LsDdPATkKyZ72YiCGaKpYUaA3ryqfgGOohj2fqvv+sQxVXPBF1DP
+aUK5pkQ6ArxMBcBO6wKMH99EQo87LJQkPYQjKU7BrtWIs+ADvCD9gk2NNCvGyjvBNqrguAB1BBzn
+UbZZKEl6BBxFKRYB66HQUXDcF4QVbFl8bBNKNylpymKySfPpY6KuWewED4bRef4gHFkW4GT2gePA
+WDhe6HktMR7YPAHWW7mbJiYCRkvWH7BQivTY0tuDsLhcBU82ta2AjoCFQPB5UerlmwLpCtCG6OKY
+CDhfBeiFQzDFQEe/yYbWTTU8XBRE/rIV8uik6Rdst6rziH5e5iylBQU4G8f0zMJn44kgShpe7bhj
+ugDjRUHal5HreQ3w9Yptm+yYnp5da7/8Gp/jeST8e5joxngzyAFLwv8vw0xGeFbLZDuIHNP/ngKH
+lqvPTPjIsh+PPwJ/QoXPeiLZ84CTKXEsAVKOetp02meccUbpRPDKjunGkNpHCzATvubJMKLuLjum
++5xMgRdSIouHHsTPMgyk5piepgDvxedZ1gRoUnSAXmjUjk+eBVyqat2sahKhY7rPXzNOH6N0MUpl
+9WmWtZoInok94ssYVOwzEntAJDAzJzA+HlFrWwm3KRDvsGmy6ClsCyjQxhYSdkxPU4DvxOdo9vAS
+AEZYzFjF5CyJ/Wv8zpnwfi0mbqvt6uN0MkIXIwiwkh8h7KFP/dP0TiIhrpITGecDjPIKRuksu6Ub
+x/RGX0FcMPWWIdTaPi7QRttRY1sTJU21bX4AbQR04dPBEG3cQhtXOcd0x5xmfmVIdcw5nAAdVnEC
+dFjFCdBhFSdAh1WcAB1WcQJ0WMUJ0GEVJ0CHVZwAHVZxAnRYxQnQYRUnQIdVnAAdVnECdFjFCdBh
+FSdAh1WcAB1WcQJ0WMUJ0GGVNBemN5/1cjwZljLOz+wuv3RMlSSNahYDq/BRlHioqQLYJCcRcA1w
+QvjK48BH2cGn510yonnG7AW4WZZT4goUZxNlYR4DfoTiI6xT6WYk3SBvQdhM7Vz8H6ZPvT/V4ztm
+xewF2C9fh9AopRaKL+Pzf7lEPVLz/cvFYxVHo3g6wjOADhTbELaR5666kfRyybKK/wD+oZx0pxA+
+OtB+ccJ+drDcRcHWZXYC3Cino7gV0KkdhtCr/TPovCKdmNX3o8B/0sZ/sVqNs16OIsOZKM4EziDK
+4lLNIPB1hC/Tw3fLSXI2ydEEfBE4hWFggIm58RagTQkDnslF6v6653CltNPGm4DzEJYD32GED/Eu
+NVb3M47EmK0A34jiBkC7kld/ZcaedSE6Kmn/8gJwTMV25eydRLlJOqhO6zsE3IsgKE5mhBwD1M+J
+J8DhQIabaOOvJ2SbukaOwacPOB+dvij+2S+yVr2t0ak7kmF2Atwgb0X4AqCl1aii60CbBXaEfxcI
+M3aGz7WKYdzWO9Ci9NGx9CCTZwOFeFasMRQ3IOwDuhGejOJ08gijaBFnwm2NrYPHGaxRP5jCURyz
+YHbDMIrt5QQ3kyWjHAd2onM1V2dsqscYUVQ1CXemw350ZG2nkyxvJ4sW7gi1ndiH0dV2FxDwQcAJ
+MGVmNxB9kboNuBOY6FJeTywFZmZk3Uh8RbSgxqq2C9AV9160+B8Nn4fqlEERj6yrZlBKxzSZ/Z0Q
+xUcAbRgV39setGF1veo1CYpoZ/b9aFENMrlJtkmJVotO4u6eC2ZfQMdkzF6A69TXEb5Clsq+rKCj
+3UFgN1okw9SPfgG6uhwKPzNEffGayLafiW1Bk8CxGj/crxFs9X5z6OrXoKpS1zpSIZlbcQUuIseL
+6OYQRtHVYUf4bDDCGEE39LvQIihQXzQQ2ay2oX8uZh+NomqeKDG58cwdjX0mGh7SdKE7LPrnuA3Y
+QsCnG51y6yLC5p7TEPUKRPajvN/w8P7vJZXRNGmSvBX3F8C38NE3wkroaDOT9l4SmAyfpVgZzAC1
++dl1otP4dlACvoqafcZPq2zuPR/hX4Gjq97Zjah/5ryBa2wUqxHJZkjdIP0IaxlDjwsW0dWdbXJo
+oZlxxQy6utVDQr8i4I1cpB6yUrak2NzzHDy5kzE/y1ABRkvgCXRkYFEbtGcA+Sir97/PdlHjJCvA
+q6SbLNuB3vLA9BCVVbENllPZ2l2BrnaFWyjyJi5Rw3YKlhBXSjsLe37B7rFncDC8c1kiyvUMsKQD
+lnYA3qtZve87dgo6kWTnA16ihpHQDNAM6HYleoTZ04Yp0zDCuXNefADdvWsZKWrxjaCHnfaiRyJ2
+ozt/+8dhzxigPtkKBjWG5CekKn4GROOCNs2qa2F+GMJ/sUbtslqWxFDnsGtUi8/cjzcEaAEeAA7k
+IV86jrae19ooZS3SFyDYF2G8x6sFuI8OPmanMAmzeeFyRoovJK+00OqRRwt03zigzmhO4SYneQEW
+uBMIyMb2bnPeddwPA8wP41bOVc20zUmRzOsZLXmTDk1BGCFLoJjHArxUDWJMAVuhGpaq/+vWz0+t
+lCUNhDcyUtTjqZOhgHEF4/5xXLv80LSLNhXSWZQkLdQOjJ9hGyYi3mapNMnSLzkKwcsYD6Y+3lpA
+D9Fk/JemWbSpko4AtbleVPW2SgTUP4hRHueXdgqTMO29JzNS6mA6q28KwFiJVmkHphUBB8Nn+0yM
+gPe36m2paROolzJaZFoCDIDhEvjqzLSKNR3SEWAQCrAVVh3HfwQ6Eu+wU5AUUOrljJYmd0qvJg+M
+lQ7n2t4TJt02ZdKSyEGg9SLgfBLgldLOaPFU8kx/upt2TQevwWKyJpHOAInHYNn3FuwKsdUFqJe1
+nobi6cBuhIdQ/JEdPFy3qdAvORZ0vJWBYo4ceg7jOLV7wh66558j+raLwGgRFK8DPlix/QY5AY8X
+ojgWxU8o8L1wZCMV0hGgz2DZcNk2mQn/bw0B6kVR/wi8gxJtFNF3MIxJ9TJ81ssjeDwI/AlhG4pD
+gVNQPIex8Q5yRPO2jUH1WGw/XegJFz6ReXXZCFtB8eBz6ZcHUWxDsY8SL6PIIfhowbbz97RToF82
+o9dYb0/6MqQjQNWCVbCHKY89AV4p7bRzOnABPmczgh5Arj2GlwGOwuOosmG00HhGt8GIbJRJDK4V
+ZDgWj2MrXNvjdNBGN+vo4nw2yucI+BLCrfSp6bY8a5LWPYoDwL1kyNHOkWQIGKWrwqFbP9d2STfV
+t6q5Ta0LJXXfaycIqx9teK94fLonM2s2yGkoLsXnteynvbyIfioE4WM6X7f5zFSoXiAWX/wl6PZi
+HthHjnZW085f085BNsjX8NjEWnXXNEo2AeeY7rBKK7TSHE9gnAAdVnECdFjFCdBhFSdAh1WcAB1W
+cQJ0WMUJ0GEVJ0CHVZwAHVZxAnRYxQnQYRUnQIdVnAAdVnECdFjFCdBhFSdAh1WcAB1WcQJ0WMUJ
+0GEVJ0CHVZwAHVZxAnRYxQnQYRUnQIdVbKYPnz3a7+I9wInA7eTZwKVqOukaHZZJJjXHNbKEEm/H
+4zAUPQh/JOBm1qnfzn7ndfiMLKWNr6B4SezVB4Dz6VN3pnZcR6LMXoAb5RwUm6ntibQduAHhataq
+Bye8u16OwuONwAlog73D0W6Vd4e56b5fM6Ktl+Px+Drw5Io8hBof+CB96vJZnZejKcxOgJtkJQF/
+BLrLrwVE2ZWi3HwKuAXhM5T4PRneCLwZeO4kRxhGcTPwNeBufIbI8nrgCvJ0swedrqwDbZhdaUB1
+Dn1qa8O96yr8bOCdwCqEL7JWtZSZ33xndgLcKG9EcQOg043tR2fqNOTQlqjmUY8Cka1qBi2oRt2j
+YbQVbLzognbEXIyJiGMI/0QPn+ZsVWlisF5W4LEWuASo9MsQ/oa16qoGR3ckyGwF+GYUXwHgMRrn
+sMsCC9Gx0kML1Zhb1/K4aEcL0TwEHV0PoP3Q6rGISud2zTA6b/Ug0AscAkR59Cq7Yr+hTx3f4AiO
+BJldL9jjh/gEKLxJEyiW0OIZIBJTI0xixIOxkvpMnpB7EC3wKBKCln03cFg5je1I+KzQJtbLy9uu
+wtE0ZifAC9V++uWXCCfRQWX1Ww/F9LO6Q6UDJOhqu4DJZVzJAJEQzcNk/qyVVX4E6MG0Ie+dQekc
+M2T244DCN1CcRDeVAjTVm0K365Ia8lboCjVugt2Ort7jCcmnk6Y2jsdlMy+cY7rMfhhmq7RxgFtR
+vIAdhFZQQHVi/yw6wrSFz9ViMTYDpk3WQaXlK+gq+CC125oeuqMjsb/bIMwMHXV0uqjsEAm6zbgQ
+UNzIOvWmKZ13yyMCrZ9/OZmB6H5ZBfwCn1XswCS1blzVZtBCNNVivW06iNp/k2Z9nwK9RMJuQ7f9
+dNV7JyVePucd1K/ruRBkNYqTgX0o9Ss87zOcd+DmVhRkcknKN8gLEG6jiLAD3a5Kzd5khnShIx3o
+3nIvIPwZuJxePj9huGausaXniyB/BUCgwIuP0KurWD3wN3YKVp9ks+T3y33AM9mNjla1qmIbCFp4
+neiotwxTPb8P4eNJeV5YZXPv+QjXsn8cBgpQCiDnwYIcLMjqZ1Am+HMAAAkBSURBVOFDnHfgX20X
+NU7Ss2G0EbSp4jqJIo4tMuhIZ9qHyzGumR9nnfrovBDfpu6VCB9jxwjsHdfi84FCAAN5eGwE9o6B
+4l/Y3Psu28WNk6wAFT8BKjsP1R2JZhMNr+jxvuh23bU2ipMK2ewnGSz0MlTUNc8eYG/4PICuifbn
+Yd84CFewZfGxNosbJ1kB+mEEjN+TtTnhS6qOH40XPsha9ZumlycNtix5JiX1FvaM6Xb3EFFHzXTw
+BglvX47DwYIH8m5LpZ1AsgK8RD0CbCdH5QwVWyLMVf0dReMbmluQVHk/e8eFvNICrMcIkQgVq9m8
+cHmDrZtGGjOi7wFaIwrGjytEApR5IsDPLnoqRf9sBgs6yk3WnxwBRgMYLHZA9m+bUMJJSUOAE50y
+M7U3TJ1c1f91mfbN1mCvZfCzH2TfuEeeqZsZjgD7x0F4J59dtDTF0k2J5AUoLTHwoolHQBP91Dy5
+17t5ycUUS+cwVNBV61QpoKPgwUIPfubf0ireVEm+clThZKl4BLThG1zdAYmq3/sslKY+n5BOOnkO
+Hscg7Aa2M8w23qXG6n7ms0tfgPI/ya6R6NZlbW91TSbcJn5Hae8YLMxdzJbFn2b1wT/oDUXo5ziE
+UwkokOEW1qhdyZxobdJonU0UoA2qq/0oAraGAK+SI8jyLhawloBuxoiq0SyKT8leMmwjx28R/oDi
+YeApCM8nkDMoqjYWo+/orAw/l0ffU1fob3YB+lamcUuPO6aLgrHBEm3e9fTLz/HposBrKbIMhb5e
+HSg2yE/x+A/Wqv9N4zKkJ0DbVJ+ZaQ+KxSq4X3IEvBCPC8jyV4yRK8/sMRMm9JxHQbEcYTkep5Sj
+Vw4tpryqNJo262Kqp5/tpXJWksTe0yLsRPnPw+d5FIlqjTbMYL2wgBfTzXfYKD8HribLTZyv9iR1
+SZIXoLAPxUEydJIlS4CEF0VmNA9wpuRiXutZFBmGAJ820lupV49N8mIUayjwZsZZwDj6Z2o6D0Vq
+zwq3QQH9gzCjBiPoicRtPI9OnkMHBT4td5HjOny2znbyhnNMd1jFZUZwWMUJ0GEVJ0CHVZwAHVZx
+AnRYxQnQYRUnQIdVnAAdVnECdFjFCdBhFSdAh1WcAB1WcQJ0WMUJ0GEVJ0CHVZwAHVZxAnRYxQnQ
+YRUnQIdVnAAdVnECdFjFCdBhFSdAh1WcAB1WcQJ0WMUJ0GEVJ0CHVZwAHVZxAnRYxQnQYRWbLh7J
+sFFeDRyN4j76uK0VDfkc9Uk2P6C2br0IeA7wTOCpwHaEH1Piv7hYbav72S3SQYEXAKej6EF4GMV9
+LOHWmiaCW6SHAtcAcXvVbcB6YDN9am9yJ+ZIi+QEuElWovgqihfW2SIAvo3iKnbyHVbRgXAqcDoB
+pyOcQm1jrx0IX0T4Ao/xSy5TARvllSiuAQ4r77myMZEHvoziatapOxqW2WOUC1RrpBV+ApKUX/CR
+aKPCIwCdj3gQne61GP5tjKI7ANiFtomu9DIqoJNsl4hyFXdUbDGIFtdyxtCpY01i78XhY2Jy9F8h
+/ADFToQ9KI4Anhs+DgVAuIUSb+FidWBmF8AxU5JqA74HI74SsBstpjgHw0cOWMhKFoTbjoePPLXN
+qE22904gyyJAG/BVZyYeQOdd7gm3jyLiiShOBPQPoYTOx5yLbaM4kwxfA06f+ik7kiCpCHg78AJ8
+4HEmJtw2h5iqdYPJ6D5ThMgZU8L9mehqyuah7Q3aKz75YvrUT2dxZMc0SSoCjgI6o7r5gsfDv+MG
+KsZqoB1jA6DFYSwKTMZ4hfb5aENHvmrTwQDKvho+UZQ0Z6OY3D0oQEfqw4nEruie/FQdSZKMAIUv
+oDijwrfiYI3tSuFjjMirop49gR9uN0bk9JMhEmn1fsfRwu6m8qxU7DNZKiOeH36uE4AfsZPvNj5R
+R9IkUwVvlQwDfIMRXsNudHTZy+TujWlRHV3j5VhG5KLkofvRGQaAE+hT25tZTEdSd0LOVj4dnEMn
+j9Ee7rUnkT3PjAK6U1Ng4o8g3tFZCmQoorjQic8OyQ5E98sGfPrKHZFhGpsoN5ssevBH0FX1Mnbg
+8SbWqJ/ZLViCfG7Jkf+/vbMHjSKKovB35+2y2V3Jz0YiamPjX5kqAW0lErRTsVALCagoomAlaAhq
+YWURxbgR3cQuVhZWtgEbG9MIFhJNSIzJJtEk+7/zLN7Mboy7GJMZJ4UHhhmGYebyOLx575wLhzLH
+wD4O0gqMIYxhqTecnfsQdHlr4TUBTwIjpDGSSAGj1W0VuMpjM9DMFDaHuKjHgy3KQ6QSNymW77FS
+hGVnodygIKIgHi4iVi9fFu7Tq2sJXoHAWwI+klbCfCODVVkLehZrt0k0YUTtBCZhUnOLC/pusEV5
+iKGW26RzfczlzN8n79wP44j6FuyMQ1SNUg51c352S7g/3nbDXNZp4H3FvXCTG4NGBEM+BY6UbaNI
+BViRt3ieOMNCvo+ZHKQxG8Al55jHTAKLNkwswWLhMFJ6GGS5q+EHPSaxqGp3a3N7g0DMObsqn/CW
+Hj0ZVDme4sX2g2QLg0xnzXKnVnC1q4umgZkM5MvnSCVO/9M668APAuaA4AOrXVhUWxzcmVkzEVA1
+tfFMdjEge3gptZox6mO4cR+F0mumsw0s8ufI1yLGTf+6AtoeZLil/bdn+qWRp9JJUpr+qpYNwo9+
+QLP62CoEVDWuNb7G0K8Lj2U/iivAKaDNcWY0AzKL8AlhHJzDXOcwvnY70A7sRiSBrYUdmNl9BTP6
+FmbZEXPOIX4V/m0bMj+2EQmNklRJsD8CByhyFGEvJQSLMkl5hyZFhiGu66wfw+AHAXM+vHPjWD3H
+VwXoYAj4QKLE6QIuIRxhGSGDcXtMArqgaQPasOisWJfu2RXW3aBre9UG0qLaQeQ+u0T1t2xTJaEC
+QhpCxRiKa+Sp+uSq8h5FlA7idBDnDkl5gsUIPXrMyyHxg4DfMT18jQhRBAtFNSoeajsk9Tbjm72v
+Kt/VKMcE1EzVK95zpKSBPN1oTgBdzBNnmRA5oIimhKw7Md11d/yGYMbNkF8TJkGMG8S5Sr98JsII
+Fq+8IOP/xPT/CBQ/AbqdEIgXnY9lAAAAAElFTkSuQmCC
+"
+     height="500"
+     width="160" />
+  <g
+     id="g4166"
+     transform="translate(200,0)">
+    <g
+       transform="matrix(1.0075215,0,0,1,-1.023657,-1.2477538)"
+       id="g3074">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 21.295625,500.21348 c -0.0024,-4.20042 0.05945,-6.39271 -1.292793,-9.4943 -4.619609,-4.06863 -0.306832,-8.84104 4.451392,-8.46278 3.425134,0.32851 1.953043,1.17025 5.998446,2.16699 7.918352,-2.18995 7.247275,-2.51622 12.843321,-0.3418 4.266851,1.65795 4.02667,-3.50847 7.996265,-2.04615 6.110478,2.25098 6.450795,4.01932 13.020656,2.05375 2.038667,-0.52552 4.17023,2.6697 3.509292,3.87722 -3.195314,5.8378 -4.00775,2.08432 -5.521203,7.69564 l -0.393921,4.55143 C 48.519597,500.28218 35.591328,500.26483 24.67274,500 z"
+         id="path3834-5-8-2-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccsscscccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 23.108743,500.21348 c -0.0021,-3.7632 0.137332,-5.53604 -1.0723,-8.31479 -4.13241,-3.64513 -0.274473,-7.92079 3.981934,-7.5819 3.063909,0.29432 1.747069,1.04844 5.365831,1.94143 7.083257,-1.962 6.482954,-2.25431 11.488824,-0.30622 3.816855,1.48538 3.384797,-2.18208 7.152953,-1.83317 5.051582,2.9051 5.770474,3.60095 11.647457,1.83998 1.823662,-0.47082 3.730424,2.39181 3.139191,3.47364 -2.858327,5.23016 -3.58508,1.86737 -4.93892,6.89462 l -0.352844,3.88641 c -12.449398,0.0615 -23.362267,0 -33.307021,0 z"
+         id="path3834-5-8-2-3-1"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccsccscccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.032047,500.21348 c -0.0019,-3.23853 0.401689,-6.10129 -0.665331,-8.49264 -3.645212,-3.13694 -1.17843,-4.85022 2.576159,-4.55858 2.702683,0.25329 1.915622,0.52774 5.107744,1.29623 6.248163,-1.68846 5.718633,-1.75276 10.134327,-0.0763 3.366859,1.27829 4.202951,-1.31607 7.526853,-1.0158 4.456016,2.50008 4.153836,2.91165 9.337941,1.39619 1.608657,-0.40518 2.260669,1.49656 1.73914,2.42757 -2.521338,4.50098 -2.13246,1.13886 -3.326687,5.46522 l -0.310832,3.55811 C 46.169708,500.26641 36.543022,500 27.770723,500 z"
+         id="path3834-5-8-2-3-1-9"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccsccscccc" />
+    </g>
+    <g
+       transform="translate(-0.513536,-1.0658767)"
+       id="g3813">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 21.154648,450 c -0.0024,-5.51241 -0.312727,-8.10931 -1.654892,-12.17967 -4.102964,-3.35623 -5.690835,-10.9599 1.908999,-10.36885 3.399605,0.43111 3.23956,1.29002 7.25481,2.59809 7.859331,-2.87398 7.56499,-2.07339 13.769863,-0.20281 4.429834,1.33546 4.94936,-4.9435 8.773066,-3.17677 6.135729,2.835 1.540823,4.81329 9.221262,4.59312 1.633702,0.37579 0.659177,-0.34625 5.932755,-2.14364 2.023472,-0.68967 3.674477,2.64344 3.018466,4.22813 -3.171498,7.66122 -6.115356,1.13794 -7.896329,10.9595 L 60.441126,450 c -13.81341,0.0901 -25.271923,0 -36.30627,0 z"
+         id="path3834-5-8-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccsscsscccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 22.816018,449.91831 c -0.0022,-4.90122 0.09195,-8.43936 -1.120826,-12.05843 -3.707421,-2.98411 -5.516741,-8.43391 1.350437,-7.90839 3.071869,0.38331 2.927253,1.147 6.555416,2.31003 7.101659,-2.55533 6.835694,-1.84351 12.442391,-0.18032 4.00278,1.18739 4.472221,-4.3954 7.927306,-2.82455 5.544219,2.52068 1.392281,4.27962 8.332294,4.08387 1.476207,0.33412 1.344684,0.1603 6.109867,-1.43781 1.828401,-0.6132 3.133133,2.28955 1.97842,3.29118 -6.108369,5.29858 -5.633793,0.96139 -7.135091,9.7444 L 58.315117,450 c -12.48174,0.0801 -22.835605,0 -32.806194,0 z"
+         id="path3834-5-8-2-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccsscsscccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 26.079362,449.96479 c -0.0018,-4.22456 0.0747,-7.33498 -0.910498,-10.4544 -3.011708,-2.57213 -5.408408,-5.1509 0.170115,-4.69793 2.495419,0.33039 4.231756,0.72382 7.179078,1.72628 5.769003,-2.20255 4.228793,-1.32417 8.783371,0.10941 3.25164,1.02345 4.824727,-4.31824 7.631451,-2.96426 4.503823,2.17268 0.336521,2.0998 5.974211,1.93108 1.19919,0.28799 1.092347,0.98085 4.963324,-0.39662 1.485293,-0.52854 1.61828,1.13077 0.680254,1.99411 -4.962107,4.56706 -3.64968,0.82866 -4.869254,8.3991 l -0.76451,4.42365 c -10.139488,0.069 -18.550407,0 -26.649972,0 z"
+         id="path3834-5-8-2-7-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccsscsscccc" />
+    </g>
+    <g
+       transform="translate(-0.513536,-1.1729936)"
+       id="g3808">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 22.457296,400 c -0.0023,-6.71319 -0.57052,-9.3962 -1.882478,-14.35322 -2.960564,-3.69012 -4.35086,-6.7694 -4.436949,-7.24019 -0.861248,-4.70991 2.567173,-5.82442 5.282446,-5.39544 3.323094,0.52502 3.056954,1.87399 6.981838,3.467 8.337872,-2.35976 8.602537,-2.50549 14.667764,-0.22743 4.330137,1.62637 6.132538,-4.96688 10.219452,-4.34445 1.462132,0.22269 3.206609,1.54244 3.221552,2.96606 0.02248,2.14219 1.562374,2.42261 2.74387,2.76119 1.596935,0.45765 2.658803,-0.0409 7.813695,-2.2298 1.977932,-0.8399 4.021633,1.83342 4.268031,3.16192 1.588116,8.56263 -8.014904,-0.1857 -10.020626,14.83925 l -0.643555,6.74109 c -13.502527,0.10972 -24.515894,-0.15024 -35.301904,-0.15024 z"
+         id="path3834-5-8"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccsscsssssscccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 24.399686,400 c -0.0021,-6.2708 -0.42776,-9.91708 -1.626743,-14.54744 -2.705625,-3.44694 -4.069833,-5.48061 -4.148509,-5.92037 -0.787084,-4.39953 1.409793,-4.22339 3.89125,-3.82268 3.036937,0.49042 3.07461,1.28234 6.661516,2.77037 7.619887,-2.20425 6.831811,-2.62127 12.374753,-0.49333 3.957263,1.51919 8.038882,-4.07778 11.773865,-3.49637 1.336227,0.20802 2.368693,1.06627 2.382349,2.39607 0.02054,2.00102 1.240573,1.60754 2.320329,1.92381 1.45942,0.42749 2.429849,0.80449 7.140846,-1.24017 1.80761,-0.78455 4.606311,1.06563 3.900505,2.11087 -5.25011,7.77498 -7.444265,-0.17745 -9.157735,13.86135 L 59.323973,400 c -12.339804,0.10249 -22.404794,-0.30133 -32.262005,-0.30133 z"
+         id="path3834-5-8-1"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccsscsssssscccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 26.272365,400 c -0.0018,-5.61973 0.09585,-9.60293 -0.947694,-13.75255 -2.354867,-3.08906 -2.576529,-3.62622 -2.645006,-4.02032 -0.685046,-3.94275 0.455255,-1.61805 2.615016,-1.25894 2.643228,0.4395 2.940849,0.75195 6.062748,2.08548 6.632045,-1.97539 6.343382,-2.21669 11.167737,-0.30969 3.444244,1.36147 5.9374,-3.6544 9.18818,-3.13335 1.162999,0.18642 2.061616,0.95555 2.073503,2.14729 0.01788,1.79326 1.079744,1.44064 2.01952,1.72407 1.270221,0.38311 1.187938,-0.7356 5.288201,-2.56798 1.573271,-0.70309 1.99149,1.34933 1.011368,1.89171 -6.964609,3.85408 -3.441814,-0.96415 -4.924976,11.6277 l -0.511892,5.68026 c -10.740074,0.0919 -19.500239,-0.16294 -28.079562,-0.16294 z"
+         id="path3834-5-8-1-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccsscsssssscccc" />
+    </g>
+    <g
+       transform="matrix(1.0111723,0,0,0.9658163,-1.324153,10.603623)"
+       id="g3803">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 23.24255,349.89256 c -0.0023,-7.81704 0.226574,-10.01106 -1.100628,-15.78317 -2.994963,-4.29688 -6.451043,-8.24582 -6.631764,-9.35582 -0.892364,-5.48096 1.659324,-7.0905 4.406147,-6.59098 3.361706,0.61134 3.654161,3.22353 8.000639,3.78366 3.081936,0.39717 3.502609,-1.98322 6.179807,-2.39619 2.907489,-0.4485 4.671951,0.9697 8.658385,2.69315 4.380452,1.8938 6.203793,-5.78358 10.338195,-5.0588 1.47912,0.2593 3.243867,1.79606 3.258984,3.45376 0.02274,2.49444 1.580528,2.82096 2.775751,3.21522 1.61549,0.5329 3.493419,0.33788 8.708206,-2.21098 2.000914,-0.978 4.296551,-0.74386 4.719484,0.75226 3.080062,10.89571 -9.715476,1.55693 -11.744503,19.05242 l -1.320801,8.5089 c -13.659417,0.12776 -25.336566,-0.0633 -36.247902,-0.0634 z"
+         id="path3834-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccsssssssssscccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 24.955277,349.94528 c -0.0021,-7.34396 0.204653,-10.15425 -0.994149,-15.57704 -2.705216,-4.03684 -5.536984,-8.36823 -5.615647,-8.88326 -0.786966,-5.15245 0.749738,-4.50786 3.23082,-4.03857 3.036478,0.57434 3.206212,3.78095 6.945722,2.39711 6.430014,-2.3795 8.515993,-2.36639 14.058095,0.12571 3.956664,1.77919 6.352662,-4.21635 10.087081,-3.53543 1.336023,0.2436 2.649145,1.2192 2.6628,2.77658 0.02054,2.34348 2.457569,2.46298 3.537159,2.83338 1.459201,0.50065 1.750973,0.78559 6.461256,-1.60902 1.807337,-0.91881 4.289218,-1.77483 4.169266,-0.32321 -0.759777,9.19459 -8.996486,1.39772 -10.608282,17.89939 l -1.193021,7.99395 c -12.337937,0.12003 -22.885382,-0.0595 -32.7411,-0.0596 z"
+         id="path3834-5-61"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccssssssssscccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 27.506919,349.94449 c -0.0019,-6.85654 0.180311,-9.21547 -0.875905,-14.27835 -2.383454,-3.76891 -4.6148,-6.88591 -4.684107,-7.36675 -0.693363,-4.81048 -0.393878,-2.48727 1.792102,-2.04913 2.675316,0.53622 4.933748,4.05967 8.228477,2.76767 5.665224,-2.22157 8.293925,-1.67967 13.176845,0.64703 3.486055,1.6611 2.82916,-3.27444 6.119405,-2.63871 1.177115,0.22743 1.806832,1.00587 1.818863,2.45989 0.0181,2.18794 4.274148,-0.34881 5.225332,-0.003 1.285642,0.46742 3.395241,-2.8654 3.734497,-0.79849 0.490935,2.991 -4.621322,2.35365 -5.823787,13.8522 l -1.051123,7.46338 c -10.870453,0.11206 -18.977128,-0.0555 -27.660599,-0.0556 z"
+         id="path3834-5-61-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccsssssssscccc" />
+    </g>
+    <g
+       transform="matrix(1,0,0,0.97330928,-0.513536,0.33453616)"
+       id="g3255">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 99.273179,49.438245 c 0.634112,-5.388716 -0.662666,-7.418003 -1.217212,-10.674016 0.74095,-3.074463 4.631243,-3.516086 7.807973,-1.803224 4.49421,2.406283 7.56946,-0.148748 10.68758,-0.484549 0.72804,-0.07841 2.25851,-0.01366 3.13337,0.05071 1.93065,0.367669 1.1283,1.524021 3.18348,1.488012 l 3.18348,0 c 0.48272,-1.465119 2.54827,-1.774053 3.41756,-1.776942 2.7853,0.809822 2.83684,2.368791 5.47745,2.71322 3.90076,0.508795 4.04819,-0.979297 6.83512,-1.779003 1.99573,0.276444 3.07673,1.044146 3.55801,2.15353 l -0.46816,2.621688 C 143.79285,45.903276 141.87561,44.807147 141.87561,50 l -21.5353,0 -21.067131,0 0,-0.561791 z"
+         id="path4116"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsccccccccccccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 100.3224,49.335893 c 0.59515,-4.702226 -0.621928,-6.472994 -1.142389,-9.314211 0.695407,-2.682794 4.346569,-3.068157 7.328019,-1.573504 4.21796,2.099737 7.10419,-0.129798 10.03065,-0.42282 0.68327,-0.06842 2.11967,-0.01192 2.94075,0.04425 1.81198,0.320829 1.05894,1.329869 2.98781,1.298448 l 2.9878,0 c 0.45303,-1.278471 2.39162,-1.54805 3.20748,-1.55057 2.61409,0.706655 2.66246,2.067021 5.14075,2.367571 3.66098,0.443979 3.79936,-0.85454 6.41498,-1.552368 1.87305,0.241227 2.88761,0.911128 3.33931,1.879183 l -0.43939,2.287701 c -1.01266,3.451684 -2.81205,2.495196 -2.81205,7.02651 l -20.21156,0 -19.77216,0 0,-0.490222 z"
+         id="path4116-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsccccccccccccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 101.8255,49.495699 c 0.54492,-3.983082 -0.56944,-5.483035 -1.04598,-7.889724 0.63671,-2.272496 3.97974,-2.598923 6.70957,-1.332857 3.86198,1.778609 6.50462,-0.109948 9.1841,-0.358156 0.62561,-0.05795 1.94078,-0.0101 2.69257,0.03748 1.65905,0.271763 0.96957,1.126483 2.73565,1.099868 l 2.73565,0 c 0.41479,-1.082946 2.18977,-1.311297 2.93677,-1.313431 2.39348,0.598582 2.43777,1.750897 4.7069,2.005483 3.35201,0.376077 3.47872,-0.723851 5.87358,-1.314955 1.71498,0.204335 2.64391,0.771784 3.0575,1.591787 l -0.40232,1.937828 c -0.92719,2.923793 -2.57472,2.113588 -2.57472,5.951897 l -18.50579,0 -18.10348,0 0,-0.415249 z"
+         id="path4116-0-1"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsccccccccccccc" />
+    </g>
+    <g
+       transform="matrix(1,0,0,0.96980155,-0.513536,2.0198451)"
+       id="g3499">
+      <g
+         id="g3296">
+        <path
+           sodipodi:nodetypes="ccccc"
+           inkscape:connector-curvature="0"
+           id="path3028"
+           d="m 112.71253,91.780824 c 0.2152,-4.12484 2.27805,-10.276226 6.67173,-10.383607 3.87594,-0.04782 5.46358,3.337354 8.23078,9.480685 l 1.67517,0.0025 c -14.90487,1.803846 -9.68179,1.257979 -16.57768,0.900392 z"
+           style="fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           inkscape:connector-curvature="0"
+           id="path3028-1"
+           d="m 113.065,93.410276 c 0.20661,-4.12484 2.18707,-10.276226 6.40528,-10.383607 3.72114,-0.04782 5.24537,3.337354 7.90206,9.480685 l 1.60826,0.0025 c -14.3096,1.803846 -9.29512,1.257979 -15.9156,0.900392 z"
+           style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           inkscape:connector-curvature="0"
+           id="path3028-1-4"
+           d="m 114.05811,94.204767 c 0.18598,-3.861846 1.96872,-9.621028 5.76579,-9.721563 3.34963,-0.04477 4.72168,3.124569 7.11313,8.87621 l 1.4477,0.0023 c -12.88096,1.688835 -8.36712,1.177772 -14.32662,0.842984 z"
+           style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      </g>
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 97.696675,99.399413 c 0.634112,-3.964885 0.835442,-5.832511 0.280896,-8.228205 0.74095,-2.262114 3.133139,-2.212522 6.309869,-0.952241 2.9961,1.395957 7.56946,-0.109445 10.68758,-0.356519 0.72804,-0.05769 2.25851,-0.01005 3.13337,0.03731 1.93065,0.270522 1.1283,1.121337 3.18348,1.094843 l 3.18348,0 c 0.48272,-1.077999 3.20369,-0.930778 4.07298,-0.932903 2.7853,0.595847 2.18141,1.368371 4.82203,1.621793 3.90076,0.374359 4.04818,-0.720543 6.83511,-1.308946 1.99574,0.2034 3.07673,0.768256 3.55802,1.584514 l -0.46816,1.928973 c -1.07898,2.910437 -0.2809,2.291195 -0.2809,6.111968 l -24.25062,-0.187263 -21.067135,0 0,-0.413352 z"
+         id="path4116-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsccccccccccccc" />
+      <path
+         style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 98.717675,99.489039 c 0.599481,-3.3732 0.789815,-4.962118 0.265555,-7.0003 0.700484,-1.924536 2.96203,-1.882345 5.96526,-0.810137 2.83247,1.187637 7.15606,-0.09311 10.10389,-0.303315 0.68828,-0.04908 2.13517,-0.0086 2.96225,0.03174 1.82521,0.230152 1.06668,0.953999 3.00961,0.931458 l 3.00962,0 c 0.45636,-0.917127 3.02873,-0.791877 3.85054,-0.793684 2.63318,0.506928 2.06227,1.164167 4.55868,1.37977 3.68772,0.318494 3.82709,-0.613016 6.46182,-1.113609 1.88674,0.173046 2.9087,0.653607 3.3637,1.348054 l -0.44259,1.64111 c -1.02005,2.476109 -0.26556,1.949277 -0.26556,5.199872 l -22.9262,-0.159317 -19.916575,0 0,-0.351668 z"
+         id="path4116-2-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsccccccccccccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 99.710789,99.586135 c 0.563031,-2.732209 0.741781,-4.019193 0.2494,-5.67007 0.657901,-1.558827 2.781911,-1.524654 5.602521,-0.656191 2.66023,0.961956 6.7209,-0.07542 9.48948,-0.245678 0.64642,-0.03975 2.00533,-0.0069 2.78211,0.02571 1.71422,0.186417 1.00182,0.772715 2.8266,0.754458 l 2.82661,0 c 0.42861,-0.742851 2.84455,-0.641401 3.61639,-0.642865 2.47306,0.410599 1.93686,0.942947 4.28147,1.11758 3.46347,0.257972 3.59437,-0.496527 6.06888,-0.901996 1.77201,0.140163 2.73182,0.529406 3.15915,1.091891 l -0.41567,1.329258 c -0.95802,2.005587 -0.24941,1.578867 -0.24941,4.211768 l -21.53207,-0.129043 -18.705461,0 0,-0.284842 z"
+         id="path4116-2-5-8"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccsccccccccccccc" />
+    </g>
+    <g
+       transform="matrix(1.0184293,0,0,1,-2.2495165,-0.99999959)"
+       id="g3373">
+      <g
+         id="g3209"
+         transform="translate(-0.56179,0.749054)">
+        <path
+           sodipodi:nodetypes="sscccsssssssscccscsccccs"
+           inkscape:connector-curvature="0"
+           id="path3028-8"
+           d="m 104.533,146.88074 c 0,-0.31712 1.00858,-0.37553 0.54682,-0.37553 l 0.54681,0 0,0.0451 0,-2.62875 0.54682,0 c 0.43039,0 2.88284,1.27337 2.88284,1.0384 0,-0.26797 0.12313,-0.30733 1.20298,-0.38455 1.0866,-0.0777 1.203,-0.11542 1.203,-0.38995 0,-0.29648 0.0429,-0.30394 1.7498,-0.30394 1.6981,0 1.74981,0.009 1.74981,0.29852 0,0.26797 0.12314,0.30733 1.203,0.38454 1.0866,0.0777 1.65046,0.4889 1.20298,0.38996 l -2.33602,-1.03298 6.38245,-1.33693 -7.82855,-0.11794 c 0.0831,-1.01688 0.88043,-3.95119 1.03928,-7.29679 0.1936,-4.07735 2.90157,-8.56077 5.02178,-8.59385 2.24541,-0.0177 4.00409,1.28525 5.37484,5.8126 0.6849,2.26207 0.97487,8.30985 1.77585,9.44491 2.72663,6.41758 -0.23192,5.39291 -9.48672,5.42275 l -12.77777,0 0,-0.37554 z"
+           style="opacity:0.98279993;fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="sscccsssssssscccscscccccs"
+           inkscape:connector-curvature="0"
+           id="path3028-4-0"
+           d="m 106.82686,147.28051 c 0,-0.30135 0.85371,-0.35687 0.46285,-0.35687 l 0.46285,0 0,0.0429 0,-2.49804 0.46285,0 c 0.3643,0 2.44015,1.21005 2.44015,0.98677 0,-0.25465 0.10423,-0.29205 1.01826,-0.36543 0.91974,-0.0738 1.01826,-0.10968 1.01826,-0.37057 0,-0.28172 0.0363,-0.28882 1.48111,-0.28882 1.43735,0 1.48112,0.008 1.48112,0.28368 0,0.25464 0.10422,0.29204 1.01826,0.36542 0.91975,0.0738 1.39701,0.46458 1.01826,0.37057 l -1.9773,-0.98162 5.40237,-1.27045 -6.40226,-0.23791 c 0.0866,-1.19006 1.80554,-12.02253 2.765,-13.15487 0.79303,-0.93592 0.6791,-1.72963 2.14117,-1.75523 1.60535,-0.0142 2.06678,-0.0163 3.06015,1.05378 0.77031,0.82981 2.10372,11.96652 2.99251,13.3805 l 1.23186,0.001 c -1.32448,4.49451 6.65979,5.12444 -9.26182,5.15177 l -10.81565,0 0,-0.35686 z"
+           style="opacity:0.98279993;fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="sscccssssssssccccccccccs"
+           inkscape:connector-curvature="0"
+           id="path3028-4-7-4"
+           d="m 109.77781,147.40471 c 0,-0.28427 0.67988,-0.33663 0.36861,-0.33663 l 0.3686,0 0,0.0404 0,-2.35643 0.36861,0 c 0.29013,0 1.9433,1.14146 1.9433,0.93083 0,-0.24021 0.083,-0.27549 0.81093,-0.34471 0.73247,-0.0696 0.81093,-0.10347 0.81093,-0.34956 0,-0.26576 0.029,-0.27245 1.17954,-0.27245 1.14468,0 1.17954,0.008 1.17954,0.2676 0,0.2402 0.083,0.27549 0.81093,0.3447 0.73247,0.0697 1.11256,0.43825 0.81093,0.34956 l -1.5747,-0.92597 4.30238,-1.19843 -5.09867,-0.22442 c 0.069,-1.12259 2.17975,-11.42719 2.94384,-12.49534 0.764,-1.00252 1.60538,-0.50307 2.37047,0.35574 0.61347,0.78277 2.70533,10.35693 3.41314,11.69076 l 0.98104,0.001 c -1.0548,4.23972 5.30377,4.83393 -7.37599,4.85972 l -8.61343,0 0,-0.33663 z"
+           style="opacity:0.98279993;fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      </g>
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 94.196751,149.67888 c 0.826217,-1.66292 2.939123,-2.00809 3.705354,-3.12014 0.612398,-0.88878 0.341288,-2.91439 0.743913,-3.60387 0.977471,-1.67389 2.260062,-1.42967 3.195842,-1.15048 5.5649,3.34485 9.42162,2.01923 10.92453,0.47234 0.54613,-0.56211 2.4273,-0.008 3.36754,0.0289 5.79781,4.02971 5.05722,0.34065 11.22017,0.12569 2.99346,0.46247 2.34444,1.06206 5.1824,1.25876 4.19228,0.29056 1.82267,-1.02741 4.81788,-1.4841 2.14488,0.15787 3.58757,0.68992 4.10482,1.32345 0.55,4.79259 3.9914,4.59914 3.49456,6.3507 -10.44581,0.13291 -28.11543,0.11949 -28.11543,0.11949 l -22.641579,0 0,-0.32083 z"
+         id="path4116-2-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscscccccccccc" />
+      <path
+         style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 95.224556,149.73982 c 0.791204,-1.34764 2.814573,-1.62737 3.548332,-2.52857 0.586452,-0.72027 0.326831,-2.36184 0.712387,-2.92059 0.936045,-1.35653 2.164295,-1.15861 3.060425,-0.93235 5.32907,2.71067 9.02236,1.63639 10.46158,0.38279 0.52299,-0.45554 2.32444,-0.007 3.22484,0.0234 5.55211,3.26568 4.8429,0.27606 10.74469,0.10186 2.86661,0.37478 2.24509,0.86069 4.96278,1.02009 4.01463,0.23548 1.74544,-0.83261 4.61372,-1.20271 2.05399,0.12794 3.43554,0.55911 3.93087,1.07252 0.52669,3.88394 3.82226,3.72717 3.34647,5.14663 -10.00315,0.10771 -26.92399,0.0968 -26.92399,0.0968 l -21.682104,0 0,-0.26 z"
+         id="path4116-2-3-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscscccccccccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 96.581943,149.79365 c 0.753138,-1.06945 2.679161,-1.29143 3.377613,-2.00659 0.558224,-0.57158 0.311104,-1.87429 0.678114,-2.31769 0.89101,-1.0765 2.06016,-0.91943 2.91318,-0.73988 5.07267,2.1511 8.58827,1.29859 9.95825,0.30376 0.49782,-0.3615 2.21261,-0.006 3.06968,0.0185 5.28499,2.59154 4.6099,0.21907 10.22774,0.0808 2.72869,0.29741 2.13707,0.68301 4.72401,0.80951 3.82148,0.18687 1.66147,-0.66073 4.39175,-0.95443 1.95517,0.10152 3.27025,0.44368 3.74175,0.85111 0.50134,3.08217 3.63835,2.95776 3.18546,4.08421 -9.52188,0.0855 -25.62862,0.0768 -25.62862,0.0768 l -20.638927,0 0,-0.20633 z"
+         id="path4116-2-3-6-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscscccccccccc" />
+    </g>
+    <g
+       id="g4132">
+      <g
+         id="g3232"
+         transform="matrix(1.1040865,0,0,1.0255883,-12.754726,-3.8254288)">
+        <path
+           sodipodi:nodetypes="sscccsssssscccsscsccccs"
+           inkscape:connector-curvature="0"
+           id="path3028-8-0"
+           d="m 104.04864,196.40367 c 0,-0.32834 1.04235,-0.38882 0.56513,-0.38882 l 0.56511,0 0,0.0467 c -0.54369,-3.4381 1.69961,-1.58113 3.5445,-1.64664 0,-0.27745 0.12725,-0.3182 1.24326,-0.39815 1.12298,-0.0805 1.24328,1.88049 1.24328,1.59624 0,-0.30697 0.0443,-0.31469 1.80839,-0.31469 1.75495,0 1.80839,0.009 1.80839,0.30908 0,0.27746 0.12727,-1.68179 1.24328,-1.60185 1.12299,0.0805 1.70573,0.5062 1.24326,0.40376 l -2.41423,0.93046 6.59615,-1.38424 -8.09067,-0.12211 c 0.0859,-1.05287 0.90989,-6.09103 1.07407,-9.55503 0.10044,-2.11916 0.0606,-5.2399 0.99865,-7.16757 0.93064,-1.91251 2.83517,-2.64028 3.92645,-2.65734 2.32059,-0.0183 4.40299,2.25765 5.81963,6.94523 0.70783,2.34212 1.00751,10.60394 1.83531,11.77917 2.81793,6.6447 -0.23968,3.58377 -9.80436,3.61466 l -13.2056,0 0,-0.38883 z"
+           style="opacity:0.98279993;fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="sscccsssssssscccscscccccs"
+           inkscape:connector-curvature="0"
+           id="path3028-4-0-8"
+           d="m 106.4193,196.81759 c 0,-0.31201 0.8823,-0.3695 0.47835,-0.3695 l 0.47835,0 0,0.0444 0,-2.58645 0.47834,0 c 0.3765,0 2.52186,1.25288 2.52186,1.02169 0,-0.26366 0.10772,-0.30238 1.05235,-0.37836 0.95054,-0.0764 1.05235,-0.11356 1.05235,-0.38368 0,-0.29169 0.0375,1.70096 1.53071,1.70096 1.48547,0 1.53071,-1.992 1.53071,-1.70629 0,0.26366 0.10771,0.30238 1.05235,0.37836 0.95055,0.0764 1.44379,0.48102 1.05236,0.38368 l -2.04351,0.98364 5.58326,-1.31541 -6.61663,-0.24633 c 0.0895,-1.23218 1.27013,-14.77906 2.26171,-15.95147 0.81958,-0.96905 0.96667,-2.45292 2.47769,-2.47942 1.65911,-0.0147 2.46703,0.97621 3.49366,2.08418 0.7961,0.85918 2.17415,14.39003 3.0927,15.85405 l 1.27311,0.001 c -1.36883,4.65357 6.88278,3.30579 -9.57193,3.33409 l -11.17779,0 0,-0.36949 z"
+           style="opacity:0.98279993;fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="sscccssssssssccccccccccs"
+           inkscape:connector-curvature="0"
+           id="path3028-4-7-4-1"
+           d="m 109.46906,196.93498 c 0,-0.3038 0.70264,-0.35975 0.38095,-0.35975 l 0.38094,0 0,0.0432 0,-2.51832 0.38095,0 c 0.29985,0 2.00837,1.21988 2.00837,0.99479 0,-0.25672 0.0858,-0.29443 0.83808,-0.3684 0.757,-0.0743 0.83808,-0.11058 0.83808,-0.37358 0,-0.28401 0.03,-0.29116 1.21904,-0.29116 1.18301,0 1.21903,0.008 1.21903,0.28598 0,0.2567 0.0858,0.29442 0.83808,0.36838 0.757,0.0745 1.14982,0.46836 0.83809,0.37358 l -1.62743,-0.98959 4.44644,0.71925 -5.26939,-0.23984 c 0.0713,-1.19972 2.25273,-14.21225 3.04241,-15.35378 0.78958,-1.07139 1.65913,-0.53764 2.44984,0.38018 0.63401,0.83654 2.79591,13.06845 3.52742,14.49392 l 1.01389,0.001 c -1.09012,4.53098 5.48135,3.16602 -7.62296,3.19358 l -8.90183,0 0,-0.35976 z"
+           style="opacity:0.98279993;fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      </g>
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 91.727015,198.79487 c 0.858518,-1.06221 2.866763,-1.28269 3.66295,-1.99302 0.636339,-0.56772 3.06995,-2.21932 3.488316,-2.65973 1.015683,-1.06922 2.535679,-0.46608 3.508039,-0.28774 5.78246,2.13656 7.79037,1.58991 9.75988,0.21228 0.54918,-0.38413 2.14766,-0.18363 3.12466,-0.16042 6.02448,2.57402 3.66319,0.0388 10.06708,-0.0985 3.11049,0.29541 3.27878,1.03612 6.2277,1.16176 2.6708,-0.4404 0.58307,-1.28226 3.69538,-1.57398 1.39617,-0.20965 2.87283,1.81421 4.92014,3.1788 1.90542,1.27004 4.44294,1.8613 4.28718,2.34915 -10.85418,0.0849 -29.21459,0.0763 -29.21459,0.0763 l -23.526735,0 0,-0.20493 z"
+         id="path4116-2-3-8"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+    </g>
+    <path
+       sodipodi:nodetypes="csscsccccsccccc"
+       inkscape:connector-curvature="0"
+       id="path4116-2-3-8-0"
+       d="m 93.365354,198.85031 c 0.803657,-0.77484 2.68357,-0.93567 3.428878,-1.45382 0.595676,-0.41412 2.873772,-1.61889 3.265398,-1.94015 0.95078,-0.77994 2.37365,-0.33998 3.28387,-0.20989 5.41295,1.55852 7.29255,1.15976 9.1362,0.15486 0.51409,-0.28022 2.01042,-0.13397 2.92499,-0.11703 5.6395,1.87764 3.4291,0.0283 9.42377,-0.0718 2.91172,0.21549 3.06925,0.7558 5.82973,0.84745 2.50013,-0.32125 0.54581,-0.93535 3.45924,-1.14815 1.30695,-0.15294 2.68924,1.32338 4.60573,2.31878 1.78366,0.92644 4.15902,1.35773 4.01321,1.7136 -10.16057,0.062 -27.3477,0.0557 -27.3477,0.0557 l -22.023316,0 0,-0.14948 z"
+       style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       sodipodi:nodetypes="csscsccccsccccc"
+       inkscape:connector-curvature="0"
+       id="path4116-2-3-8-0-3"
+       d="m 94.488937,198.9025 c 0.764035,-0.50437 2.551264,-0.60906 3.259829,-0.94634 0.56631,-0.26957 2.732074,-1.05379 3.104404,-1.26291 0.9039,-0.50769 2.25662,-0.22131 3.12196,-0.13663 5.14608,1.0145 6.93301,0.75494 8.68577,0.10081 0.48874,-0.18241 1.9113,-0.0872 2.78078,-0.0762 5.36146,1.22221 3.26004,0.0184 8.95915,-0.0467 2.76817,0.14027 2.91793,0.49198 5.54231,0.55164 2.37687,-0.20912 0.5189,-0.60886 3.2887,-0.74738 1.24251,-0.0995 2.55665,0.86144 4.37865,1.50938 1.69572,0.60305 3.95397,0.88379 3.81535,1.11544 -9.65963,0.0404 -25.99939,0.0363 -25.99939,0.0363 l -20.937513,0 0,-0.0973 z"
+       style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <g
+       transform="translate(-0.513536,-0.99999935)"
+       id="g3749">
+      <g
+         id="g4148">
+        <g
+           transform="matrix(1.0327683,0,0,1.0317587,-3.3982859,-7.6505542)"
+           id="g3328">
+          <path
+             style="opacity:0.98279993;fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 103.15922,296.1299 c 0,-0.30325 0.43537,1.91224 0.56513,1.48809 l 0.56511,0 0,0.0431 c -0.54369,-3.17543 1.69961,-1.46033 3.5445,-1.52084 0,-0.25625 0.12725,-0.29389 1.24326,-0.36773 1.12298,-0.0744 1.24328,1.73682 1.24328,1.47429 0,-0.28352 0.0443,-0.29065 1.80839,-0.29065 1.75495,0 1.80839,0.008 1.80839,0.28547 0,0.25626 0.12727,-1.5533 1.24328,-1.47947 1.12299,0.0744 1.67634,0.55011 1.24326,0.37291 l -2.41423,0.85938 6.59615,-1.27849 -8.09067,-0.11278 c 0.0859,-0.97243 0.90989,-7.47288 1.07407,-10.67223 0.10044,-1.95726 0.0606,-4.83958 0.99865,-6.61997 0.93064,-1.7664 2.83517,-2.43857 3.92645,-2.45432 2.32059,-0.0169 5.06191,0.89735 5.95205,6.24909 0.34529,2.07601 0.91387,10.16834 1.74167,11.25378 2.81793,6.13705 0.93875,3.40536 -8.62593,3.43389 l -14.42281,-0.3044 z"
+             id="path3028-8-0-3-9"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="cscccsssssscccsscscccc" />
+          <path
+             style="opacity:0.98279993;fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 106.96492,295.67028 c 0.3765,0 2.52186,1.15716 2.52186,0.94363 0,-0.24351 0.10772,-0.27927 1.05235,-0.34945 0.95054,-0.0706 1.05235,-0.10488 1.05235,-0.35437 0,-0.2694 0.0375,1.57101 1.53071,1.57101 1.48547,0 1.53071,-1.83981 1.53071,-1.57593 0,0.24352 0.10771,0.27928 1.05235,0.34945 0.95055,0.0706 1.41351,0.52027 1.05236,0.35437 l -2.04351,0.90849 5.58326,-1.21491 -6.61663,-0.22751 c 0.0895,-1.13804 1.27013,-15.49715 2.26171,-16.57999 0.81958,-0.89501 0.96667,-2.26552 2.47769,-2.28999 1.65911,-0.0136 2.46703,0.90163 3.49366,1.92495 0.25643,0.2556 1.27723,1.71577 1.68547,3.62318 0.85916,4.01424 1.25271,10.00937 1.87539,10.926 1.34949,5.61906 1.34159,3.19484 -8.76698,3.17392 12.18105,-4.66738 -10.37944,2.06307 -9.74275,-1.18285 z"
+             id="path3028-4-0-8-0-1"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="cssssssscccscssccc" />
+          <path
+             style="opacity:0.98279993;fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 108.57964,296.62062 c 0,-0.28059 0.70264,-0.33227 0.38095,-0.33227 l 0.38094,0 0,0.0399 0.42134,0.52787 0.33414,0 c 1.15144,-1.20667 2.91339,-0.31184 3.31,-0.77309 0,-0.26231 0.03,-0.26892 1.21904,-0.26892 1.18301,0 1.21903,0.007 1.21903,0.26414 0,0.23708 0.0858,0.27192 0.83808,0.34023 0.757,0.0688 0.29572,-0.36706 -0.0226,-0.42629 l -0.76673,-0.14266 1.0533,0.24056 -1.87625,0.20223 c 0.0713,-1.10806 2.25273,-14.97365 3.04241,-16.02796 0.78958,-0.98954 1.65913,-0.49657 2.44984,0.35113 0.63401,0.77263 2.79591,12.07003 3.52742,13.38659 1.83227,4.33999 -0.089,2.95845 -6.60907,2.95052 l -8.90183,0 0,-0.33228 z"
+             id="path3028-4-7-4-1-7-3"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="sscccccsssscccccccccs" />
+        </g>
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-9"
+           d="m 89.812846,299.87217 c 0.893001,-0.66158 2.981907,-0.79891 3.810073,-1.24133 0.661898,-0.3536 3.193256,-1.38228 3.628425,-1.65659 1.056479,-0.66595 2.637531,-0.29029 3.648946,-0.17921 6.01471,1.33073 8.10327,0.99026 10.15189,0.13222 0.57124,-0.23926 2.23392,-0.11437 3.25017,-0.0999 6.26645,1.6032 3.81031,0.0242 10.47142,-0.0613 3.23542,0.184 3.41047,0.64534 6.47783,0.72359 2.77808,-0.2743 0.6065,-0.79864 3.84381,-0.98034 1.45225,-0.13058 2.98822,1.12997 5.11775,1.97989 1.98196,0.79103 4.6214,1.15929 4.45938,1.46314 -11.29014,0.0529 -30.38799,0.0475 -30.38799,0.0475 l -24.471704,0 0,-0.12764 z"
+           style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-9-9"
+           d="m 90.853304,299.91308 c 0.859475,-0.44919 2.869955,-0.54243 3.667029,-0.84283 0.637048,-0.24008 3.073373,-0.93853 3.492203,-1.12477 1.01682,-0.45217 2.538514,-0.19711 3.511954,-0.12168 5.78889,0.90353 7.79904,0.67235 9.77075,0.0898 0.54979,-0.16245 2.15005,-0.0776 3.12815,-0.0678 6.03118,1.08852 3.66725,0.0165 10.07828,-0.0416 3.11395,0.12492 3.28243,0.43816 6.23463,0.49129 2.67378,-0.18624 0.58373,-0.54225 3.6995,-0.66562 1.39773,-0.0886 2.87603,0.76721 4.92561,1.34428 1.90755,0.53709 4.4479,0.78713 4.29196,0.99344 -10.86627,0.036 -29.24712,0.0323 -29.24712,0.0323 l -23.552946,0 0,-0.0867 z"
+           style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-9-9-5"
+           d="m 93.38136,299.93702 c 0.78785,-0.3253 2.630786,-0.39282 3.361435,-0.61037 0.58396,-0.17386 2.817249,-0.67968 3.201179,-0.81455 0.932076,-0.32746 2.326956,-0.14275 3.219276,-0.0881 5.30647,0.65433 7.1491,0.48691 8.9565,0.065 0.50397,-0.11764 1.97088,-0.0562 2.86746,-0.0491 5.52857,0.7883 3.36164,0.012 9.23841,-0.0301 2.85444,0.0905 3.00888,0.31732 5.71506,0.35579 2.45096,-0.13487 0.53508,-0.39269 3.3912,-0.48203 1.28125,-0.0642 2.63636,0.5556 4.51513,0.97352 1.74859,0.38895 4.07723,0.57003 3.93429,0.71944 -9.96072,0.0261 -26.8098,0.0234 -26.8098,0.0234 l -21.59014,0 0,-0.0628 z"
+           style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      </g>
+    </g>
+    <g
+       transform="translate(-0.513536,-0.99999523)"
+       id="g3740">
+      <g
+         id="g4157">
+        <g
+           transform="matrix(1,0,0,1.0501642,0.07569744,-16.512303)"
+           id="g3333">
+          <path
+             style="opacity:0.98279993;fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 111.63228,347.34693 c 1.93476,0 1.99367,0.007 1.99367,0.24599 0,0.22081 0.14031,-1.33845 1.37067,-1.27483 1.23805,0.0641 1.8481,0.47402 1.37065,0.32133 l -2.6616,0.74051 7.272,-1.10165 -8.91965,-0.0972 c 0.0947,-0.83792 1.00312,-6.4392 1.18412,-9.19601 0.11074,-1.68652 0.0668,-4.17015 1.10098,-5.70427 1.02599,-1.52206 3.12566,-2.10126 4.32875,-2.11483 1.37867,-0.008 3.57489,0.0842 4.72728,1.15141 0.98606,0.91321 0.96847,2.6557 1.68863,4.37591 0.78034,1.86398 1.11074,8.4391 2.02336,9.37439 3.10666,5.28815 -0.30073,3.53102 -10.84541,3.55561 -0.34657,-1.20967 -12.52529,-0.27414 -4.63345,-0.27638 z"
+             id="path3028-8-0-3-9-8"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="cssscccsscsscccc" />
+          <path
+             style="opacity:0.98279993;fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 112.72735,347.79926 c 1.63767,0 1.68755,-1.58532 1.68755,-1.35794 0,0.20984 0.11874,0.24065 1.16017,0.30111 1.04795,0.0608 1.55834,0.44831 1.16019,0.30536 l -2.25289,0.78282 6.15532,-1.04686 -7.29457,-0.19604 c 0.0987,-0.98062 1.40027,-13.35353 2.49344,-14.28659 0.90356,-0.77121 1.06572,-1.95214 2.73156,-1.97323 1.8291,-0.0117 3.08394,0.44588 4.21576,1.32765 0.87767,0.68377 2.03278,11.78327 3.04544,12.9484 1.48776,4.84181 1.99518,2.67224 -9.14912,2.65422 -1.69116,-0.41712 -5.75991,0.36356 -3.95285,0.5411 z"
+             id="path3028-4-0-8-0-1-0"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="cssscccscsccc" />
+          <path
+             style="opacity:0.98279993;fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 113.04135,346.59458 c 0,-0.22603 0.0331,-0.23172 1.34395,-0.23172 1.30422,0 1.34393,0.006 1.34393,0.2276 0,0.20429 0.0946,0.23431 0.92395,0.29317 0.83456,0.0593 0.32602,-0.31629 -0.0249,-0.36733 l -0.84529,-0.12292 1.16123,0.20728 -2.0685,0.17426 c 0.0786,-0.95479 2.48355,-12.90244 3.35414,-13.81092 0.87048,-0.85266 1.82913,-0.42788 2.70085,0.30256 0.69897,0.66576 3.08238,10.40046 3.88884,11.53491 2.02001,3.73967 -0.0981,2.54923 -7.28624,2.5424 1.27773,-0.97571 -1.94297,-0.88619 -4.49194,-0.74929 z"
+             id="path3028-4-7-4-1-7-3-9"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="csssscccccccc" />
+        </g>
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-9-5"
+           d="m 89.812846,349.87217 c 0.893001,-0.66158 2.981907,-0.79891 3.810073,-1.24133 0.661898,-0.3536 3.193256,-1.38228 3.628425,-1.65659 1.056479,-0.66595 2.637531,-0.29029 3.648946,-0.17921 6.01471,1.33073 8.10327,0.99026 10.15189,0.13222 0.57124,-0.23926 2.23392,-0.11437 3.25017,-0.0999 6.26645,1.6032 3.81031,0.0242 10.47142,-0.0613 3.23542,0.184 3.41047,0.64534 6.47783,0.72359 2.77808,-0.2743 0.6065,-0.79864 3.84381,-0.98034 1.45225,-0.13058 2.98822,1.12997 5.11775,1.97989 1.98196,0.79103 4.6214,1.15929 4.45938,1.46314 -11.29014,0.0529 -30.38799,0.0475 -30.38799,0.0475 l -24.471704,0 0,-0.12764 z"
+           style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-9-5-3"
+           d="m 90.317678,349.90979 c 0.868618,-0.46688 2.900488,-0.5638 3.706041,-0.87603 0.643826,-0.24954 3.10607,-0.9755 3.529357,-1.16908 1.027631,-0.46999 2.565514,-0.20487 3.549304,-0.12648 5.85048,0.93913 7.88202,0.69885 9.8747,0.0933 0.55564,-0.16885 2.17293,-0.0807 3.16143,-0.0705 6.09534,1.13141 3.70627,0.0171 10.18551,-0.0433 3.14707,0.12986 3.31734,0.45543 6.30095,0.51065 2.70222,-0.19357 0.58994,-0.56361 3.73885,-0.69185 1.4126,-0.0922 2.90664,0.79745 4.97801,1.39726 1.92786,0.55824 4.49523,0.81814 4.33762,1.03257 -10.98186,0.0374 -29.55826,0.0335 -29.55826,0.0335 l -23.803512,0 0,-0.0901 z"
+           style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-9-5-3-8"
+           d="m 91.066736,349.95424 c 0.81528,-0.23681 2.722383,-0.28601 3.478471,-0.44439 0.604292,-0.12656 2.915343,-0.49485 3.312633,-0.59307 0.96453,-0.23842 2.40798,-0.10388 3.33136,-0.0641 5.49123,0.47639 7.39803,0.35449 9.26835,0.0471 0.52152,-0.0857 2.0395,-0.0411 2.9673,-0.036 5.72105,0.57394 3.47869,0.009 9.56007,-0.0218 2.95382,0.0658 3.11364,0.23102 5.91404,0.25902 2.53629,-0.0982 0.55371,-0.28591 3.50926,-0.35094 1.32586,-0.0467 2.72816,0.40451 4.67234,0.70878 1.80948,0.28322 4.2192,0.41506 4.07126,0.52382 -10.30751,0.0188 -27.74323,0.0173 -27.74323,0.0173 l -22.341854,0 0,-0.0456 z"
+           style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      </g>
+    </g>
+    <g
+       transform="translate(-0.513536,-1.0000036)"
+       id="g3733">
+      <path
+         style="fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 109.15151,399.21681 c 0.37497,-0.72046 1.77906,-1.37088 1.96352,-2.09418 2.51377,-9.85676 3.06493,-14.33506 7.74433,-14.69592 2.59527,-0.0156 5.30251,0.84258 6.88683,4.66076 0.79162,1.90774 2.37664,10.89974 3.30243,11.85701 -9.6137,0.12331 -2.92079,0.35917 -19.89711,0.27233 z"
+         id="path3028-8-0-3-9-8-5-7-3-2-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscscc" />
+      <path
+         style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 109.8163,399.32638 c 0.34752,-0.65228 1.64882,-1.24114 1.81978,-1.896 2.32975,-8.92394 2.84056,-12.97843 7.17741,-13.30514 2.40528,-0.0141 4.91434,0.76284 6.38268,4.21969 0.73367,1.72719 2.20265,9.86822 3.06067,10.73489 -8.90993,0.11164 -2.70697,0.32518 -18.44054,0.24656 z"
+         id="path3028-8-0-3-9-8-5-7-3-2-4-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscscc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 110.84544,399.95608 c 0.31399,-0.60809 1.48975,-1.15705 1.64422,-1.76754 2.105,-8.3193 2.56652,-12.09909 6.48499,-12.40366 2.17324,-0.0131 4.44024,0.71115 5.76693,3.9338 0.66289,1.61016 1.99015,9.1996 2.76539,10.00755 -8.05036,0.10407 -2.44581,0.30314 -16.66153,0.22985 z"
+         id="path3028-8-0-3-9-8-5-7-3-2-4-0-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscscc" />
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 89.680431,399.86733 c 0.893001,-0.68661 2.981907,-0.82914 3.810073,-1.28829 0.661898,-0.36698 3.193256,-1.43458 3.628425,-1.71927 1.056479,-0.69115 2.637531,-0.30127 3.648951,-0.18599 6.0147,1.38107 8.10327,1.02773 10.15188,0.13722 0.57125,-0.24831 2.23393,-0.11874 3.25017,-0.1037 6.26645,1.66386 3.81032,0.0251 10.47142,-0.0636 3.23542,0.19097 3.41048,0.66976 6.47784,0.75097 2.77807,-0.28468 0.60649,-0.82886 3.84381,-1.01743 1.45225,-0.13552 2.98822,1.17273 5.11775,2.05479 1.98196,0.82096 4.6214,1.20316 4.45938,1.51851 -11.29014,0.0549 -30.388,0.0493 -30.388,0.0493 l -24.471699,0 0,-0.13246 z"
+         id="path4116-2-3-8-8-9-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+      <path
+         style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 91.040566,399.90833 c 0.84576,-0.47422 2.824157,-0.57266 3.608511,-0.88979 0.626882,-0.25346 3.024321,-0.99082 3.436467,-1.18745 1.000587,-0.47736 2.497996,-0.20808 3.455916,-0.12845 5.6965,0.95386 7.67459,0.70982 9.61482,0.0948 0.54103,-0.17151 2.11575,-0.082 3.07823,-0.0716 5.93494,1.14918 3.60875,0.0174 9.91745,-0.0439 3.06427,0.13191 3.23006,0.46259 6.13515,0.51868 2.6311,-0.19662 0.57441,-0.57247 3.64047,-0.70272 1.37542,-0.0936 2.83013,0.80998 4.84701,1.4192 1.8771,0.56701 4.37692,0.83099 4.22347,1.04879 -10.69287,0.0379 -28.78041,0.034 -28.78041,0.034 l -23.177084,0 0,-0.0915 z"
+         id="path4116-2-3-8-8-9-3-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+    </g>
+    <g
+       transform="translate(-0.513536,-0.99999974)"
+       id="g3725">
+      <path
+         style="fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 109.34037,447.7481 c 4.28287,-3.42936 4.17177,-11.49506 9.70786,-11.76394 2.59527,-0.0109 4.77284,1.33256 6.35717,4.00776 0.79162,1.33665 2.9063,6.89466 3.83209,7.56537 -9.6137,0.0864 -2.9208,0.25165 -19.89712,0.19081 z"
+         id="path3028-8-0-3-9-8-5-7-3-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 110.01491,448.43374 c 3.98056,-3.07453 3.8773,-10.30568 9.02261,-10.54673 2.41208,-0.01 4.43594,1.19468 5.90844,3.59308 0.73574,1.19834 2.70115,6.18127 3.56159,6.78258 -8.93509,0.0775 -2.71463,0.22561 -18.49264,0.17107 z"
+         id="path3028-8-0-3-9-8-5-7-3-2-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 110.91578,449.41479 c 3.63853,-2.80432 3.54414,-9.39996 8.24734,-9.61983 2.20482,-0.009 4.05478,1.08969 5.40076,3.2773 0.67252,1.09303 2.46905,5.63803 3.25556,6.18649 -8.16734,0.0707 -2.48138,0.20579 -16.90366,0.15604 z"
+         id="path3028-8-0-3-9-8-5-7-3-2-2-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 89.680431,449.87217 c 0.88438,-0.66158 2.953121,-0.79891 3.773292,-1.24133 0.655508,-0.3536 3.16243,-1.38228 3.593398,-1.65659 1.04628,-0.66595 2.612069,-0.29029 3.613719,-0.17921 5.95665,1.33073 8.02505,0.99026 10.05389,0.13222 0.56572,-0.23926 2.21236,-0.11437 3.21879,-0.0999 6.20596,1.6032 3.77353,0.0242 10.37033,-0.0613 3.20419,0.184 3.37756,0.64534 6.4153,0.72359 2.75126,-0.2743 0.60064,-0.79864 3.80671,-0.98034 1.43823,-0.13058 2.95937,1.12997 5.06835,1.97989 1.96282,0.79103 4.57678,1.15929 4.41632,1.46314 -11.18115,0.0529 -30.09464,0.0475 -30.09464,0.0475 l -24.235459,0 0,-0.12764 z"
+         id="path4116-2-3-8-8-9-1"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 91.679927,449.90643 c 0.827994,-0.48459 2.764839,-0.58518 3.532718,-0.90924 0.613715,-0.259 2.960799,-1.01248 3.364294,-1.21341 0.979571,-0.48779 2.445531,-0.21263 3.383321,-0.13126 5.57687,0.97472 7.5134,0.72534 9.41289,0.0968 0.52964,-0.17525 2.0713,-0.0838 3.01357,-0.0732 5.81028,1.1743 3.53293,0.0177 9.70914,-0.0449 2.99991,0.13477 3.16222,0.47269 6.00628,0.53001 2.57586,-0.20092 0.56235,-0.58498 3.56401,-0.71807 1.34653,-0.0957 2.77069,0.82767 4.74521,1.45021 1.83767,0.57941 4.28498,0.84916 4.13475,1.07172 -10.46828,0.0387 -28.1759,0.0348 -28.1759,0.0348 l -22.690283,0 0,-0.0935 z"
+         id="path4116-2-3-8-8-9-1-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 94.314693,449.93374 c 0.730462,-0.343 2.439162,-0.4142 3.116591,-0.64357 0.541427,-0.18333 2.612036,-0.71665 2.967996,-0.85887 0.8642,-0.34527 2.15748,-0.1505 2.9848,-0.0929 4.91996,0.68992 6.62838,0.51341 8.30412,0.0685 0.46725,-0.12405 1.82732,-0.0593 2.6586,-0.0518 5.12588,0.83119 3.11678,0.0125 8.56547,-0.0318 2.64655,0.0954 2.78974,0.33458 5.29879,0.37515 2.27244,-0.14221 0.49611,-0.41405 3.1442,-0.50826 1.18792,-0.0677 2.44432,0.58584 4.18625,1.02648 1.62121,0.41011 3.78025,0.60105 3.64771,0.75858 -9.23519,0.0274 -24.85699,0.0246 -24.85699,0.0246 l -20.017537,0 0,-0.0662 z"
+         id="path4116-2-3-8-8-9-1-5-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+    </g>
+    <g
+       transform="translate(-0.513536,-1.0475145)"
+       id="g3717">
+      <path
+         style="fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 110.50335,498.21417 c 3.9836,-2.04891 3.88025,-6.86787 9.02949,-7.02852 2.41393,-0.007 4.43933,0.79616 5.91295,2.39449 0.73631,0.7986 2.70322,4.11931 3.56431,4.52003 -8.94191,0.0516 -2.71669,0.15036 -18.50675,0.114 z"
+         id="path3028-8-0-3-9-8-5-7-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 110.71871,499.22991 c 3.82237,-2.04891 3.7232,-6.86787 8.66402,-7.02852 2.31623,-0.007 4.25965,0.79616 5.67363,2.39449 0.70651,0.7986 2.59381,4.11931 3.42005,4.52003 -8.57999,0.0516 -2.60674,0.15036 -17.7577,0.114 z"
+         id="path3028-8-0-3-9-8-5-7-3-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 111.65502,499.5108 c 3.39913,-1.74867 3.31094,-5.86147 7.70467,-5.99858 2.05976,-0.006 3.78799,0.67949 5.04541,2.04361 0.62828,0.68157 2.3066,3.51568 3.04135,3.85768 -7.62995,0.044 -2.3181,0.12832 -15.79143,0.0973 z"
+         id="path3028-8-0-3-9-8-5-7-3-0-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccscc" />
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 89.267296,499.88186 c 0.88438,-0.61152 2.953121,-0.73846 3.773292,-1.1474 0.655508,-0.32684 3.16243,-1.27769 3.593398,-1.53124 1.04628,-0.61556 2.612069,-0.26833 3.613714,-0.16565 5.95665,1.23004 8.02505,0.91533 10.05389,0.12221 0.56572,-0.22115 2.21236,-0.10571 3.21879,-0.0923 6.20596,1.48189 3.77353,0.0224 10.37033,-0.0567 3.20419,0.17008 3.37756,0.59651 6.4153,0.66884 2.75126,-0.25354 0.60064,-0.73821 3.80671,-0.90616 1.43823,-0.1207 2.95937,1.04447 5.06835,1.83008 1.96282,0.73117 4.57678,1.07157 4.41632,1.35242 -11.18115,0.0489 -30.09464,0.0439 -30.09464,0.0439 l -24.235454,0 0,-0.11798 z"
+         id="path4116-2-3-8-8-9-1-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 90.994666,499.91943 c 0.827995,-0.41683 2.764839,-0.50336 3.532718,-0.78211 0.613715,-0.22278 2.960803,-0.87091 3.364294,-1.04374 0.979572,-0.41958 2.445532,-0.1829 3.383312,-0.11291 5.57687,0.83843 7.5134,0.62392 9.41289,0.0833 0.52965,-0.15074 2.0713,-0.072 3.01357,-0.0629 5.81028,1.0101 3.53294,0.0153 9.70914,-0.0386 2.9999,0.11593 3.16222,0.4066 6.00628,0.4559 2.57585,-0.17282 0.56235,-0.50318 3.56401,-0.61766 1.34653,-0.0823 2.77069,0.71194 4.74521,1.24744 1.83767,0.49838 4.28497,0.73041 4.13475,0.92185 -10.46828,0.0333 -28.1759,0.0299 -28.1759,0.0299 l -22.690274,0 0,-0.0804 z"
+         id="path4116-2-3-8-8-9-1-3-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 93.20294,499.99604 c 0.765495,-0.26665 2.55614,-0.322 3.266057,-0.50032 0.567387,-0.14251 2.737312,-0.55713 3.110351,-0.66769 0.905622,-0.2684 2.260932,-0.117 3.127922,-0.0722 5.15591,0.53635 6.94627,0.39912 8.70237,0.0533 0.48967,-0.0964 1.91496,-0.046 2.7861,-0.0403 5.3717,0.64616 3.26626,0.01 8.97626,-0.0247 2.77346,0.0741 2.92352,0.2601 5.5529,0.29164 2.38142,-0.11056 0.51991,-0.32189 3.295,-0.39512 1.24488,-0.0527 2.56154,0.45543 4.38702,0.79799 1.69896,0.31881 3.96153,0.46724 3.82264,0.58971 -9.67809,0.0213 -26.04909,0.0191 -26.04909,0.0191 l -20.97753,0 0,-0.0514 z"
+         id="path4116-2-3-8-8-9-1-3-0-9"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccsccccc" />
+    </g>
+    <g
+       transform="translate(-0.513536,-1.0768751)"
+       id="g3794">
+      <g
+         id="g4139">
+        <g
+           transform="matrix(1.0077978,0,0,1,60.411961,0)"
+           id="g3323">
+          <path
+             style="opacity:0.98279993;fill:#ff9f10;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 43.229321,247.43726 c 0,-0.32834 0.43537,2.07042 0.56513,1.61118 l 0.56511,0 0,0.0467 c -0.54369,-3.4381 1.69961,-1.58113 3.5445,-1.64664 0,-0.27745 0.12725,-0.3182 1.24326,-0.39815 1.12298,-0.0805 1.24328,1.88049 1.24328,1.59624 0,-0.30697 0.0443,-0.31469 1.80839,-0.31469 1.75495,0 1.80839,0.009 1.80839,0.30908 0,0.27746 0.12727,-1.68179 1.24328,-1.60185 1.12299,0.0805 1.67634,0.59562 1.24326,0.40376 l -2.41423,0.93046 6.59615,-1.38424 -8.09067,-0.12211 c 0.0859,-1.05287 0.90989,-8.09103 1.07407,-11.55503 0.10044,-2.11916 0.0606,-5.2399 0.99865,-7.16757 0.93064,-1.91251 2.83517,-2.64028 3.92645,-2.65734 2.32059,-0.0183 4.40299,2.25765 5.81963,6.94523 0.70783,2.34212 1.00751,10.60394 1.83531,11.77917 2.81793,6.6447 -0.23968,5.58377 -9.80436,5.61466 l -13.2056,-2 0,-0.38883 z"
+             id="path3028-8-0-3"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="sscccsssssscccsscsccccs" />
+          <path
+             style="opacity:0.98279993;fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 45.412718,249.94481 c 0,0.31201 0.38439,0.0234 0.47835,-0.3695 l 0.47835,0 0,0.0444 c -0.07984,-2.02135 0.57401,-1.72322 3.0002,-1.56476 0,-0.26366 0.10772,-0.30238 1.05235,-0.37836 0.95054,-0.0764 1.05235,-0.11356 1.05235,-0.38368 0,-0.29169 0.0375,1.70096 1.53071,1.70096 1.48547,0 1.53071,-1.992 1.53071,-1.70629 0,0.26366 0.10771,0.30238 1.05235,0.37836 0.95055,0.0764 1.41351,0.5633 1.05236,0.38368 l -2.04351,0.98364 5.58326,-1.31541 -6.61663,-0.24633 c 0.0895,-1.23218 1.27013,-16.77906 2.26171,-17.95147 0.81958,-0.96905 0.96667,-2.45292 2.47769,-2.47942 1.65911,-0.0147 2.46703,0.97621 3.49366,2.08418 0.7961,0.85918 2.17415,14.39003 3.0927,15.85405 1.34949,6.08387 1.80975,3.35774 -8.29882,3.33509 l -11.17779,0 0,1.63051 z"
+             id="path3028-4-0-8-0"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="sscccsssssscccscsccccs" />
+          <path
+             style="opacity:0.98279993;fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 47.900687,247.96857 c 0,-0.3038 0.70264,-0.35975 0.38095,-0.35975 l 0.38094,0 0,0.0432 0.42134,0.57153 0.33414,0 c 1.40524,-1.75629 2.813527,-1.46483 3.31,-0.83704 0,-0.28401 0.03,-0.29116 1.21904,-0.29116 1.18301,0 1.21903,0.008 1.21903,0.28598 0,0.2567 0.0858,0.29442 0.83808,0.36838 1.126931,0.51193 0.407251,-0.20691 -0.78934,-0.61601 4.443693,0.45499 3.234114,0.717 -0.82295,0.47941 0.0713,-1.19972 2.25273,-16.21225 3.04241,-17.35378 0.78958,-1.07139 1.65913,-0.53764 2.44984,0.38018 0.63401,0.83654 2.79591,13.06845 3.52742,14.49392 l 0.177725,1.31184 c -1.09012,4.53098 6.317515,1.85518 -6.786795,1.88274 l -8.90183,0 0,-0.35976 z"
+             id="path3028-4-7-4-1-7"
+             inkscape:connector-curvature="0"
+             sodipodi:nodetypes="sscccccssccccccccccs" />
+        </g>
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8"
+           d="m 90.210092,249.85095 c 0.886166,-0.77207 2.959083,-0.93233 3.78091,-1.44865 0.656831,-0.41264 3.168814,-1.61312 3.600652,-1.93324 1.048392,-0.77717 2.617346,-0.33877 3.621026,-0.20914 5.96867,1.55297 8.04124,1.15563 10.07417,0.15429 0.56688,-0.27921 2.21683,-0.13347 3.22529,-0.1166 6.2185,1.87095 3.78116,0.0282 10.39128,-0.0716 3.21065,0.21472 3.38436,0.75312 6.42824,0.84443 2.75682,-0.3201 0.60185,-0.93202 3.8144,-1.14406 1.44113,-0.15239 2.96534,1.31868 5.07858,2.31054 1.96677,0.92314 4.58601,1.3529 4.42524,1.7075 -11.20373,0.0617 -30.15539,0.0554 -30.15539,0.0554 l -24.284398,0 0,-0.14896 z"
+           style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-5"
+           d="m 91.625075,249.88853 c 0.85264,-0.57738 2.847132,-0.69723 3.637866,-1.08335 0.631981,-0.30858 3.048924,-1.20634 3.464427,-1.44574 1.008728,-0.58119 2.518332,-0.25334 3.484042,-0.1564 5.74285,1.16136 7.73701,0.86422 9.69303,0.11538 0.54544,-0.2088 2.13296,-0.0998 3.10327,-0.0872 5.98323,1.39916 3.63811,0.0211 9.99814,-0.0535 3.08918,0.16057 3.25632,0.56321 6.18504,0.63149 2.65252,-0.23938 0.57908,-0.69699 3.67009,-0.85556 1.3866,-0.11397 2.85315,0.98615 4.88644,1.72789 1.89236,0.69036 4.41251,1.01175 4.25782,1.27693 -10.77986,0.0461 -29.01452,0.0414 -29.01452,0.0414 l -23.365645,0 0,-0.1114 z"
+           style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="csscsccccsccccc"
+           inkscape:connector-curvature="0"
+           id="path4116-2-3-8-8-5-2"
+           d="m 93.310443,249.92954 c 0.799303,-0.36498 2.669028,-0.44075 3.410296,-0.68483 0.592447,-0.19507 2.858188,-0.76258 3.247715,-0.91392 0.945626,-0.3674 2.360786,-0.16015 3.266086,-0.0989 5.3836,0.73414 7.25301,0.5463 9.08668,0.0729 0.51132,-0.13198 1.99953,-0.0631 2.90914,-0.0551 5.60895,0.88448 3.41052,0.0134 9.37269,-0.0338 2.89594,0.10151 3.05262,0.35603 5.79813,0.3992 2.48659,-0.15133 0.54286,-0.4406 3.44052,-0.54085 1.29985,-0.072 2.67466,0.62339 4.58075,1.09228 1.77398,0.43641 4.13649,0.63958 3.99147,0.8072 -10.10551,0.0291 -27.19948,0.0262 -27.19948,0.0262 l -21.903997,0 0,-0.0704 z"
+           style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      </g>
+    </g>
+    <g
+       transform="matrix(1.011322,0,0,0.98755459,-1.152843,-0.427648)"
+       id="g3256">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 24.309493,40.570783 c -2.498687,-2.496849 0.629161,-3.659397 2.827572,-3.423365 2.690526,0.288873 1.378375,0.633113 5.172116,0.19094 3.686856,-1.799953 3.038119,-1.920903 7.948799,-0.667468 3.505872,0.894858 4.233221,-1.981112 7.542169,-1.638641 1.183807,0.122521 3.958707,0.834825 3.970806,1.618118 2.345006,1.230956 2.03859,-1.575218 3.723508,-0.687526 1.968089,1.02333 2.608466,1.648715 0.971287,4.536374 -2.687676,5.333265 -2.838275,6.17824 -2.856401,9.450237 -4.347409,0.05751 -24.753951,0.101096 -26.909151,0.101096 -0.419234,-6.302446 -0.872445,-6.437845 -2.390705,-9.479765 z"
+         id="path3834-5-6-3-7-4-5-8"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscsscccccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.912889,41.679787 c -2.218982,-2.191438 0.558733,-3.211784 2.511051,-3.004624 2.389348,0.253539 1.224079,0.555672 4.593146,0.167585 3.274148,-1.579785 2.69803,-1.68594 7.059006,-0.585824 3.113422,0.7854 3.75935,-1.738784 6.697893,-1.438205 1.05129,0.107535 3.515565,0.732711 3.52631,1.420192 2.082505,1.080387 1.810389,-1.382539 3.306695,-0.603428 1.74778,0.898157 2.316473,1.447046 0.862561,3.98149 -2.386816,4.680907 -2.520557,5.422526 -2.536654,8.294296 C 48.07214,49.961744 29.949922,50 28.035976,50 27.663673,44.46846 27.261195,44.349622 25.912889,41.679787 z"
+         id="path3834-5-6-3-7-4-5-8-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscsscccccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 27.992848,43.097995 c -1.904633,-1.8179 0.47958,-2.664324 2.155326,-2.492475 2.050864,0.210322 1.050671,0.460955 3.942464,0.139019 2.810319,-1.310505 2.315817,-1.398565 6.059001,-0.485968 2.672362,0.651526 3.226786,-1.442402 5.749044,-1.193057 0.90236,0.0892 3.017537,0.607817 3.026759,1.178115 1.78749,0.896231 1.553924,-1.146881 2.838258,-0.500572 1.500182,0.745063 1.988311,1.200392 0.740366,3.302831 -2.048691,3.883029 -2.163486,4.498236 -2.177302,6.880502 C 47.012936,49.96826 31.457979,50 29.81517,50 29.49561,45.411331 29.150148,45.31275 27.992848,43.097998 z"
+         id="path3834-5-6-3-7-4-5-8-4-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscsscccccc" />
+    </g>
+    <g
+       transform="matrix(1,0,0,0.98191228,-0.513536,0.80877237)"
+       id="g3261">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 24.27716,90.464712 c -1.139418,-2.182153 -1.543144,-3.075305 -2.959905,-4.907838 -2.665636,-3.447914 1.178763,-4.4068 3.524061,-4.080862 2.870291,0.398906 1.47047,0.227786 6.735846,1.03945 6.775557,-1.451193 4.865319,-2.393995 10.104104,-0.663119 3.740116,1.235715 2.891852,-2.994322 6.421887,-2.521402 3.780898,0.544505 3.944194,3.18875 7.186335,3.939763 1.379338,0.347721 0.613071,-0.883893 2.849306,-1.749626 1.693533,-0.655624 5.016038,2.147425 3.066445,4.066265 -4.847303,4.770841 -3.949778,3.39993 -5.910569,8.393615 -1.006211,3.794125 -0.99418,5.879438 -0.99418,5.879438 C 49.662612,99.939816 27.892616,100 25.593417,100 25.474391,94.544006 25.825727,92.808834 24.27716,90.464712 z"
+         id="path3834-5-6-3-7-4-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccsscccc" />
+      <path
+         style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.533114,90.750488 c -1.03664,-1.945332 -1.029423,-3.209711 -2.318389,-4.843366 -2.425191,-3.073724 0.323382,-2.711334 2.45713,-2.420769 2.611386,0.355614 1.337831,0.203065 6.12826,0.926642 6.164389,-1.2937 4.426458,-2.134183 9.192695,-0.591153 3.402751,1.101607 3.754583,-2.388465 6.966202,-1.966868 3.439854,0.485411 2.371207,2.000001 5.320902,2.669509 1.254918,0.309985 2.055878,0.14835 4.090401,-0.623428 1.540773,-0.584472 2.035525,1.539846 0.261788,3.250441 -4.410066,4.253079 -2.469919,3.030948 -4.253843,7.482687 -0.915449,3.382362 -0.904503,5.241364 -0.904503,5.241364 C 48.254224,99.946347 28.447922,100 26.356115,100 c -0.10829,-4.863875 0.585882,-7.159789 -0.823001,-9.249512 z"
+         id="path3834-5-6-3-7-4-5-1"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccsscccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 27.189003,91.033099 c -0.936234,-1.704467 -1.730966,-2.108073 -2.281101,-3.869148 -0.799936,-2.560731 -0.105186,-1.736269 1.821895,-1.481681 2.358457,0.311584 1.6055,1.965529 5.931946,2.599515 5.567328,-1.133518 4.19635,-1.737519 8.500947,-0.385543 3.073173,0.96521 3.390928,-1.496865 6.291481,-1.127468 3.106683,0.425309 1.413257,0.229592 4.077255,0.816204 1.133371,0.271603 2.187791,-1.127964 3.628012,-0.347615 -1.634114,1.953559 -2.158363,4.081879 -3.009531,7.550373 -0.826781,2.963569 -0.816895,4.989642 -0.816895,4.989642 -3.810845,0.06204 -21.698781,0.109043 -23.587984,0.109043 -0.0978,-4.261646 0.716399,-7.022341 -0.556025,-8.853322 z"
+         id="path3834-5-6-3-7-4-5-1-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccccccc" />
+    </g>
+    <g
+       transform="matrix(1,0,0,0.98007354,-0.513536,1.988969)"
+       id="g3266">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 22.736302,135.0422 c -1.204006,-2.95831 -1.468482,-2.77513 -3.528651,-4.49558 -4.092595,-3.41769 0.243174,-6.48197 2.721415,-6.0401 3.032995,0.54079 1.553824,0.68961 7.11767,1.78997 7.159632,-1.96736 5.842797,-2.73776 11.378544,-0.39124 3.952126,1.67524 5.762279,-4.69403 9.492415,-4.0529 3.956539,1.23961 3.400826,4.40069 6.99225,5.46801 1.457526,0.4714 3.655048,-0.94441 6.018044,-2.11807 1.789531,-0.88882 3.796762,3.1651 2.939545,4.24322 -5.132245,6.45481 -8.584268,5.11697 -8.952113,12.39457 -0.662284,1.97026 -1.050534,7.97066 -1.050534,7.97066 C 50.96411,149.91841 27.960073,150 25.530543,150 25.204289,141.71485 25.67578,139.74331 22.736302,135.0422 z"
+         id="path3834-5-6-3-7-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccsscccc" />
+      <path
+         style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.064022,136.13507 c -1.050052,-2.74216 -0.906183,-3.50869 -2.702922,-5.10343 -3.569282,-3.16799 -0.630607,-4.41664 1.530747,-4.00705 2.645171,0.50128 1.823298,-0.0162 6.675704,1.00376 6.244143,-1.82361 5.09569,-2.53772 9.92359,-0.36265 3.446775,1.55284 5.77452,-3.69565 9.027691,-3.10136 3.450623,1.14904 2.216915,3.42374 5.349109,4.41308 1.271155,0.43696 4.311265,-0.12636 6.372108,-1.21427 1.560707,-0.82388 1.064116,2.37206 0.316509,3.37141 -4.475994,5.98319 -6.363032,4.55584 -6.683841,11.30171 -0.577599,1.82631 -0.916204,7.3883 -0.916204,7.3883 C 49.68239,149.92437 29.619838,150 27.500968,150 c -0.284536,-7.67981 0.126666,-9.5073 -2.436946,-13.86493 z"
+         id="path3834-5-6-3-7-4-59"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccsscccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.118008,132.26433 c -3.251031,-2.99338 -2.030946,-2.98538 -0.06231,-2.59836 2.409317,0.47365 3.305638,5.24358 6.838129,3.78011 4.581544,-1.89807 5.995672,-1.73578 10.393098,0.31942 3.139447,1.46725 3.948797,-4.05376 6.911903,-3.49222 3.142952,1.08571 0.521138,2.39235 3.374054,3.32716 1.157814,0.41288 2.803275,-2.92834 4.493102,-2.36455 1.537439,0.51295 -1.133259,2.58655 -1.771609,3.56012 -2.399462,4.49452 -2.380138,6.21592 -2.053547,15.03823 C 49.347805,149.92854 31.635897,150 29.705954,150 c -0.280175,-7.89869 -0.61624,-13.99718 -4.587946,-17.73567 z"
+         id="path3834-5-6-3-7-4-59-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csssccscccc" />
+    </g>
+    <g
+       transform="matrix(1,0,0,0.97812443,-0.3187027,3.3178323)"
+       id="g3271">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 21.64439,180.55753 c -2.849057,-4.60893 -3.81898,-3.25148 -5.991183,-5.33761 -4.315154,-4.14416 0.05895,-7.97331 2.671961,-7.43751 3.197932,0.65574 3.217899,1.74446 9.084313,3.0787 7.54898,-2.38553 8.628622,-2.63847 14.465409,0.20682 4.167047,2.03133 5.384573,-6.0324 9.317559,-5.25499 5.696083,0.21635 2.99157,4.97936 7.273771,6.63029 1.536788,0.5716 5.137219,-1.25869 7.628717,-2.68182 1.886848,-1.07775 3.684308,1.04263 4.086637,2.64741 2.930009,11.68698 -9.779402,-1.12565 -11.709581,17.64041 l -2.094898,9.94927 c -5.167286,0.13056 -28.435072,0.003 -30.996722,0.003 -0.582394,-9.05309 -1.339154,-15.51914 -3.735983,-19.44388 z"
+         id="path3834-5-6-3-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccssccccc" />
+      <path
+         style="fill:#ff7a00;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 23.760317,181.63128 c -2.516108,-4.34158 -2.048532,-3.85736 -3.966886,-5.82248 -3.810874,-3.90377 -2.861075,-5.92183 -0.553426,-5.41711 2.824214,0.61771 3.239093,1.37844 8.419945,2.63529 6.666788,-2.24716 8.811997,-3.01508 13.966683,-0.33484 3.680076,1.9135 6.741549,-4.75557 10.214916,-4.02326 5.030425,0.2038 0.655739,3.76362 4.437511,5.31879 1.357196,0.53844 5.728609,0.13847 7.928944,-1.20211 1.666347,-1.01524 3.142442,1.35055 2.946987,2.89109 -0.590365,4.65313 -9.166218,-2.78175 -10.870832,14.89576 l -1.850084,9.37214 c -4.563424,0.12299 -25.11208,0.003 -27.37437,0.003 -0.514334,-8.52795 -1.182657,-14.61893 -3.299388,-18.31601 z"
+         id="path3834-5-6-3-7-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscsccssccccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.154482,179.5718 c -3.003337,-3.1029 -3.049296,-4.3097 -1.230645,-3.90852 2.225753,0.49098 2.420303,1.89014 6.503315,2.88914 5.254074,-1.78615 6.944705,-2.39653 11.007097,-0.26615 2.900256,1.52095 5.312993,-3.77996 8.050342,-3.19788 3.964462,0.16199 0.516786,2.99151 3.497188,4.22763 1.069602,0.42798 3.295379,-2.52783 5.189452,-3.27276 1.737078,-0.68318 1.734758,0.25348 1.594227,1.5035 -0.416454,3.70435 -5.43626,0.90068 -6.779661,14.95163 l -1.458045,7.44943 c -3.596419,0.0977 -19.790747,0.003 -21.57365,0.003 -0.679605,-4.87003 -1.91053,-17.23417 -4.79962,-20.37902 z"
+         id="path3834-5-6-3-7-0-8"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cscsccsscccc" />
+    </g>
+    <g
+       transform="matrix(1,0,0,0.96925179,0.24308763,6.6437531)"
+       id="g3276">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 23.743124,249.99998 c -0.0021,-8.38473 -0.674478,-13.21106 -1.947372,-19.40235 -2.872411,-4.60893 -8.660165,-7.98126 -9.00852,-9.36377 -1.45177,-5.76161 3.219163,-6.38157 5.853588,-5.84577 3.224147,0.65574 3.00822,4.48264 8.858827,2.89143 7.800011,-2.12139 7.371568,-2.4512 13.2562,0.39409 4.201205,2.03133 7.439447,-5.93877 11.404672,-5.16136 5.88637,1.47719 3.32255,5.27447 8.482387,7.09844 1.549385,0.5716 3.83884,-1.44595 6.350762,-2.86908 1.902314,-1.07775 5.150747,0.29358 5.556374,1.89836 2.954028,11.68698 -11.678801,1.6833 -13.624802,20.44936 l -2.112071,9.89196 c -5.209643,0.13056 -30.487397,0.019 -33.070045,0.0187 z"
+         id="path3834-5-6-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccssssccsscccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.496074,249.95921 c -0.0019,-7.80617 -0.613588,-12.29948 -1.771569,-18.06356 -2.348268,-6.14472 -7.854441,-9.22953 -8.592502,-10.70389 -2.475121,-4.94432 1.736809,-3.55775 4.133405,-3.05892 2.93308,0.61049 4.32563,3.77608 9.64806,2.29467 7.095848,-1.97502 6.706084,-2.28207 12.059468,0.36689 3.821932,1.89117 6.767834,-5.52898 10.37509,-4.80522 5.354965,1.37527 3.022599,4.91053 7.716621,6.60864 1.409511,0.53216 4.816432,-0.81652 7.101585,-2.14145 1.730578,-1.00338 3.411783,-0.26785 3.730608,1.23771 1.098363,5.1867 -10.624472,1.56715 -12.394793,19.03833 l -1.921399,9.2094 c -4.739331,0.12155 -27.735081,0.0176 -30.084574,0.0174 z"
+         id="path3834-5-6-3-9"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccssssccssccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 27.065792,249.95841 c -0.0017,-6.40851 -0.539507,-10.09732 -1.55768,-14.82937 -1.005428,-5.70662 -4.018476,-8.65907 -4.667428,-9.86945 -2.176288,-4.05906 0.367507,-2.79775 2.474751,-1.45191 2.214151,1.41411 2.168956,4.05903 6.848785,2.84286 6.239133,-1.62141 5.802795,-2.06075 10.509841,0.11393 3.360492,1.55256 6.887038,-4.44541 10.058774,-3.85123 4.708435,1.12903 1.721349,3.18863 5.84864,4.5827 1.239334,0.43688 3.433776,-1.43268 5.443032,-2.52039 1.521637,-0.82373 2.466305,-2.06039 2.746635,-0.8244 0.479655,2.11481 -1.679538,1.87114 -3.976849,4.07261 -2.328176,2.23105 -4.803273,6.94048 -5.586757,14.15986 l -1.68942,7.56051 c -4.16713,0.0998 -24.386496,0.0144 -26.452324,0.0143 z"
+         id="path3834-5-6-3-9-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccssssccssscccc" />
+    </g>
+    <g
+       transform="matrix(0.96289698,0,0,0.98960187,1.0985144,2.0458593)"
+       id="g3281">
+      <path
+         style="fill:#ff9900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 22.29079,299.99998 c -0.0021,-8.38473 0.408741,-12.55759 -0.863963,-18.74888 -2.871983,-4.60893 -8.382106,-8.51092 -8.465619,-9.09894 -0.835479,-5.88265 3.218684,-7.04365 5.852716,-6.50785 3.223667,0.65574 4.943793,4.84775 10.79351,3.25655 7.799166,-2.12148 7.329923,-2.28666 13.213678,0.55863 4.200579,2.03133 5.94905,-6.2036 9.913685,-5.42619 1.418383,0.27813 4.642426,2.30102 4.656922,4.0791 0.02181,2.6756 1.324158,2.46404 2.470304,2.88693 1.549154,0.5716 4.785995,-0.38663 7.297542,-1.80976 1.902031,-1.07775 5.55615,-0.23608 5.961716,1.3687 2.953588,11.68698 -11.135502,0.35914 -13.081213,19.1252 l -1.840976,10.15679 c 11.579461,0.39539 -33.326038,0.16006 -35.908302,0.15976 z"
+         id="path3834-5-6"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccssssssssscccc" />
+      <path
+         style="fill:#ff7900;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 23.511372,299.99999 c -0.002,-7.82741 0.779178,-12.68366 -0.41005,-18.46342 -2.683611,-4.30259 -7.170252,-8.60729 -7.248287,-9.15622 -0.78068,-5.49165 1.418589,-4.85408 3.879856,-4.35389 3.012229,0.61215 3.514653,3.06065 9.040402,4.30621 6.126595,-4.41217 8.423986,-3.53321 13.921828,-0.87704 3.925065,1.89631 5.558855,-5.79126 9.263452,-5.06552 1.325352,0.25964 4.337931,2.14808 4.351477,3.80797 0.02038,2.49776 1.237307,2.30026 2.308278,2.69504 1.447545,0.53361 4.472084,-0.36093 6.8189,-1.68947 1.777277,-1.00611 5.852269,-0.2417 5.57069,1.27773 -1.404478,7.5787 -11.002374,-0.14252 -12.223223,17.85398 l -1.720228,9.48169 c 10.81997,0.36911 -31.1402,0.18326 -33.553095,0.18296 z"
+         id="path3834-5-6-36"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccsscsssssscccc" />
+      <path
+         style="fill:#ff6200;fill-opacity:1;fill-rule:evenodd;stroke:none"
+         d="m 25.193947,299.95293 c -0.0018,-6.39776 0.689282,-10.36704 -0.362741,-15.09115 -0.126835,-7.63655 -4.283101,-8.34605 -4.726661,-10.4801 -0.924185,-4.4464 -1.773422,0.7313 -0.125778,-2.43508 1.251523,-2.40513 4.045474,5.49784 8.933702,6.51591 5.419753,-3.60631 9.137458,-2.51336 14.000999,-0.34233 3.472219,1.54996 4.542987,-3.60992 7.820175,-3.01673 1.172441,0.21221 3.462924,1.00667 3.474907,2.36339 0.01802,2.04156 1.094556,2.06741 2.041966,2.39007 1.280537,0.43616 2.832546,-3.47848 4.908603,-4.56437 1.572227,-0.82235 2.876194,-1.77222 2.306295,-0.64101 -2.366019,4.69637 -5.987729,2.69246 -7.067726,17.40198 l -1.52176,7.7499 c 9.571639,0.30169 -27.547467,0.14979 -29.681981,0.14954 z"
+         id="path3834-5-6-36-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccsscsssssscccc" />
+    </g>
+  </g>
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/Watermelon.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/Watermelon.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   width="330"
+   height="380"
+   sodipodi:docname="Watermelon.svg"
+   inkscape:export-filename="/home/alumno/Watermelon.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="576"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="1.2421053"
+     inkscape:cx="205.80343"
+     inkscape:cy="202.92468"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <g
+     id="g4067"
+     transform="matrix(1.0009098,0,0,1,-0.01662335,0)">
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path3846"
+       d="M 21.16176,304.90446 C 79.192603,199.15863 79.320882,201.26339 155.45626,63.017853 c 0,0 39.67701,-5.551263 42.63457,0.354572 36.04224,84.574805 37.29601,87.965105 101.09507,236.310815 -48.58642,56.96906 -291.41475,35.09134 -278.024141,5.22121 z"
+       style="fill:#ea0000;fill-opacity:1;fill-rule:evenodd;stroke:#9e1e00;stroke-width:4.1789999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       sodipodi:nodetypes="ccsccc"
+       inkscape:connector-curvature="0"
+       id="path3866-6"
+       d="m 157.39382,64.105403 c 2.84301,-1.024045 36.6574,-4.26847 41.38895,-1.733055 3.01899,1.617656 11.03073,25.264922 51.1483,119.135242 27.33564,63.96217 50.86987,116.7313 50.89689,117.77572 0.14494,5.56099 -23.08054,19.2874 -44.96726,25.54942 C 235.56204,225.55549 195.46747,140.34641 157.39382,64.105403 z"
+       style="opacity:0.49800002;fill:#e2e3db;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       sodipodi:nodetypes="cccccscccc"
+       inkscape:connector-curvature="0"
+       id="path3016"
+       d="m 130.1346,338.21986 c -29.49569,-1.30665 -62.692724,-5.33246 -88.484704,-14.00661 -13.892079,-4.86676 -22.58368,-12.389 -21.622294,-16.51372 2.552584,-6.17739 2.011312,-5.0554 7.8672,-15.76023 80.814378,32.39629 140.992688,28.35017 218.801108,7.41858 0.78617,-0.15815 7.91845,-0.53857 19.49563,-6.677 9.7244,-5.15605 23.77009,-12.70268 24.79453,-12.63676 6.17219,12.94032 6.29945,13.67306 10.3437,19.90908 -7.60478,11.45407 -29.21256,20.63481 -45.73155,25.82614 -38.40429,11.3478 -92.39878,13.95855 -125.46362,12.44052 z"
+       style="fill:#a3ff3d;fill-opacity:1;fill-rule:evenodd;stroke:#008200;stroke-width:3.36641192;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       sodipodi:nodetypes="ccsccc"
+       inkscape:connector-curvature="0"
+       id="path3866"
+       d="m 155.41075,63.626026 c 2.84301,-1.024045 36.65739,-4.268469 41.38895,-1.733055 3.01898,1.617657 11.03073,25.264923 51.14829,119.135239 27.33565,63.96217 50.86987,116.7313 50.8969,117.77571 0.14494,5.561 -23.08055,19.2874 -44.96727,25.54942 C 233.57896,225.07611 193.4844,139.86704 155.41075,63.626026 z"
+       style="opacity:0.49800002;fill:#ff5555;fill-opacity:1;fill-rule:evenodd;stroke:#9e1e00;stroke-width:3.36641192;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path3836"
+       d="m 254.18308,326.22044 c -0.81393,-3.86474 -1.49705,-12.4723 -5.98386,-27.0405 19.92422,-9.22497 20.27979,-9.7719 41.68233,-22.15942 2.17558,5.55195 8.93128,18.53558 11.3554,22.98857 0.0787,0.2861 -7.34861,9.49354 -17.73467,14.34728 -12.93589,6.90227 -25.30393,11.09865 -29.3192,11.86407 z"
+       style="opacity:0.91397861;fill:#99ff55;fill-opacity:1;fill-rule:evenodd;stroke:#008200;stroke-width:3.36641192;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path3016-1"
+       d="m 130.6765,338.82657 c -29.48675,-0.83955 -64.157215,-7.80493 -89.905333,-14.1916 -20.141557,-5.74449 -23.484138,-14.98988 -17.869072,-22.78129 74.099538,37.91124 156.369735,33.30432 228.166585,14.327 2.09032,5.93688 1.61619,9.52952 1.91745,9.94844 -38.45505,8.70038 -89.25508,13.67857 -122.30963,12.69745 z"
+       style="fill:#008200;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path3836-8"
+       d="m 255.5856,324.30115 c -0.79061,-2.64831 -0.62017,-1.57929 -1.85209,-8.97896 17.28722,-7.39585 22.18956,-8.88175 42.1268,-22.20468 2.14196,3.79844 1.34711,2.77666 3.36035,6.67271 -2.0962,2.98757 -5.06544,6.63137 -14.65868,12.18729 -12.37988,6.86736 -24.95698,11.77402 -28.97638,12.32364 z"
+       style="opacity:0.91397861;fill:#009100;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       sodipodi:nodetypes="ccsccscsssccc"
+       inkscape:connector-curvature="0"
+       id="path4300"
+       d="M 287.88498,306.91447 C 263.19743,260.46929 248.01975,203.20913 230.0716,160.95809 220.57806,138.63452 202.75696,104.75545 188.37582,75.646776 l -21.83006,-11.253711 18.80525,-1.405653 c 5.07392,-0.03467 8.27847,-0.11547 10.19087,0.490056 0.78187,0.247543 1.11402,1.577898 1.73412,2.485702 1.14479,2.216137 9.68241,22.297237 18.59243,43.73076 12.28631,29.55527 32.10044,76.03877 53.29087,125.0189 12.29435,28.41753 23.97997,54.57522 25.8858,57.88051 l 4.18218,7.25317 c -1.61883,3.04764 -9.50074,9.16182 -10.12146,9.15079 z"
+       style="opacity:0.28999999;fill:#ffd5d5;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       sodipodi:nodetypes="csccssc"
+       inkscape:connector-curvature="0"
+       id="path4324-3-3-7"
+       d="M 97.379797,336.8774 C 86.523,335.2669 48.937505,329.8389 42.3935,326.58443 33.942272,322.38106 18.984981,315.99933 18.495824,307.57188 17.944787,305.18361 43.475302,266.00098 134.04434,98.123201 c 2.77103,-1.479598 6.77679,-0.833882 3.74816,3.154899 -6.10802,8.04447 -18.53627,38.4123 -30.29404,72.7588 -22.498625,65.7224 -13.789881,142.34249 -10.118663,162.8405 z"
+       style="opacity:0.22999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <g
+       id="g3260">
+      <path
+         sodipodi:type="arc"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path8533-2"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(-5.8199827,1.3156875,1.2680928,3.9270891,306.66538,-39.969783)" />
+      <path
+         style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 138.82052,172.60263 c 0.92585,-3.05699 -0.0898,-7.39736 -1.84206,-11.563 -2.17162,-5.16257 -6.06788,-9.02073 -8.77101,-6.0901 -0.2495,0.27046 -0.19417,0.66253 -0.44027,1.03343 7.75195,5.62701 8.23658,20.5463 11.05334,16.61967 z"
+         id="path3801-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path8533-2-7"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(-3.9406429,-4.6066071,-2.7242581,3.0386962,419.01701,263.10664)" />
+      <path
+         style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 156.88808,214.58954 c 3.04823,-0.64244 6.24627,-3.6534 8.9386,-7.24332 3.33671,-4.44917 4.72801,-9.82174 0.92551,-10.84112 -0.35094,-0.094 -0.65751,0.14486 -1.09217,0.10245 -1.02585,9.69959 -13.47642,17.34119 -8.77194,17.98191 z"
+         id="path3801-5-8"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path8533-2-77"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(-5.8661423,-1.0916073,1.116613,-3.9728155,357.88556,345.64936)" />
+      <path
+         style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 182.01497,139.66765 c 1.04236,3.01924 0.19381,7.39538 -1.39742,11.62511 -1.97211,5.24204 -5.71762,9.24672 -8.53109,6.42188 -0.25969,-0.2607 -0.21944,-0.6546 -0.47957,-1.0158 7.53053,-5.92005 7.44287,-20.84694 10.40808,-17.03119 z"
+         id="path3801-5-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path8533-2-3"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(5.8661423,1.0916073,-1.116613,3.9728155,-87.196134,40.736602)" />
+      <path
+         style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 88.674466,246.7183 c -1.042368,-3.01923 -0.193815,-7.39536 1.397422,-11.62509 1.972109,-5.24205 5.717614,-9.24674 8.53108,-6.4219 0.259699,0.26071 0.219447,0.65462 0.47958,1.01581 -7.530537,5.92004 -7.442869,20.84695 -10.408082,17.03118 z"
+         id="path3801-5-2"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path8533-2-7-4"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(3.7611487,-4.7542881,2.8387461,2.9320262,-115.01541,334.61757)" />
+      <path
+         style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 145.06089,276.08726 c -3.07061,-0.52511 -6.38173,-3.41127 -9.20971,-6.89533 -3.5048,-4.318 -5.10104,-9.63327 -1.34042,-10.79768 0.34708,-0.10742 0.66259,0.11994 1.09531,0.0605 1.39691,9.65313 14.13128,16.81182 9.45481,17.6324 z"
+         id="path3801-5-8-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="path8533-2-7-4-5"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(3.7611487,-4.7542881,2.8387461,2.9320262,-53.119343,314.93041)" />
+      <path
+         style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 206.95695,256.40009 c -3.07057,-0.52512 -6.38172,-3.41126 -9.2097,-6.89532 -3.50477,-4.318 -5.10105,-9.63328 -1.34041,-10.79768 0.3471,-0.10742 0.6626,0.11954 1.09533,0.0605 1.39692,9.65314 14.13128,16.81182 9.45478,17.63241 z"
+         id="path3801-5-8-0-9"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+         id="path8533-2-77-7"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(-7.721515,-1.1643855,1.4879863,-4.3355191,414.38136,361.90062)" />
+      <path
+         style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 183.64004,138.13151 c 1.35974,3.28667 0.22307,8.06067 -1.89117,12.67829 -2.62028,5.72279 -7.57092,10.1045 -11.26425,7.03746 -0.34082,-0.28316 -0.28633,-0.71261 -0.62719,-1.10518 9.94418,-6.48609 9.89374,-22.75712 13.78261,-18.61057 z"
+         id="path3801-5-5-9"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+         id="path8533-2-77-7-5"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(7.6712015,-1.4595392,-1.6530977,-4.2752892,-96.517136,389.48274)" />
+      <path
+         style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 125.47623,157.03247 c -1.23274,3.33638 0.0861,8.06329 2.37582,12.59648 2.83773,5.61812 7.95271,9.80684 11.52571,6.60047 0.32972,-0.29602 0.25881,-0.72306 0.58439,-1.12842 -10.18556,-6.10012 -10.7589,-22.36111 -14.48592,-18.06853 z"
+         id="path3801-5-5-9-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+         id="path8533-2-77-7-0"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(7.0389454,-3.4572185,-2.6731564,-3.6891431,38.251181,525.81349)" />
+      <path
+         style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 194.0278,242.00418 c -0.34973,3.55223 2.11447,7.76686 5.46727,11.53527 4.15522,4.67029 10.14907,7.35196 12.79107,3.30081 0.24408,-0.37388 0.0675,-0.76757 0.28014,-1.24613 -11.37105,-3.17505 -16.02125,-18.73158 -18.53829,-13.58996 z"
+         id="path3801-5-5-9-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+         id="path8533-2-77-7-0-2"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(7.0389454,-3.4572185,-2.6731564,-3.6891431,-24.792104,544.64346)" />
+      <path
+         style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 130.98447,260.83414 c -0.34969,3.55223 2.11452,7.76687 5.46729,11.53528 4.15525,4.67028 10.14908,7.35196 12.7911,3.3008 0.24408,-0.37387 0.0675,-0.76756 0.28012,-1.24614 -11.37104,-3.17504 -16.02123,-18.73156 -18.53832,-13.58995 z"
+         id="path3801-5-5-9-3-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+         id="path8533-2-77-7-0-2-5"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(-7.1663061,-3.1848343,2.5297656,-3.7889086,337.21841,476.64219)" />
+      <path
+         style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 170.67632,199.01329 c 0.48563,3.53622 -1.81521,7.84222 -5.02105,11.73638 -3.97317,4.82615 -9.85976,7.73564 -12.65516,3.78875 -0.25786,-0.36426 -0.0969,-0.76442 -0.32771,-1.23449 11.24101,-3.60863 15.29139,-19.33197 18.00372,-14.29064 z"
+         id="path3801-5-5-9-3-7-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+         id="path8533-2-77-7-2"
+         sodipodi:cx="38.383335"
+         sodipodi:cy="39.279999"
+         sodipodi:rx="0.86166668"
+         sodipodi:ry="2.7416666"
+         d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+         transform="matrix(-7.721515,-1.1643855,1.4879863,-4.3355191,332.03828,452.96841)" />
+      <path
+         style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none"
+         d="m 101.29696,229.19929 c 1.35974,3.28667 0.22307,8.06067 -1.891171,12.6783 -2.620282,5.72277 -7.570919,10.1045 -11.264252,7.03745 -0.340815,-0.28316 -0.286333,-0.71259 -0.627181,-1.10518 9.944171,-6.48608 9.893723,-22.7571 13.782604,-18.61057 z"
+         id="path3801-5-5-9-5"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="csscc" />
+      <g
+         id="g3916"
+         transform="matrix(1.1059245,-0.02120599,0.02182428,1.1381693,-21.956204,17.765538)">
+        <path
+           transform="matrix(-5.194422,-1.432084,-0.59815551,3.584494,456.19379,78.176358)"
+           d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+           sodipodi:ry="2.7416666"
+           sodipodi:rx="0.86166668"
+           sodipodi:cy="39.279999"
+           sodipodi:cx="38.383335"
+           id="path8533-2-3-4"
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:nodetypes="csscc"
+           inkscape:connector-curvature="0"
+           id="path3801-5-2-5"
+           d="m 234.69635,172.49498 c 1.99545,-1.98372 2.96512,-5.78277 3.27406,-9.75663 0.38283,-4.92494 -1.14908,-9.56402 -4.51393,-8.42776 -0.31058,0.10485 -0.4273,0.43266 -0.77637,0.61694 3.88912,7.63845 -1.8484,19.42931 2.01624,17.56745 z"
+           style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none" />
+        <path
+           transform="matrix(6.7339091,2.1008916,0.43321785,-4.0172396,-41.900207,240.59956)"
+           d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+           sodipodi:ry="2.7416666"
+           sodipodi:rx="0.86166668"
+           sodipodi:cy="39.279999"
+           sodipodi:cx="38.383335"
+           id="path8533-2-77-7-2-2"
+           style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:nodetypes="csscc"
+           inkscape:connector-curvature="0"
+           id="path3801-5-5-9-5-8"
+           d="m 231.06086,153.67403 c -2.35558,2.07132 -3.24149,6.29838 -3.27151,10.78431 -0.0372,5.55958 2.33366,10.96921 6.50741,9.98558 0.3852,-0.0909 0.50382,-0.45241 0.93057,-0.62996 -5.64102,-9.03192 0.57638,-21.90217 -4.16647,-20.13993 z"
+           style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none" />
+        <path
+           inkscape:transform-center-y="6.8275839"
+           inkscape:transform-center-x="-0.26748628"
+           transform="matrix(5.194422,-1.432084,0.59815551,3.584494,-15.781326,34.350269)"
+           d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+           sodipodi:ry="2.7416666"
+           sodipodi:rx="0.86166668"
+           sodipodi:cy="39.279999"
+           sodipodi:cx="38.383335"
+           id="path8533-2-3-4-6"
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+        <path
+           inkscape:transform-center-y="6.2348523"
+           inkscape:transform-center-x="1.7675182"
+           sodipodi:nodetypes="csscc"
+           inkscape:connector-curvature="0"
+           id="path3801-5-2-5-3"
+           d="m 205.71611,128.6689 c -1.99545,-1.98372 -2.96512,-5.78277 -3.27406,-9.75663 -0.38283,-4.92494 1.14908,-9.56402 4.51393,-8.42776 0.31058,0.10485 0.4273,0.43266 0.77637,0.61694 -3.88912,7.63845 1.8484,19.42931 -2.01624,17.56745 z"
+           style="opacity:0.13999999;fill:#ffffff;fill-opacity:1;stroke:none" />
+        <path
+           inkscape:transform-center-y="6.2620898"
+           transform="matrix(-6.7339091,2.1008916,-0.43321785,-4.0172396,482.31266,196.77348)"
+           d="m 39.245002,39.279999 c 0,1.51418 -0.385782,2.741666 -0.861667,2.741666 -0.475885,0 -0.861667,-1.227486 -0.861667,-2.741666 0,-1.514181 0.385782,-2.741667 0.861667,-2.741667 0.475885,0 0.861667,1.227486 0.861667,2.741667 z"
+           sodipodi:ry="2.7416666"
+           sodipodi:rx="0.86166668"
+           sodipodi:cy="39.279999"
+           sodipodi:cx="38.383335"
+           id="path8533-2-77-7-2-2-8"
+           style="opacity:0.11000001;fill:#ffffff;fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+        <path
+           inkscape:transform-center-y="6.8559754"
+           inkscape:transform-center-x="-2.0783619"
+           sodipodi:nodetypes="csscc"
+           inkscape:connector-curvature="0"
+           id="path3801-5-5-9-5-8-5"
+           d="m 209.3516,109.84795 c 2.35558,2.07132 3.24149,6.29838 3.27151,10.78431 0.0372,5.55958 -2.33366,10.96921 -6.50741,9.98558 -0.3852,-0.0909 -0.50382,-0.45241 -0.93057,-0.62996 5.64102,-9.03192 -0.57638,-21.90217 4.16647,-20.13993 z"
+           style="opacity:0.01540001;fill:#ffffff;fill-opacity:1;stroke:none" />
+      </g>
+    </g>
+    <path
+       sodipodi:nodetypes="csscssc"
+       inkscape:connector-curvature="0"
+       id="path4324-3-3"
+       d="m 151.68608,340.36278 c -3.88672,-0.98839 -49.89593,0.0178 -53.096146,-3.55068 -9.560172,-10.66043 -5.926707,-69.64748 -3.526383,-99.59695 5.813229,-72.53316 32.358169,-107.28524 35.328259,-123.68635 1.57027,-1.81852 4.11171,3.50037 2.6094,7.72918 -3.02982,8.52856 -13.21211,34.68085 -17.34321,68.92223 -7.90489,65.52124 30.49617,133.81434 36.02808,150.18257 z"
+       style="opacity:0.13980001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:connector-curvature="0"
+       id="path4065"
+       d="m 246.44092,298.29719 c 4.77968,-0.93282 12.21599,-4.51421 21.58491,-9.9264 18.51184,-10.69424 4.24552,-3.5196 21.90139,-13.4431 8.22485,10.62851 10.61617,19.74684 12.98654,25.28297 -3.63314,11.56373 -49.73924,31.94783 -48.77382,26.07618 -3.77558,-13.95519 -6.36858,-20.30775 -7.69902,-27.98965 z"
+       style="opacity:0.13980001;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+  </g>
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/Watermelon_mask.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/amSnowball.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/amSnowball.svg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   width="128"
+   height="128"
+   sodipodi:docname="amSnowball.svg"
+   inkscape:export-filename="/home/alumno/amSnowball.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="576"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="3.6875"
+     inkscape:cx="64"
+     inkscape:cy="74.847458"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <g
+     id="g3142"
+     transform="matrix(0.97742508,0,0,1,1.4010943,0)">
+    <path
+       inkscape:connector-curvature="0"
+       id="path3042-5-9"
+       d="m 72.669985,69.529726 c -3.145615,-0.545235 -6.42249,-2.890076 -7.857041,-5.622279 -2.153306,-4.101119 -1.281836,-8.75168 2.238774,-11.947152 4.341942,-3.940947 11.319436,-3.916319 15.69527,0.05542 2.276723,2.066462 3.362698,4.488259 3.342379,7.453728 -0.04453,6.493099 -6.420873,11.273368 -13.419382,10.060305 z"
+       style="opacity:0.98999999;fill:#572503;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3042-5"
+       d="m 72.074486,68.809188 c -3.09694,-0.567087 -6.323115,-3.005907 -7.735469,-5.847611 -2.119987,-4.265488 -1.262002,-9.102438 2.204136,-12.425982 4.274754,-4.098893 11.144289,-4.073279 15.452411,0.05764 2.241505,2.14928 3.310668,4.668144 3.290664,7.752461 -0.04387,6.753336 -6.321516,11.725191 -13.211742,10.463512 z"
+       style="opacity:0.98999999;fill:#d55703;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3042"
+       d="m 72.905865,68.276034 c -2.852123,-0.514902 -5.823256,-2.729293 -7.123962,-5.3095 -1.952396,-3.872965 -1.162237,-8.264804 2.029895,-11.282508 3.936826,-3.721701 10.263302,-3.698445 14.230855,0.05233 2.064304,1.951499 3.048953,4.238569 3.030526,7.039063 -0.04043,6.131874 -5.821789,10.646207 -12.167314,9.50063 z"
+       style="opacity:0.98999999;fill:#fe6600;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       sodipodi:nodetypes="ssssss"
+       inkscape:connector-curvature="0"
+       id="path3044"
+       d="m 68.982076,51.717606 c 0.861953,-1.131965 3.213824,-1.87446 4.576469,-1.991795 2.584283,-0.222525 3.623455,0.924895 3.925261,1.57017 0.477735,1.021442 -1.42965,1.434157 -3.365277,1.63189 -0.912988,0.09327 -1.806892,0.862345 -2.209507,1.308315 -2.821253,3.125022 -5.607197,1.001252 -2.926946,-2.51858 z"
+       style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+    <path
+       transform="matrix(2.6350423,0,0,2.2478717,-126.91421,-91.700602)"
+       d="m 75.073167,70.232971 c 0,0.97962 -0.751213,1.77376 -1.67788,1.77376 -0.926668,0 -1.677881,-0.79414 -1.677881,-1.77376 0,-0.97962 0.751213,-1.773759 1.677881,-1.773759 0.926667,0 1.67788,0.794139 1.67788,1.773759 z"
+       sodipodi:ry="1.7737594"
+       sodipodi:rx="1.6778805"
+       sodipodi:cy="70.232971"
+       sodipodi:cx="73.395287"
+       id="path3100-1"
+       style="fill:#a3086a;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(1.5536423,0,0,1.4518088,-47.784407,-35.849202)"
+       d="m 75.073167,70.232971 c 0,0.97962 -0.751213,1.77376 -1.67788,1.77376 -0.926668,0 -1.677881,-0.79414 -1.677881,-1.77376 0,-0.97962 0.751213,-1.773759 1.677881,-1.773759 0.926667,0 1.67788,0.794139 1.67788,1.773759 z"
+       sodipodi:ry="1.7737594"
+       sodipodi:rx="1.6778805"
+       sodipodi:cy="70.232971"
+       sodipodi:cx="73.395287"
+       id="path3100"
+       style="fill:#f49ee9;fill-opacity:1;fill-rule:evenodd;stroke:#db2efe;stroke-width:0.40000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+  </g>
+</svg>
Binary file share/hedgewars/Data/Themes/Fruit/horizont.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/icon.png has changed
Binary file share/hedgewars/Data/Themes/Fruit/icon@2x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Themes/Fruit/theme.cfg	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,13 @@
+sky = 50, 40, 131
+border = 0, 128, 0
+water-top = 255, 98, 0
+water-bottom = 255, 68, 0
+water-opacity = 125
+music = oriental.ogg
+clouds = 20
+object = Orange1, 1, 50, 84, 15, 3, 1, 8, 2, 90, 73
+object = Orange2, 1, 50, 84, 15, 3, 1, 8, 2, 90, 73
+object = Watermelon, 1, 87, 272, 77, 10, 1, 21, 2, 242, 219
+object = Banana1, 1, 152, 191, 37, 24, 1, 2, 1, 163, 174
+object = Banana2, 1, 1, 190, 37, 24, 1, 22, 0, 163, 174
+flakes = 20, 3, 999999999, 100, 260
--- a/share/hedgewars/Data/misc/hedgewars-mimeinfo.xml	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/misc/hedgewars-mimeinfo.xml	Thu Jun 13 22:27:23 2013 +0200
@@ -18,6 +18,7 @@
     <comment xml:lang="cs">Ukázka hry Hedgewars</comment>
     <comment xml:lang="sv">Demo för Hedgewars</comment>
     <comment xml:lang="da">Hedgewars-demo</comment>
+    <comment xml:lang="tr">Hedgewars Dösteri</comment>
     <magic priority="50">
       <match required="yes" type="byte" offset="0" value="2"/>
       <match required="yes" type="big16" offset="1" value="21572"/>
@@ -39,10 +40,21 @@
     <comment xml:lang="cs">Uložená hra Hedgewars</comment>
     <comment xml:lang="sv">Sparfil för Hedgewars</comment>
     <comment xml:lang="da">Gemt Hedgewars-spil</comment>
+    <comment xml:lang="tr">Hedgewars kayıtlı oyun</comment>
     <magic priority="50">
       <match required="yes" type="byte" offset="0" value="2"/>
       <match required="yes" type="big16" offset="1" value="21587"/>
     </magic>
     <glob weight="60" pattern="*.hws"/>
   </mime-type>
+  <mime-type type="x-scheme-handler/hwplay">
+    <icon name="hedgewars" />
+    <!--<generic-icon name="applications-games"/>-->
+    <comment>Hedgewars ServerAccess Scheme</comment>
+    <magic priority="50">
+      <match required="yes" type="byte" offset="0" value="2"/>
+      <match required="yes" type="big16" offset="1" value="21587"/>
+    </magic>
+    <glob weight="60" pattern="hwplay://*"/>
+  </mime-type>
 </mime-info>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/misc/hedgewars.desktop	Thu Jun 13 22:27:23 2013 +0200
@@ -0,0 +1,24 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Name=Hedgewars
+GenericName=Fighting Hedgehogs
+GenericName[de]=Kämpfende Igel
+GenericName[es]=Batallas entre erizos
+GenericName[fr]=Bataille de hérissons
+GenericName[ko]=고슴도치 싸우기
+GenericName[ja]=ファイチングハリネズミ
+GenericName[it]=Ricci combattenti
+GenericName[pl]=Walczące jeże
+GenericName[pt]=Batalhas entre ouriços
+GenericName[ru]=Битвы ежей
+GenericName[sk]=Bojujúci ježkovia
+GenericName[cs]=Bojující ježci
+GenericName[sv]=Stridande igelkottar
+GenericName[tr]=Dövüşen Kirpiler
+Icon=hedgewars.png
+Exec=hedgewars %U
+Terminal=false
+StartupNotify=false
+Categories=Application;Game;StrategyGame;
+MimeType=x-scheme-handler/hwplay
--- a/share/hedgewars/Data/misc/hwengine.desktop.in	Tue Apr 30 01:47:30 2013 +0200
+++ b/share/hedgewars/Data/misc/hwengine.desktop.in	Thu Jun 13 22:27:23 2013 +0200
@@ -1,7 +1,6 @@
 [Desktop Entry]
 Type=Application
 Version=1.0
-Encoding=UTF-8
 Name=Hedgewars Engine
 GenericName=Hedgewars engine, for playback of saves and demos
 GenericName[de]=Hedgewars engine, für die Wiedergabe von gespeicherten Spielen und Demos
@@ -13,6 +12,7 @@
 GenericName[pt]=Motor de jogo Hedgewars, para reprodução de jogos guardados e demos
 GenericName[ru]=Движок Hedgewars для проигрывания сохранённых игр и демок
 GenericName[sk]=Engine hry Hedgewars, pre prehrávanie uložených hier a demo súborov
+GenericName[tr]=Kayıtların ve gösterilerin oynatılması için Hedgewars motoru
 GenericName[cs]=Engine hry Hedgewars pro přehrávání uložených her a ukázkových souborů
 GenericName[sv]=Hedgewarsmotorn, för att öppna demo- och sparfiler
 GenericName[da]=Kæmpende Pindsvin
--- a/tools/CMakeLists.txt	Tue Apr 30 01:47:30 2013 +0200
+++ b/tools/CMakeLists.txt	Thu Jun 13 22:27:23 2013 +0200
@@ -33,6 +33,7 @@
     if(NOT NOPNG)
         #get the neme of the library (harmelss if it is static)
         string(REGEX REPLACE ".*/(.*)$" "\\1" PNG_LIBNAME "${PNG_LIBRARY}")
+        string(REGEX REPLACE ".*/(.*)$" "\\1" ZLIB_LIBNAME "${ZLIB_LIBRARY}")
     endif()
 
     set(frameworks_dir ${CMAKE_INSTALL_PREFIX}/${target_library_install_dir})
--- a/tools/CreateMacBundle.cmake.in	Tue Apr 30 01:47:30 2013 +0200
+++ b/tools/CreateMacBundle.cmake.in	Thu Jun 13 22:27:23 2013 +0200
@@ -16,6 +16,7 @@
     #same here, for libpng and hwengine, let's assume the version pulled by macdeployqt is the same
     #(yes libpng is pulled by macdeployqt even when NOVIDEOREC is active)
     execute_process(COMMAND install_name_tool -change ${PNG_LIBRARY} @executable_path/../Frameworks/${PNG_LIBNAME} ${engine_full_path})
+    execute_process(COMMAND install_name_tool -change ${ZLIB_LIBRARY} @executable_path/../Frameworks/${ZLIB_LIBNAME} ${engine_full_path})
 endif()
 
 if(doBundle EQUAL 1)
--- a/tools/PascalBasics.hs	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-{-# LANGUAGE FlexibleContexts #-}
-module PascalBasics where
-
-import Text.Parsec.Combinator
-import Text.Parsec.Char
-import Text.Parsec.Prim
-import Text.Parsec.Token
-import Text.Parsec.Language
-import Data.Char
-
-builtin = ["succ", "pred", "low", "high", "ord", "inc", "dec", "exit", "break", "continue", "length"]
-
-pascalLanguageDef
-    = emptyDef
-    { commentStart   = "(*"
-    , commentEnd     = "*)"
-    , commentLine    = "//"
-    , nestedComments = False
-    , identStart     = letter <|> oneOf "_"
-    , identLetter    = alphaNum <|> oneOf "_"
-    , reservedNames  = [
-            "begin", "end", "program", "unit", "interface"
-            , "implementation", "and", "or", "xor", "shl"
-            , "shr", "while", "do", "repeat", "until", "case", "of"
-            , "type", "var", "const", "out", "array", "packed"
-            , "procedure", "function", "with", "for", "to"
-            , "downto", "div", "mod", "record", "set", "nil"
-            , "cdecl", "external", "if", "then", "else"
-            ] -- ++ builtin
-    , reservedOpNames= []
-    , caseSensitive  = False
-    }
-
-preprocessorSwitch :: Stream s m Char => ParsecT s u m String
-preprocessorSwitch = do
-    try $ string "{$"
-    s <- manyTill (noneOf "\n") $ char '}'
-    return s
-
-caseInsensitiveString s = do
-    mapM_ (\a -> satisfy (\b -> toUpper a == toUpper b)) s <?> s
-    return s
-
-pas = patch $ makeTokenParser pascalLanguageDef
-    where
-    patch tp = tp {stringLiteral = stringL}
-
-comment = choice [
-        char '{' >> notFollowedBy (char '$') >> manyTill anyChar (try $ char '}')
-        , (try $ string "(*") >> manyTill anyChar (try $ string "*)")
-        , (try $ string "//") >> manyTill anyChar (try newline)
-        ]
-
-comments = do
-    spaces
-    skipMany $ do
-        preprocessorSwitch <|> comment
-        spaces
-
-stringL = do
-    (char '\'')
-    s <- (many $ noneOf "'")
-    (char '\'')
-    ss <- many $ do
-        (char '\'')
-        s' <- (many $ noneOf "'")
-        (char '\'')
-        return $ '\'' : s'
-    comments
-    return $ concat (s:ss)
--- a/tools/PascalParser.hs	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,659 +0,0 @@
-module PascalParser where
-
-import Text.Parsec
-import Text.Parsec.Char
-import Text.Parsec.Token
-import Text.Parsec.Language
-import Text.Parsec.Expr
-import Text.Parsec.Prim
-import Text.Parsec.Combinator
-import Text.Parsec.String
-import Control.Monad
-import Data.Maybe
-import Data.Char
-
-import PascalBasics
-import PascalUnitSyntaxTree
-
-knownTypes = ["shortstring", "ansistring", "char", "byte"]
-
-pascalUnit = do
-    comments
-    u <- choice [program, unit, systemUnit, redoUnit]
-    comments
-    return u
-
-iD = do
-    i <- liftM (flip Identifier BTUnknown) (identifier pas)
-    comments
-    return i
-
-unit = do
-    string "unit" >> comments
-    name <- iD
-    semi pas
-    comments
-    int <- interface
-    impl <- implementation
-    comments
-    return $ Unit name int impl Nothing Nothing
-
-
-reference = buildExpressionParser table term <?> "reference"
-    where
-    term = comments >> choice [
-        parens pas (liftM RefExpression expression >>= postfixes) >>= postfixes
-        , try $ typeCast >>= postfixes
-        , char '@' >> liftM Address reference >>= postfixes
-        , liftM SimpleReference iD >>= postfixes
-        ] <?> "simple reference"
-
-    table = [
-        ]
-
-    postfixes r = many postfix >>= return . foldl (flip ($)) r
-    postfix = choice [
-            parens pas (option [] parameters) >>= return . FunCall
-          , char '^' >> return Dereference
-          , (brackets pas) (commaSep1 pas $ expression) >>= return . ArrayElement
-          , (char '.' >> notFollowedBy (char '.')) >> liftM (flip RecordField) reference
-        ]
-
-    typeCast = do
-        t <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) knownTypes
-        e <- parens pas expression
-        comments
-        return $ TypeCast (Identifier t BTUnknown) e
-
-varsDecl1 = varsParser sepEndBy1
-varsDecl = varsParser sepEndBy
-varsParser m endsWithSemi = do
-    vs <- m (aVarDecl endsWithSemi) (semi pas)
-    return vs
-
-aVarDecl endsWithSemi = do
-    isVar <- liftM (== Just "var") $
-        if not endsWithSemi then
-            optionMaybe $ choice [
-                try $ string "var"
-                , try $ string "const"
-                , try $ string "out"
-                ]
-            else
-                return Nothing
-    comments
-    ids <- do
-        i <- (commaSep1 pas) $ (try iD <?> "variable declaration")
-        char ':'
-        return i
-    comments
-    t <- typeDecl <?> "variable type declaration"
-    comments
-    init <- option Nothing $ do
-        char '='
-        comments
-        e <- initExpression
-        comments
-        return (Just e)
-    return $ VarDeclaration isVar False (ids, t) init
-
-
-constsDecl = do
-    vs <- many1 (try (aConstDecl >>= \i -> semi pas >> return i) >>= \i -> comments >> return i)
-    comments
-    return vs
-    where
-    aConstDecl = do
-        comments
-        i <- iD
-        t <- optionMaybe $ do
-            char ':'
-            comments
-            t <- typeDecl
-            comments
-            return t
-        char '='
-        comments
-        e <- initExpression
-        comments
-        return $ VarDeclaration False (isNothing t) ([i], fromMaybe (DeriveType e) t) (Just e)
-
-typeDecl = choice [
-    char '^' >> typeDecl >>= return . PointerTo
-    , try (string "shortstring") >> return (String 255)
-    , try (string "string") >> optionMaybe (brackets pas $ integer pas) >>= return . String . fromMaybe 255
-    , try (string "ansistring") >> optionMaybe (brackets pas $ integer pas) >>= return . String . fromMaybe 255
-    , arrayDecl
-    , recordDecl
-    , setDecl
-    , functionType
-    , sequenceDecl >>= return . Sequence
-    , try iD >>= return . SimpleType
-    , rangeDecl >>= return . RangeType
-    ] <?> "type declaration"
-    where
-    arrayDecl = do
-        try $ do
-            optional $ (try $ string "packed") >> comments
-            string "array"
-        comments
-        r <- option [] $ do
-            char '['
-            r <- commaSep pas rangeDecl
-            char ']'
-            comments
-            return r
-        string "of"
-        comments
-        t <- typeDecl
-        if null r then
-            return $ ArrayDecl Nothing t
-            else
-            return $ foldr (\a b -> ArrayDecl (Just a) b) (ArrayDecl (Just $ head r) t) (tail r)
-    recordDecl = do
-        try $ do
-            optional $ (try $ string "packed") >> comments
-            string "record"
-        comments
-        vs <- varsDecl True
-        union <- optionMaybe $ do
-            string "case"
-            comments
-            iD
-            comments
-            string "of"
-            comments
-            many unionCase
-        string "end"
-        return $ RecordType vs union
-    setDecl = do
-        try $ string "set" >> space
-        comments
-        string "of"
-        comments
-        liftM Set typeDecl
-    unionCase = do
-        try $ commaSep pas $ (iD >> return ()) <|> (integer pas >> return ())
-        char ':'
-        comments
-        u <- parens pas $ varsDecl True
-        char ';'
-        comments
-        return u
-    sequenceDecl = (parens pas) $ (commaSep pas) (iD >>= \i -> optional (spaces >> char '=' >> spaces >> integer pas) >> return i)
-    functionType = do
-        fp <- try (string "function") <|> try (string "procedure")
-        comments
-        vs <- option [] $ parens pas $ varsDecl False
-        comments
-        ret <- if (fp == "function") then do
-            char ':'
-            comments
-            ret <- typeDecl
-            comments
-            return ret
-            else
-            return VoidType
-        optional $ try $ char ';' >> comments >> string "cdecl"
-        comments
-        return $ FunctionType ret vs
-
-typesDecl = many (aTypeDecl >>= \t -> comments >> return t)
-    where
-    aTypeDecl = do
-        i <- try $ do
-            i <- iD <?> "type declaration"
-            comments
-            char '='
-            return i
-        comments
-        t <- typeDecl
-        comments
-        semi pas
-        comments
-        return $ TypeDeclaration i t
-
-rangeDecl = choice [
-    try $ rangeft
-    , iD >>= return . Range
-    ] <?> "range declaration"
-    where
-    rangeft = do
-    e1 <- initExpression
-    string ".."
-    e2 <- initExpression
-    return $ RangeFromTo e1 e2
-
-typeVarDeclaration isImpl = (liftM concat . many . choice) [
-    varSection,
-    constSection,
-    typeSection,
-    funcDecl,
-    operatorDecl
-    ]
-    where
-    varSection = do
-        try $ string "var"
-        comments
-        v <- varsDecl1 True <?> "variable declaration"
-        comments
-        return v
-
-    constSection = do
-        try $ string "const"
-        comments
-        c <- constsDecl <?> "const declaration"
-        comments
-        return c
-
-    typeSection = do
-        try $ string "type"
-        comments
-        t <- typesDecl <?> "type declaration"
-        comments
-        return t
-
-    operatorDecl = do
-        try $ string "operator"
-        comments
-        i <- manyTill anyChar space
-        comments
-        vs <- parens pas $ varsDecl False
-        comments
-        rid <- iD
-        comments
-        char ':'
-        comments
-        ret <- typeDecl
-        comments
-        return ret
-        char ';'
-        comments
-        forward <- liftM isJust $ optionMaybe (try (string "forward;") >> comments)
-        inline <- liftM (any (== "inline;")) $ many functionDecorator
-        b <- if isImpl && (not forward) then
-                liftM Just functionBody
-                else
-                return Nothing
-        return $ [OperatorDeclaration i rid inline ret vs b]
-
-
-    funcDecl = do
-        fp <- try (string "function") <|> try (string "procedure")
-        comments
-        i <- iD
-        vs <- option [] $ parens pas $ varsDecl False
-        comments
-        ret <- if (fp == "function") then do
-            char ':'
-            comments
-            ret <- typeDecl
-            comments
-            return ret
-            else
-            return VoidType
-        char ';'
-        comments
-        forward <- liftM isJust $ optionMaybe (try (string "forward;") >> comments)
-        inline <- liftM (any (== "inline;")) $ many functionDecorator
-        b <- if isImpl && (not forward) then
-                liftM Just functionBody
-                else
-                return Nothing
-        return $ [FunctionDeclaration i inline ret vs b]
-
-    functionDecorator = do
-        d <- choice [
-            try $ string "inline;"
-            , try $ caseInsensitiveString "cdecl;"
-            , try $ string "overload;"
-            , try $ string "export;"
-            , try $ string "varargs;"
-            , try (string "external") >> comments >> iD >> optional (string "name" >> comments >> stringLiteral pas)>> string ";"
-            ]
-        comments
-        return d
-
-
-program = do
-    string "program"
-    comments
-    name <- iD
-    (char ';')
-    comments
-    comments
-    u <- uses
-    comments
-    tv <- typeVarDeclaration True
-    comments
-    p <- phrase
-    comments
-    char '.'
-    comments
-    return $ Program name (Implementation u (TypesAndVars tv)) p
-
-interface = do
-    string "interface"
-    comments
-    u <- uses
-    comments
-    tv <- typeVarDeclaration False
-    comments
-    return $ Interface u (TypesAndVars tv)
-
-implementation = do
-    string "implementation"
-    comments
-    u <- uses
-    comments
-    tv <- typeVarDeclaration True
-    string "end."
-    comments
-    return $ Implementation u (TypesAndVars tv)
-
-expression = do
-    buildExpressionParser table term <?> "expression"
-    where
-    term = comments >> choice [
-        builtInFunction expression >>= \(n, e) -> return $ BuiltInFunCall e (SimpleReference (Identifier n BTUnknown))
-        , try (parens pas $ expression >>= \e -> notFollowedBy (comments >> char '.') >> return e)
-        , brackets pas (commaSep pas iD) >>= return . SetExpression
-        , try $ integer pas >>= \i -> notFollowedBy (char '.') >> (return . NumberLiteral . show) i
-        , float pas >>= return . FloatLiteral . show
-        , try $ integer pas >>= return . NumberLiteral . show
-        , try (string "_S" >> stringLiteral pas) >>= return . StringLiteral
-        , try (string "_P" >> stringLiteral pas) >>= return . PCharLiteral
-        , stringLiteral pas >>= return . strOrChar
-        , try (string "#$") >> many hexDigit >>= \c -> comments >> return (HexCharCode c)
-        , char '#' >> many digit >>= \c -> comments >> return (CharCode c)
-        , char '$' >> many hexDigit >>=  \h -> comments >> return (HexNumber h)
-        --, char '-' >> expression >>= return . PrefixOp "-"
-        , char '-' >> reference >>= return . PrefixOp "-" . Reference
-        , (try $ string "not" >> notFollowedBy comments) >> unexpected "'not'"
-        , try $ string "nil" >> return Null
-        , reference >>= return . Reference
-        ] <?> "simple expression"
-
-    table = [
-          [  Prefix (try (string "not") >> return (PrefixOp "not"))
-           , Prefix (try (char '-') >> return (PrefixOp "-"))]
-        ,
-          [  Infix (char '*' >> return (BinOp "*")) AssocLeft
-           , Infix (char '/' >> return (BinOp "/")) AssocLeft
-           , Infix (try (string "div") >> return (BinOp "div")) AssocLeft
-           , Infix (try (string "mod") >> return (BinOp "mod")) AssocLeft
-           , Infix (try (string "in") >> return (BinOp "in")) AssocNone
-           , Infix (try $ string "and" >> return (BinOp "and")) AssocLeft
-           , Infix (try $ string "shl" >> return (BinOp "shl")) AssocLeft
-           , Infix (try $ string "shr" >> return (BinOp "shr")) AssocLeft
-          ]
-        , [  Infix (char '+' >> return (BinOp "+")) AssocLeft
-           , Infix (char '-' >> return (BinOp "-")) AssocLeft
-           , Infix (try $ string "or" >> return (BinOp "or")) AssocLeft
-           , Infix (try $ string "xor" >> return (BinOp "xor")) AssocLeft
-          ]
-        , [  Infix (try (string "<>") >> return (BinOp "<>")) AssocNone
-           , Infix (try (string "<=") >> return (BinOp "<=")) AssocNone
-           , Infix (try (string ">=") >> return (BinOp ">=")) AssocNone
-           , Infix (char '<' >> return (BinOp "<")) AssocNone
-           , Infix (char '>' >> return (BinOp ">")) AssocNone
-          ]
-        {-, [  Infix (try $ string "shl" >> return (BinOp "shl")) AssocNone
-             , Infix (try $ string "shr" >> return (BinOp "shr")) AssocNone
-          ]
-        , [
-             Infix (try $ string "or" >> return (BinOp "or")) AssocLeft
-           , Infix (try $ string "xor" >> return (BinOp "xor")) AssocLeft
-          ]-}
-        , [
-             Infix (char '=' >> return (BinOp "=")) AssocNone
-          ]
-        ]
-    strOrChar [a] = CharCode . show . ord $ a
-    strOrChar a = StringLiteral a
-
-phrasesBlock = do
-    try $ string "begin"
-    comments
-    p <- manyTill phrase (try $ string "end" >> notFollowedBy alphaNum)
-    comments
-    return $ Phrases p
-
-phrase = do
-    o <- choice [
-        phrasesBlock
-        , ifBlock
-        , whileCycle
-        , repeatCycle
-        , switchCase
-        , withBlock
-        , forCycle
-        , (try $ reference >>= \r -> string ":=" >> return r) >>= \r -> comments >> expression >>= return . Assignment r
-        , builtInFunction expression >>= \(n, e) -> return $ BuiltInFunctionCall e (SimpleReference (Identifier n BTUnknown))
-        , procCall
-        , char ';' >> comments >> return NOP
-        ]
-    optional $ char ';'
-    comments
-    return o
-
-ifBlock = do
-    try $ string "if" >> notFollowedBy (alphaNum <|> char '_')
-    comments
-    e <- expression
-    comments
-    string "then"
-    comments
-    o1 <- phrase
-    comments
-    o2 <- optionMaybe $ do
-        try $ string "else" >> space
-        comments
-        o <- option NOP phrase
-        comments
-        return o
-    return $ IfThenElse e o1 o2
-
-whileCycle = do
-    try $ string "while"
-    comments
-    e <- expression
-    comments
-    string "do"
-    comments
-    o <- phrase
-    return $ WhileCycle e o
-
-withBlock = do
-    try $ string "with" >> space
-    comments
-    rs <- (commaSep1 pas) reference
-    comments
-    string "do"
-    comments
-    o <- phrase
-    return $ foldr WithBlock o rs
-
-repeatCycle = do
-    try $ string "repeat" >> space
-    comments
-    o <- many phrase
-    string "until"
-    comments
-    e <- expression
-    comments
-    return $ RepeatCycle e o
-
-forCycle = do
-    try $ string "for" >> space
-    comments
-    i <- iD
-    comments
-    string ":="
-    comments
-    e1 <- expression
-    comments
-    up <- liftM (== Just "to") $
-            optionMaybe $ choice [
-                try $ string "to"
-                , try $ string "downto"
-                ]
-    --choice [string "to", string "downto"]
-    comments
-    e2 <- expression
-    comments
-    string "do"
-    comments
-    p <- phrase
-    comments
-    return $ ForCycle i e1 e2 p up
-
-switchCase = do
-    try $ string "case"
-    comments
-    e <- expression
-    comments
-    string "of"
-    comments
-    cs <- many1 aCase
-    o2 <- optionMaybe $ do
-        try $ string "else" >> notFollowedBy alphaNum
-        comments
-        o <- many phrase
-        comments
-        return o
-    string "end"
-    comments
-    return $ SwitchCase e cs o2
-    where
-    aCase = do
-        e <- (commaSep pas) $ (liftM InitRange rangeDecl <|> initExpression)
-        comments
-        char ':'
-        comments
-        p <- phrase
-        comments
-        return (e, p)
-
-procCall = do
-    r <- reference
-    p <- option [] $ (parens pas) parameters
-    return $ ProcCall r p
-
-parameters = (commaSep pas) expression <?> "parameters"
-
-functionBody = do
-    tv <- typeVarDeclaration True
-    comments
-    p <- phrasesBlock
-    char ';'
-    comments
-    return (TypesAndVars tv, p)
-
-uses = liftM Uses (option [] u)
-    where
-        u = do
-            string "uses"
-            comments
-            u <- (iD >>= \i -> comments >> return i) `sepBy1` (char ',' >> comments)
-            char ';'
-            comments
-            return u
-
-initExpression = buildExpressionParser table term <?> "initialization expression"
-    where
-    term = comments >> choice [
-        liftM (uncurry BuiltInFunction) $ builtInFunction initExpression
-        , try $ brackets pas (commaSep pas $ initExpression) >>= return . InitSet
-        , try $ parens pas (commaSep pas $ initExpression) >>= \ia -> when (null $ tail ia) mzero >> return (InitArray ia)
-        , try $ parens pas (sepEndBy recField (char ';' >> comments)) >>= return . InitRecord
-        , parens pas initExpression
-        , try $ integer pas >>= \i -> notFollowedBy (char '.') >> (return . InitNumber . show) i
-        , try $ float pas >>= return . InitFloat . show
-        , try $ integer pas >>= return . InitNumber . show
-        , stringLiteral pas >>= return . InitString
-        , char '#' >> many digit >>= \c -> comments >> return (InitChar c)
-        , char '$' >> many hexDigit >>= \h -> comments >> return (InitHexNumber h)
-        , char '@' >> initExpression >>= \c -> comments >> return (InitAddress c)
-        , try $ string "nil" >> return InitNull
-        , itypeCast
-        , iD >>= return . InitReference
-        ]
-
-    recField = do
-        i <- iD
-        spaces
-        char ':'
-        spaces
-        e <- initExpression
-        spaces
-        return (i ,e)
-
-    table = [
-          [
-             Prefix (char '-' >> return (InitPrefixOp "-"))
-            ,Prefix (try (string "not") >> return (InitPrefixOp "not"))
-          ]
-        , [  Infix (char '*' >> return (InitBinOp "*")) AssocLeft
-           , Infix (char '/' >> return (InitBinOp "/")) AssocLeft
-           , Infix (try (string "div") >> return (InitBinOp "div")) AssocLeft
-           , Infix (try (string "mod") >> return (InitBinOp "mod")) AssocLeft
-           , Infix (try $ string "and" >> return (InitBinOp "and")) AssocLeft
-           , Infix (try $ string "shl" >> return (InitBinOp "shl")) AssocNone
-           , Infix (try $ string "shr" >> return (InitBinOp "shr")) AssocNone
-          ]
-        , [  Infix (char '+' >> return (InitBinOp "+")) AssocLeft
-           , Infix (char '-' >> return (InitBinOp "-")) AssocLeft
-           , Infix (try $ string "or" >> return (InitBinOp "or")) AssocLeft
-           , Infix (try $ string "xor" >> return (InitBinOp "xor")) AssocLeft
-          ]
-        , [  Infix (try (string "<>") >> return (InitBinOp "<>")) AssocNone
-           , Infix (try (string "<=") >> return (InitBinOp "<=")) AssocNone
-           , Infix (try (string ">=") >> return (InitBinOp ">=")) AssocNone
-           , Infix (char '<' >> return (InitBinOp "<")) AssocNone
-           , Infix (char '>' >> return (InitBinOp ">")) AssocNone
-           , Infix (char '=' >> return (InitBinOp "=")) AssocNone
-          ]
-        {--, [  Infix (try $ string "and" >> return (InitBinOp "and")) AssocLeft
-           , Infix (try $ string "or" >> return (InitBinOp "or")) AssocLeft
-           , Infix (try $ string "xor" >> return (InitBinOp "xor")) AssocLeft
-          ]
-        , [  Infix (try $ string "shl" >> return (InitBinOp "shl")) AssocNone
-           , Infix (try $ string "shr" >> return (InitBinOp "shr")) AssocNone
-          ]--}
-        --, [Prefix (try (string "not") >> return (InitPrefixOp "not"))]
-        ]
-
-    itypeCast = do
-        t <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) knownTypes
-        i <- parens pas initExpression
-        comments
-        return $ InitTypeCast (Identifier t BTUnknown) i
-
-builtInFunction e = do
-    name <- choice $ map (\s -> try $ caseInsensitiveString s >>= \i -> notFollowedBy alphaNum >> return i) builtin
-    spaces
-    exprs <- option [] $ parens pas $ option [] $ commaSep1 pas $ e
-    spaces
-    return (name, exprs)
-
-systemUnit = do
-    string "system;"
-    comments
-    string "type"
-    comments
-    t <- typesDecl
-    string "var"
-    v <- varsDecl True
-    return $ System (t ++ v)
-
-redoUnit = do
-    string "redo;"
-    comments
-    string "type"
-    comments
-    t <- typesDecl
-    string "var"
-    v <- varsDecl True
-    return $ Redo (t ++ v)
-
--- a/tools/PascalPreprocessor.hs	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-module PascalPreprocessor where
-
-import Text.Parsec
-import Control.Monad.IO.Class
-import Control.Monad
-import System.IO
-import qualified Data.Map as Map
-import Data.Char
-
-
--- comments are removed
-comment = choice [
-        char '{' >> notFollowedBy (char '$') >> manyTill anyChar (try $ char '}') >> return ""
-        , (try $ string "(*") >> manyTill anyChar (try $ string "*)") >> return ""
-        , (try $ string "//") >> manyTill anyChar (try newline) >> return "\n"
-        ]
-
-initDefines = Map.fromList [
-    ("FPC", "")
-    , ("PAS2C", "")
-    , ("ENDIAN_LITTLE", "")
-    ]
-
-preprocess :: String -> IO String
-preprocess fn = do
-    r <- runParserT (preprocessFile fn) (initDefines, [True]) "" ""
-    case r of
-         (Left a) -> do
-             hPutStrLn stderr (show a)
-             return ""
-         (Right a) -> return a
-
-    where
-    preprocessFile fn = do
-        f <- liftIO (readFile fn)
-        setInput f
-        preprocessor
-
-    preprocessor, codeBlock, switch :: ParsecT String (Map.Map String String, [Bool]) IO String
-
-    preprocessor = chainr codeBlock (return (++)) ""
-
-    codeBlock = do
-        s <- choice [
-            switch
-            , comment
-            , char '\'' >> many (noneOf "'\n") >>= \s -> char '\'' >> return ('\'' : s ++ "'")
-            , identifier >>= replace
-            , noneOf "{" >>= \a -> return [a]
-            ]
-        (_, ok) <- getState
-        return $ if and ok then s else ""
-
-    --otherChar c = c `notElem` "{/('_" && not (isAlphaNum c)
-    identifier = do
-        c <- letter <|> oneOf "_"
-        s <- many (alphaNum <|> oneOf "_")
-        return $ c:s
-
-    switch = do
-        try $ string "{$"
-        s <- choice [
-            include
-            , ifdef
-            , if'
-            , elseSwitch
-            , endIf
-            , define
-            , unknown
-            ]
-        return s
-
-    include = do
-        try $ string "INCLUDE"
-        spaces
-        (char '"')
-        fn <- many1 $ noneOf "\"\n"
-        char '"'
-        spaces
-        char '}'
-        f <- liftIO (readFile fn `catch` error ("File not found: " ++ fn))
-        c <- getInput
-        setInput $ f ++ c
-        return ""
-
-    ifdef = do
-        s <- try (string "IFDEF") <|> try (string "IFNDEF")
-        let f = if s == "IFNDEF" then not else id
-
-        spaces
-        d <- identifier
-        spaces
-        char '}'
-
-        updateState $ \(m, b) ->
-            (m, (f $ d `Map.member` m) : b)
-
-        return ""
-
-    if' = do
-        s <- try (string "IF" >> notFollowedBy alphaNum)
-
-        manyTill anyChar (char '}')
-        --char '}'
-
-        updateState $ \(m, b) ->
-            (m, False : b)
-
-        return ""
-
-    elseSwitch = do
-        try $ string "ELSE}"
-        updateState $ \(m, b:bs) -> (m, (not b):bs)
-        return ""
-    endIf = do
-        try $ string "ENDIF}"
-        updateState $ \(m, b:bs) -> (m, bs)
-        return ""
-    define = do
-        try $ string "DEFINE"
-        spaces
-        i <- identifier
-        d <- ((string ":=" >> return ()) <|> spaces) >> many (noneOf "}")
-        char '}'
-        updateState $ \(m, b) -> (if (and b) && (head i /= '_') then Map.insert i d m else m, b)
-        return ""
-    replace s = do
-        (m, _) <- getState
-        return $ Map.findWithDefault s s m
-
-    unknown = do
-        fn <- many1 $ noneOf "}\n"
-        char '}'
-        return $ "{$" ++ fn ++ "}"
--- a/tools/PascalUnitSyntaxTree.hs	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-module PascalUnitSyntaxTree where
-
-import Data.Maybe
-import Data.Char
-
-data PascalUnit =
-    Program Identifier Implementation Phrase
-    | Unit Identifier Interface Implementation (Maybe Initialize) (Maybe Finalize)
-    | System [TypeVarDeclaration]
-    | Redo [TypeVarDeclaration]
-    deriving Show
-data Interface = Interface Uses TypesAndVars
-    deriving Show
-data Implementation = Implementation Uses TypesAndVars
-    deriving Show
-data Identifier = Identifier String BaseType
-    deriving Show
-data TypesAndVars = TypesAndVars [TypeVarDeclaration]
-    deriving Show
-data TypeVarDeclaration = TypeDeclaration Identifier TypeDecl
-    | VarDeclaration Bool Bool ([Identifier], TypeDecl) (Maybe InitExpression)
-    | FunctionDeclaration Identifier Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase))
-    | OperatorDeclaration String Identifier Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase))
-    deriving Show
-data TypeDecl = SimpleType Identifier
-    | RangeType Range
-    | Sequence [Identifier]
-    | ArrayDecl (Maybe Range) TypeDecl
-    | RecordType [TypeVarDeclaration] (Maybe [[TypeVarDeclaration]])
-    | PointerTo TypeDecl
-    | String Integer
-    | Set TypeDecl
-    | FunctionType TypeDecl [TypeVarDeclaration]
-    | DeriveType InitExpression
-    | VoidType
-    | VarParamType TypeDecl -- this is a hack
-    deriving Show
-data Range = Range Identifier
-           | RangeFromTo InitExpression InitExpression
-           | RangeInfinite
-    deriving Show
-data Initialize = Initialize String
-    deriving Show
-data Finalize = Finalize String
-    deriving Show
-data Uses = Uses [Identifier]
-    deriving Show
-data Phrase = ProcCall Reference [Expression]
-        | IfThenElse Expression Phrase (Maybe Phrase)
-        | WhileCycle Expression Phrase
-        | RepeatCycle Expression [Phrase]
-        | ForCycle Identifier Expression Expression Phrase Bool -- The last Boolean indicates wether it's up or down counting
-        | WithBlock Reference Phrase
-        | Phrases [Phrase]
-        | SwitchCase Expression [([InitExpression], Phrase)] (Maybe [Phrase])
-        | Assignment Reference Expression
-        | BuiltInFunctionCall [Expression] Reference
-        | NOP
-    deriving Show
-data Expression = Expression String
-    | BuiltInFunCall [Expression] Reference
-    | PrefixOp String Expression
-    | PostfixOp String Expression
-    | BinOp String Expression Expression
-    | StringLiteral String
-    | PCharLiteral String
-    | CharCode String
-    | HexCharCode String
-    | NumberLiteral String
-    | FloatLiteral String
-    | HexNumber String
-    | Reference Reference
-    | SetExpression [Identifier]
-    | Null
-    deriving Show
-data Reference = ArrayElement [Expression] Reference
-    | FunCall [Expression] Reference
-    | TypeCast Identifier Expression
-    | SimpleReference Identifier
-    | Dereference Reference
-    | RecordField Reference Reference
-    | Address Reference
-    | RefExpression Expression
-    deriving Show
-data InitExpression = InitBinOp String InitExpression InitExpression
-    | InitPrefixOp String InitExpression
-    | InitReference Identifier
-    | InitArray [InitExpression]
-    | InitRecord [(Identifier, InitExpression)]
-    | InitFloat String
-    | InitNumber String
-    | InitHexNumber String
-    | InitString String
-    | InitChar String
-    | BuiltInFunction String [InitExpression]
-    | InitSet [InitExpression]
-    | InitAddress InitExpression
-    | InitNull
-    | InitRange Range
-    | InitTypeCast Identifier InitExpression
-    deriving Show
-
-data BaseType = BTUnknown
-    | BTChar
-    | BTString
-    | BTInt
-    | BTBool
-    | BTFloat
-    | BTRecord String [(String, BaseType)]
-    | BTArray Range BaseType BaseType
-    | BTFunction Bool Int BaseType
-    | BTPointerTo BaseType
-    | BTUnresolved String
-    | BTSet BaseType
-    | BTEnum [String]
-    | BTVoid
-    | BTUnit
-    | BTVarParam BaseType
-    deriving Show
--- a/tools/build_windows.bat	Tue Apr 30 01:47:30 2013 +0200
+++ b/tools/build_windows.bat	Thu Jun 13 22:27:23 2013 +0200
@@ -13,7 +13,8 @@
 if %BUILD_TYPE%=="Debug" (
     for %%G in (QtCored4 QtGuid4 QtNetworkd4) do xcopy /d/y %QTDIR%\%%G.dll %CD%\bin\
 )
-for %%G in (QtCore4 QtGui4 QtNetwork4 libgcc_s_dw2-1 mingwm10) do (
+:: should you libgcc dynamically you should try adding libgcc_s_dw2-1 and mingwm10
+for %%G in (QtCore4 QtGui4 QtNetwork4) do (
     xcopy /d/y %QTDIR%\%%G.dll %CD%\bin\
 )
 
@@ -39,7 +40,8 @@
 
 echo Running cmake...
 set ERRORLEVEL=
-cmake . -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="%CD%\misc\winutils" -DPNG_LIBRARY="%CD%\misc\winutils\bin\libpng13.dll" -DCMAKE_BUILD_TYPE="%BUILD_TYPE%"
+cmake . -G "MinGW Makefiles" -DPNG_LIBRARY="%CD%\misc\winutils\bin\libpng13.dll" -DCMAKE_BUILD_TYPE="%BUILD_TYPE%" -DCMAKE_PREFIX_PATH="%CD%\misc\winutils\\"
+:: prefix should be last
 
 if %ERRORLEVEL% NEQ 0 goto exitpoint
 
--- a/tools/pas2c.hs	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1086 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-module Pas2C where
-
-import Text.PrettyPrint.HughesPJ
-import Data.Maybe
-import Data.Char
-import Text.Parsec.Prim hiding (State)
-import Control.Monad.State
-import System.IO
-import System.Directory
-import Control.Monad.IO.Class
-import PascalPreprocessor
-import Control.Exception
-import System.IO.Error
-import qualified Data.Map as Map
-import qualified Data.Set as Set
-import Data.List (find)
-import Numeric
-
-import PascalParser(pascalUnit)
-import PascalUnitSyntaxTree
-
-
-data InsertOption =
-    IOInsert
-    | IOInsertWithType Doc
-    | IOLookup
-    | IOLookupLast
-    | IOLookupFunction Int
-    | IODeferred
-
-data Record = Record
-    {
-        lcaseId :: String,
-        baseType :: BaseType,
-        typeDecl :: Doc
-    }
-    deriving Show
-type Records = Map.Map String [Record]
-data RenderState = RenderState
-    {
-        currentScope :: Records,
-        lastIdentifier :: String,
-        lastType :: BaseType,
-        lastIdTypeDecl :: Doc,
-        stringConsts :: [(String, String)],
-        uniqCounter :: Int,
-        toMangle :: Set.Set String,
-        currentUnit :: String,
-        currentFunctionResult :: String,
-        namespaces :: Map.Map String Records
-    }
-
-rec2Records = map (\(a, b) -> Record a b empty)
-
-emptyState = RenderState Map.empty "" BTUnknown empty [] 0 Set.empty "" ""
-
-getUniq :: State RenderState Int
-getUniq = do
-    i <- gets uniqCounter
-    modify(\s -> s{uniqCounter = uniqCounter s + 1})
-    return i
-
-addStringConst :: String -> State RenderState Doc
-addStringConst str = do
-    strs <- gets stringConsts
-    let a = find ((==) str . snd) strs
-    if isJust a then
-        do
-        modify (\s -> s{lastType = BTString})
-        return . text . fst . fromJust $ a
-    else
-        do
-        i <- getUniq
-        let sn = "__str" ++ show i
-        modify (\s -> s{lastType = BTString, stringConsts = (sn, str) : strs})
-        return $ text sn
-
-escapeStr :: String -> String
-escapeStr = foldr escapeChar []
-
-escapeChar :: Char -> ShowS
-escapeChar '"' s = "\\\"" ++ s
-escapeChar '\\' s = "\\\\" ++ s
-escapeChar a s = a : s
-
-strInit :: String -> Doc
-strInit a = text "STRINIT" <> parens (doubleQuotes (text $ escapeStr a))
-
-renderStringConsts :: State RenderState Doc
-renderStringConsts = liftM (vcat . map (\(a, b) -> text "static const string255" <+> (text a) <+> text "=" <+> strInit b <> semi))
-    $ gets stringConsts
-
-docToLower :: Doc -> Doc
-docToLower = text . map toLower . render
-
-pas2C :: String -> IO ()
-pas2C fn = do
-    setCurrentDirectory "../hedgewars/"
-    s <- flip execStateT initState $ f fn
-    renderCFiles s
-    where
-    printLn = liftIO . hPutStrLn stdout
-    print = liftIO . hPutStr stdout
-    initState = Map.empty
-    f :: String -> StateT (Map.Map String PascalUnit) IO ()
-    f fileName = do
-        processed <- gets $ Map.member fileName
-        unless processed $ do
-            print ("Preprocessing '" ++ fileName ++ ".pas'... ")
-            fc' <- liftIO
-                $ tryJust (guard . isDoesNotExistError)
-                $ preprocess (fileName ++ ".pas")
-            case fc' of
-                (Left a) -> do
-                    modify (Map.insert fileName (System []))
-                    printLn "doesn't exist"
-                (Right fc) -> do
-                    print "ok, parsing... "
-                    let ptree = parse pascalUnit fileName fc
-                    case ptree of
-                         (Left a) -> do
-                            liftIO $ writeFile "preprocess.out" fc
-                            printLn $ show a ++ "\nsee preprocess.out for preprocessed source"
-                            fail "stop"
-                         (Right a) -> do
-                            printLn "ok"
-                            modify (Map.insert fileName a)
-                            mapM_ f (usesFiles a)
-
-
-renderCFiles :: Map.Map String PascalUnit -> IO ()
-renderCFiles units = do
-    let u = Map.toList units
-    let nss = Map.map (toNamespace nss) units
-    --hPutStrLn stderr $ "Units: " ++ (show . Map.keys . Map.filter (not . Map.null) $ nss)
-    --writeFile "pas2c.log" $ unlines . map (\t -> show (fst t) ++ "\n" ++ (unlines . map ((:) '\t' . show) . snd $ t)) . Map.toList $ nss
-    mapM_ (toCFiles nss) u
-    where
-    toNamespace :: Map.Map String Records -> PascalUnit -> Records
-    toNamespace nss (System tvs) =
-        currentScope $ execState f (emptyState nss)
-        where
-        f = do
-            checkDuplicateFunDecls tvs
-            mapM_ (tvar2C True False True False) tvs
-    toNamespace nss (Redo tvs) = -- functions that are re-implemented, add prefix to all of them
-        currentScope $ execState f (emptyState nss){currentUnit = "fpcrtl_"}
-        where
-        f = do
-            checkDuplicateFunDecls tvs
-            mapM_ (tvar2C True False True False) tvs
-    toNamespace _ (Program {}) = Map.empty
-    toNamespace nss (Unit (Identifier i _) interface _ _ _) =
-        currentScope $ execState (interface2C interface True) (emptyState nss){currentUnit = map toLower i ++ "_"}
-
-
-withState' :: (RenderState -> RenderState) -> State RenderState a -> State RenderState a
-withState' f sf = do
-    st <- liftM f get
-    let (a, s) = runState sf st
-    modify(\st -> st{
-        lastType = lastType s
-        , uniqCounter = uniqCounter s
-        , stringConsts = stringConsts s
-        })
-    return a
-
-withLastIdNamespace f = do
-    li <- gets lastIdentifier
-    nss <- gets namespaces
-    withState' (\st -> st{currentScope = fromMaybe Map.empty $ Map.lookup li (namespaces st)}) f
-
-withRecordNamespace :: String -> [Record] -> State RenderState Doc -> State RenderState Doc
-withRecordNamespace _ [] = error "withRecordNamespace: empty record"
-withRecordNamespace prefix recs = withState' f
-    where
-        f st = st{currentScope = Map.unionWith un records (currentScope st), currentUnit = ""}
-        records = Map.fromList $ map (\(Record a b d) -> (map toLower a, [Record (prefix ++ a) b d])) recs
-        un [a] b = a : b
-
-toCFiles :: Map.Map String Records -> (String, PascalUnit) -> IO ()
-toCFiles _ (_, System _) = return ()
-toCFiles _ (_, Redo _) = return ()
-toCFiles ns p@(fn, pu) = do
-    hPutStrLn stdout $ "Rendering '" ++ fn ++ "'..."
-    toCFiles' p
-    where
-    toCFiles' (fn, p@(Program {})) = writeFile (fn ++ ".c") $ "#include \"fpcrtl.h\"\n" ++ (render2C initialState . pascal2C) p
-    toCFiles' (fn, (Unit unitId@(Identifier i _) interface implementation _ _)) = do
-        let (a, s) = runState (id2C IOInsert (setBaseType BTUnit unitId) >> interface2C interface True) initialState{currentUnit = map toLower i ++ "_"}
-            (a', s') = runState (id2C IOInsert (setBaseType BTUnit unitId) >> interface2C interface False) initialState{currentUnit = map toLower i ++ "_"}
-        writeFile (fn ++ ".h") $ "#pragma once\n\n#include \"pas2c.h\"\n\n" ++ (render (a $+$ text ""))
-        writeFile (fn ++ ".c") $ "#include \"fpcrtl.h\"\n\n#include \"" ++ fn ++ ".h\"\n" ++ render (a' $+$ text "") ++ (render2C s . implementation2C) implementation
-    initialState = emptyState ns
-
-    render2C :: RenderState -> State RenderState Doc -> String
-    render2C a = render . ($+$ empty) . flip evalState a
-
-
-usesFiles :: PascalUnit -> [String]
-usesFiles (Program _ (Implementation uses _) _) = ["pas2cSystem", "pas2cRedo"] ++ uses2List uses
-usesFiles (Unit _ (Interface uses1 _) (Implementation uses2 _) _ _) = ["pas2cSystem", "pas2cRedo"] ++ uses2List uses1 ++ uses2List uses2
-usesFiles (System {}) = []
-usesFiles (Redo {}) = []
-
-pascal2C :: PascalUnit -> State RenderState Doc
-pascal2C (Unit _ interface implementation init fin) =
-    liftM2 ($+$) (interface2C interface True) (implementation2C implementation)
-
-pascal2C (Program _ implementation mainFunction) = do
-    impl <- implementation2C implementation
-    [main] <- tvar2C True False True True (FunctionDeclaration (Identifier "main" BTInt) False (SimpleType $ Identifier "int" BTInt) [VarDeclaration False False ([Identifier "argc" BTInt], SimpleType (Identifier "Integer" BTInt)) Nothing, VarDeclaration False False ([Identifier "argv" BTUnknown], SimpleType (Identifier "PPChar" BTUnknown)) Nothing] (Just (TypesAndVars [], mainFunction)))
-    return $ impl $+$ main
-
-
--- the second bool indicates whether do normal interface translation or generate variable declarations
--- that will be inserted into implementation files
-interface2C :: Interface -> Bool -> State RenderState Doc
-interface2C (Interface uses tvars) True = do
-    u <- uses2C uses
-    tv <- typesAndVars2C True True True tvars
-    r <- renderStringConsts
-    return (u $+$ r $+$ tv)
-interface2C (Interface uses tvars) False = do
-    u <- uses2C uses
-    tv <- typesAndVars2C True False False tvars
-    r <- renderStringConsts
-    return tv
-
-implementation2C :: Implementation -> State RenderState Doc
-implementation2C (Implementation uses tvars) = do
-    u <- uses2C uses
-    tv <- typesAndVars2C True False True tvars
-    r <- renderStringConsts
-    return (u $+$ r $+$ tv)
-
-checkDuplicateFunDecls :: [TypeVarDeclaration] -> State RenderState ()
-checkDuplicateFunDecls tvs =
-    modify $ \s -> s{toMangle = Map.keysSet . Map.filter (> 1) . foldr ins initMap $ tvs}
-    where
-        initMap = Map.empty
-        --initMap = Map.fromList [("reset", 2)]
-        ins (FunctionDeclaration (Identifier i _) _ _ _ _) m = Map.insertWith (+) (map toLower i) 1 m
-        ins _ m = m
-
--- the second bool indicates whether declare variable as extern or not
--- the third bool indicates whether include types or not
-
-typesAndVars2C :: Bool -> Bool -> Bool -> TypesAndVars -> State RenderState Doc
-typesAndVars2C b externVar includeType(TypesAndVars ts) = do
-    checkDuplicateFunDecls ts
-    liftM (vcat . map (<> semi) . concat) $ mapM (tvar2C b externVar includeType False) ts
-
-setBaseType :: BaseType -> Identifier -> Identifier
-setBaseType bt (Identifier i _) = Identifier i bt
-
-uses2C :: Uses -> State RenderState Doc
-uses2C uses@(Uses unitIds) = do
-
-    mapM_ injectNamespace (Identifier "pas2cSystem" undefined : unitIds)
-    mapM_ injectNamespace (Identifier "pas2cRedo" undefined : unitIds)
-    mapM_ (id2C IOInsert . setBaseType BTUnit) unitIds
-    return $ vcat . map (\i -> text $ "#include \"" ++ i ++ ".h\"") $ uses2List uses
-    where
-    injectNamespace (Identifier i _) = do
-        getNS <- gets (flip Map.lookup . namespaces)
-        modify (\s -> s{currentScope = Map.unionWith (++) (fromMaybe Map.empty (getNS i)) $ currentScope s})
-
-uses2List :: Uses -> [String]
-uses2List (Uses ids) = map (\(Identifier i _) -> i) ids
-
-
-setLastIdValues vv = (\s -> s{lastType = baseType vv, lastIdentifier = lcaseId vv, lastIdTypeDecl = typeDecl vv})
-
-id2C :: InsertOption -> Identifier -> State RenderState Doc
-id2C IOInsert i = id2C (IOInsertWithType empty) i
-id2C (IOInsertWithType d) (Identifier i t) = do
-    ns <- gets currentScope
-    tom <- gets (Set.member n . toMangle)
-    cu <- gets currentUnit
-    let (i', t') = case (t, tom) of
-            (BTFunction _ p _, True) -> (cu ++ i ++ ('_' : show p), t)
-            (BTFunction _ _ _, _) -> (cu ++ i, t)
-            (BTVarParam t', _) -> ('(' : '*' : i ++ ")" , t')
-            _ -> (i, t)
-    modify (\s -> s{currentScope = Map.insertWith (++) n [Record i' t' d] (currentScope s), lastIdentifier = n})
-    return $ text i'
-    where
-        n = map toLower i
-
-id2C IOLookup i = id2CLookup head i
-id2C IOLookupLast i = id2CLookup last i
-id2C (IOLookupFunction params) (Identifier i t) = do
-    let i' = map toLower i
-    v <- gets $ Map.lookup i' . currentScope
-    lt <- gets lastType
-    if isNothing v then
-        error $ "Not defined: '" ++ i' ++ "'\n" ++ show lt ++ "\nwith num of params = " ++ show params ++ "\n" ++ show v
-        else
-        let vv = fromMaybe (head $ fromJust v) . find checkParam $ fromJust v in
-            modify (setLastIdValues vv) >> (return . text . lcaseId $ vv)
-    where
-        checkParam (Record _ (BTFunction _ p _) _) = p == params
-        checkParam _ = False
-id2C IODeferred (Identifier i t) = do
-    let i' = map toLower i
-    v <- gets $ Map.lookup i' . currentScope
-    if (isNothing v) then
-        modify (\s -> s{lastType = BTUnknown, lastIdentifier = i}) >> return (text i)
-        else
-        let vv = head $ fromJust v in modify (setLastIdValues vv) >> (return . text . lcaseId $ vv)
-
-id2CLookup :: ([Record] -> Record) -> Identifier -> State RenderState Doc
-id2CLookup f (Identifier i t) = do
-    let i' = map toLower i
-    v <- gets $ Map.lookup i' . currentScope
-    lt <- gets lastType
-    if isNothing v then
-        error $ "Not defined: '" ++ i' ++ "'\n" ++ show lt
-        else
-        let vv = f $ fromJust v in modify (setLastIdValues vv) >> (return . text . lcaseId $ vv)
-
-
-id2CTyped :: TypeDecl -> Identifier -> State RenderState Doc
-id2CTyped = id2CTyped2 Nothing
-
-id2CTyped2 :: Maybe Doc -> TypeDecl -> Identifier -> State RenderState Doc
-id2CTyped2 md t (Identifier i _) = do
-    tb <- resolveType t
-    case (t, tb) of
-        (_, BTUnknown) -> do
-            error $ "id2CTyped: type BTUnknown for " ++ show i ++ "\ntype: " ++ show t
-        (SimpleType {}, BTRecord _ r) -> do
-            ts <- type2C t
-            id2C (IOInsertWithType $ ts empty) (Identifier i (BTRecord (render $ ts empty) r))
-        (_, BTRecord _ r) -> do
-            ts <- type2C t
-            id2C (IOInsertWithType $ ts empty) (Identifier i (BTRecord i r))
-        _ -> case md of
-                Nothing -> id2C IOInsert (Identifier i tb)
-                Just ts -> id2C (IOInsertWithType ts) (Identifier i tb)
-
-
-resolveType :: TypeDecl -> State RenderState BaseType
-resolveType st@(SimpleType (Identifier i _)) = do
-    let i' = map toLower i
-    v <- gets $ Map.lookup i' . currentScope
-    if isJust v then return . baseType . head $ fromJust v else return $ f i'
-    where
-    f "integer" = BTInt
-    f "pointer" = BTPointerTo BTVoid
-    f "boolean" = BTBool
-    f "float" = BTFloat
-    f "char" = BTChar
-    f "string" = BTString
-    f _ = error $ "Unknown system type: " ++ show st
-resolveType (PointerTo (SimpleType (Identifier i _))) = return . BTPointerTo $ BTUnresolved (map toLower i)
-resolveType (PointerTo t) = liftM BTPointerTo $ resolveType t
-resolveType (RecordType tv mtvs) = do
-    tvs <- mapM f (concat $ tv : fromMaybe [] mtvs)
-    return . BTRecord "" . concat $ tvs
-    where
-        f :: TypeVarDeclaration -> State RenderState [(String, BaseType)]
-        f (VarDeclaration _ _ (ids, td) _) = mapM (\(Identifier i _) -> liftM ((,) i) $ resolveType td) ids
-resolveType (ArrayDecl (Just i) t) = do
-    t' <- resolveType t
-    return $ BTArray i BTInt t'
-resolveType (ArrayDecl Nothing t) = liftM (BTArray RangeInfinite BTInt) $ resolveType t
-resolveType (FunctionType t a) = liftM (BTFunction False (length a)) $ resolveType t
-resolveType (DeriveType (InitHexNumber _)) = return BTInt
-resolveType (DeriveType (InitNumber _)) = return BTInt
-resolveType (DeriveType (InitFloat _)) = return BTFloat
-resolveType (DeriveType (InitString _)) = return BTString
-resolveType (DeriveType (InitBinOp {})) = return BTInt
-resolveType (DeriveType (InitPrefixOp _ e)) = initExpr2C e >> gets lastType
-resolveType (DeriveType (BuiltInFunction{})) = return BTInt
-resolveType (DeriveType (InitReference (Identifier{}))) = return BTBool -- TODO: derive from actual type
-resolveType (DeriveType _) = return BTUnknown
-resolveType (String _) = return BTString
-resolveType VoidType = return BTVoid
-resolveType (Sequence ids) = return $ BTEnum $ map (\(Identifier i _) -> map toLower i) ids
-resolveType (RangeType _) = return $ BTVoid
-resolveType (Set t) = liftM BTSet $ resolveType t
-resolveType (VarParamType t) = liftM BTVarParam $ resolveType t
-
-
-resolve :: String -> BaseType -> State RenderState BaseType
-resolve s (BTUnresolved t) = do
-    v <- gets $ Map.lookup t . currentScope
-    if isJust v then
-        resolve s . baseType . head . fromJust $ v
-        else
-        error $ "Unknown type " ++ show t ++ "\n" ++ s
-resolve _ t = return t
-
-fromPointer :: String -> BaseType -> State RenderState BaseType
-fromPointer s (BTPointerTo t) = resolve s t
-fromPointer s t = do
-    error $ "Dereferencing from non-pointer type " ++ show t ++ "\n" ++ s
-
-
-functionParams2C params = liftM (hcat . punctuate comma . concat) $ mapM (tvar2C False False True True) params
-
-numberOfDeclarations :: [TypeVarDeclaration] -> Int
-numberOfDeclarations = sum . map cnt
-    where
-        cnt (VarDeclaration _ _ (ids, _) _) = length ids
-        cnt _ = 1
-
-hasPassByReference :: [TypeVarDeclaration] -> Bool
-hasPassByReference = or . map isVar
-    where
-        isVar (VarDeclaration v _ (_, _) _) = v
-        isVar _ = error $ "hasPassByReference called not on function parameters"
-
-toIsVarList :: [TypeVarDeclaration] -> [Bool]
-toIsVarList = concatMap isVar
-    where
-        isVar (VarDeclaration v _ (p, _) _) = replicate (length p) v
-        isVar _ = error $ "toIsVarList called not on function parameters"
-
-
-funWithVarsToDefine :: String -> [TypeVarDeclaration] -> Doc
-funWithVarsToDefine n params = text "#define" <+> text n <> parens abc <+> text (n ++ "__vars") <> parens cparams
-    where
-        abc = hcat . punctuate comma . map (char . fst) $ ps
-        cparams = hcat . punctuate comma . map (\(c, v) -> if v then char '&' <> parens (char c) else char c) $ ps
-        ps = zip ['a'..] (toIsVarList params)
-
-fun2C :: Bool -> String -> TypeVarDeclaration -> State RenderState [Doc]
-fun2C _ _ (FunctionDeclaration name inline returnType params Nothing) = do
-    t <- type2C returnType
-    t'<- gets lastType
-    p <- withState' id $ functionParams2C params
-    n <- liftM render . id2C IOInsert $ setBaseType (BTFunction hasVars (numberOfDeclarations params) t') name
-    let decor = if inline then text "inline" else empty
-    if hasVars then
-        return [funWithVarsToDefine n params $+$ decor <+> t empty <+> text (n ++ "__vars") <> parens p]
-        else
-        return [decor <+> t empty <+> text n <> parens p]
-    where
-        hasVars = hasPassByReference params
-
-
-fun2C True rv (FunctionDeclaration name@(Identifier i _) inline returnType params (Just (tvars, phrase))) = do
-    let res = docToLower $ text rv <> text "_result"
-    t <- type2C returnType
-    t'<- gets lastType
-
-    notDeclared <- liftM isNothing . gets $ Map.lookup (map toLower i) . currentScope
-
-    n <- liftM render . id2C IOInsert $ setBaseType (BTFunction hasVars (numberOfDeclarations params) t') name
-
-    let isVoid = case returnType of
-            VoidType -> True
-            _ -> False
-
-    (p, ph) <- withState' (\st -> st{currentScope = Map.insertWith un (map toLower rv) [Record (render res) t' empty] $ currentScope st
-            , currentFunctionResult = if isVoid then [] else render res}) $ do
-        p <- functionParams2C params
-        ph <- liftM2 ($+$) (typesAndVars2C False False True tvars) (phrase2C' phrase)
-        return (p, ph)
-
-    let phrasesBlock = if isVoid then ph else t empty <+> res <> semi $+$ ph $+$ text "return" <+> res <> semi
-    let define = if hasVars then text "#ifndef" <+> text n $+$ funWithVarsToDefine n params $+$ text "#endif" else empty
-    let decor = if inline then text "inline" else empty
-    return [
-        define
-        $+$
-        --(if notDeclared && hasVars then funWithVarsToDefine n params else empty) $+$
-        decor <+> t empty <+> text (if hasVars then n ++ "__vars" else n) <> parens p
-        $+$
-        text "{"
-        $+$
-        nest 4 phrasesBlock
-        $+$
-        text "}"]
-    where
-    phrase2C' (Phrases p) = liftM vcat $ mapM phrase2C p
-    phrase2C' p = phrase2C p
-    un [a] b = a : b
-    hasVars = hasPassByReference params
-
-fun2C False _ (FunctionDeclaration (Identifier name _) _ _ _ _) = error $ "nested functions not allowed: " ++ name
-fun2C _ tv _ = error $ "fun2C: I don't render " ++ show tv
-
--- the second bool indicates whether declare variable as extern or not
--- the third bool indicates whether include types or not
--- the fourth bool indicates whether ignore initialization or not (basically for dynamic arrays since we cannot do initialization in function params)
-tvar2C :: Bool -> Bool -> Bool -> Bool -> TypeVarDeclaration -> State RenderState [Doc]
-tvar2C b _ includeType _ f@(FunctionDeclaration (Identifier name _) _ _ _ _) = do
-    t <- fun2C b name f
-    if includeType then return t else return []
-tvar2C _ _ includeType _ td@(TypeDeclaration i' t) = do
-    i <- id2CTyped t i'
-    tp <- type2C t
-    return $ if includeType then [text "typedef" <+> tp i] else []
-
-tvar2C _ _ _ _ (VarDeclaration True _ (ids, t) Nothing) = do
-    t' <- liftM ((empty <+>) . ) $ type2C t
-    liftM (map(\i -> t' i)) $ mapM (id2CTyped2 (Just $ t' empty) (VarParamType t)) ids
-
-tvar2C _ externVar includeType ignoreInit (VarDeclaration _ isConst (ids, t) mInitExpr) = do
-    t' <- liftM (((if isConst then text "static const" else if externVar
-                                                                then text "extern"
-                                                                else empty)
-                   <+>) . ) $ type2C t
-    ie <- initExpr mInitExpr
-    lt <- gets lastType
-    case (isConst, lt, ids, mInitExpr) of
-         (True, BTInt, [i], Just _) -> do
-             i' <- id2CTyped t i
-             return $ if includeType then [text "enum" <> braces (i' <+> ie)] else []
-         (True, BTFloat, [i], Just e) -> do
-             i' <- id2CTyped t i
-             ie <- initExpr2C e
-             return $ if includeType then [text "#define" <+> i' <+> parens ie <> text "\n"] else []
-         (_, BTFunction{}, _, Nothing) -> liftM (map(\i -> t' i)) $ mapM (id2CTyped t) ids
-         (_, BTArray r _ _, [i], _) -> do
-            i' <- id2CTyped t i
-            ie' <- return $ case (r, mInitExpr, ignoreInit) of
-                (RangeInfinite, Nothing, False) -> text "= NULL" -- force dynamic array to be initialized as NULL if not initialized at all
-                (_, _, _) -> ie
-            result <- liftM (map(\i -> varDeclDecision isConst includeType (t' i) ie')) $ mapM (id2CTyped t) ids
-            case (r, ignoreInit) of
-                (RangeInfinite, False) ->
-                    -- if the array is dynamic, add dimension info to it
-                    return $ [dimDecl] ++ result
-                    where
-                        arrayDimStr = show $ arrayDimension t
-                        arrayDimInitExp = text ("={" ++ ".dim = " ++ arrayDimStr ++ ", .a = {0, 0, 0, 0}}")
-                        dimDecl = varDeclDecision isConst includeType (text "fpcrtl_dimension_t" <+>  i' <> text "_dimension_info") arrayDimInitExp
-
-                (_, _) -> return result
-
-         _ -> liftM (map(\i -> varDeclDecision isConst includeType (t' i) ie)) $ mapM (id2CTyped2 (Just $ t' empty) t) ids
-    where
-    initExpr Nothing = return $ empty
-    initExpr (Just e) = liftM (text "=" <+>) (initExpr2C e)
-    varDeclDecision True True varStr expStr = varStr <+> expStr
-    varDeclDecision False True varStr expStr = if externVar then varStr else varStr <+> expStr
-    varDeclDecision False False varStr expStr = varStr <+> expStr
-    varDeclDecision True False varStr expStr = empty
-    arrayDimension a = case a of
-        ArrayDecl Nothing t -> let a = arrayDimension t in if a > 3 then error "Dynamic array with dimension > 4 is not supported." else 1 + arrayDimension t
-        ArrayDecl _ _ -> error "Mixed dynamic array and static array are not supported."
-        _ -> 0
-
-tvar2C f _ _ _ (OperatorDeclaration op (Identifier i _) inline ret params body) = do
-    r <- op2CTyped op (extractTypes params)
-    fun2C f i (FunctionDeclaration r inline ret params body)
-
-
-op2CTyped :: String -> [TypeDecl] -> State RenderState Identifier
-op2CTyped op t = do
-    t' <- liftM (render . hcat . punctuate (char '_') . map (\t -> t empty)) $ mapM type2C t
-    bt <- gets lastType
-    return $ Identifier (t' ++ "_op_" ++ opStr) bt
-    where
-    opStr = case op of
-                    "+" -> "add"
-                    "-" -> "sub"
-                    "*" -> "mul"
-                    "/" -> "div"
-                    "/(float)" -> "div"
-                    "=" -> "eq"
-                    "<" -> "lt"
-                    ">" -> "gt"
-                    "<>" -> "neq"
-                    _ -> error $ "op2CTyped: unknown op '" ++ op ++ "'"
-
-extractTypes :: [TypeVarDeclaration] -> [TypeDecl]
-extractTypes = concatMap f
-    where
-        f (VarDeclaration _ _ (ids, t) _) = replicate (length ids) t
-        f a = error $ "extractTypes: can't extract from " ++ show a
-
-initExpr2C, initExpr2C' :: InitExpression -> State RenderState Doc
-initExpr2C (InitArray values) = liftM (braces . vcat . punctuate comma) $ mapM initExpr2C values
-initExpr2C a = initExpr2C' a
-initExpr2C' InitNull = return $ text "NULL"
-initExpr2C' (InitAddress expr) = do
-    ie <- initExpr2C' expr
-    lt <- gets lastType
-    case lt of
-        BTFunction True _ _ -> return $ text "&" <> ie <> text "__vars"
-        _ -> return $ text "&" <> ie
-initExpr2C' (InitPrefixOp op expr) = liftM (text (op2C op) <>) (initExpr2C' expr)
-initExpr2C' (InitBinOp op expr1 expr2) = do
-    e1 <- initExpr2C' expr1
-    e2 <- initExpr2C' expr2
-    return $ parens $ e1 <+> text (op2C op) <+> e2
-initExpr2C' (InitNumber s) = return $ text s
-initExpr2C' (InitFloat s) = return $ text s
-initExpr2C' (InitHexNumber s) = return $ text "0x" <> (text . map toLower $ s)
-initExpr2C' (InitString [a]) = return . quotes $ text [a]
-initExpr2C' (InitString s) = return $ strInit s
-initExpr2C' (InitChar a) = return $ quotes $ text "\\x" <> text (showHex (read a) "")
-initExpr2C' (InitReference i) = id2C IOLookup i
-initExpr2C' (InitRecord fields) = do
-    (fs :: [Doc]) <- mapM (\(Identifier a _, b) -> liftM (text "." <> text a <+> equals <+>) $ initExpr2C b) fields
-    return $ lbrace $+$ (nest 4 . vcat . punctuate comma $ fs) $+$ rbrace
-initExpr2C' (InitArray [value]) = initExpr2C value
-initExpr2C' r@(InitRange (Range i@(Identifier i' _))) = do
-    id2C IOLookup i
-    t <- gets lastType
-    case t of
-         BTEnum s -> return . int $ length s
-         BTInt -> case i' of
-                       "byte" -> return $ int 256
-                       _ -> error $ "InitRange identifier: " ++ i'
-         _ -> error $ "InitRange: " ++ show r
-initExpr2C' (InitRange (RangeFromTo (InitNumber "0") r)) = initExpr2C $ BuiltInFunction "succ" [r]
-initExpr2C' (InitRange (RangeFromTo (InitChar "0") (InitChar r))) = initExpr2C $ BuiltInFunction "succ" [InitNumber r]
-initExpr2C' (InitRange a) = error $ show a --return $ text "<<range>>"
-initExpr2C' (InitSet []) = return $ text "0"
-initExpr2C' (InitSet a) = return $ text "<<set>>"
-initExpr2C' (BuiltInFunction "low" [InitReference e]) = return $
-    case e of
-         (Identifier "LongInt" _) -> int (-2^31)
-         (Identifier "SmallInt" _) -> int (-2^15)
-         _ -> error $ "BuiltInFunction 'low': " ++ show e
-initExpr2C' (BuiltInFunction "high" [e]) = do
-    initExpr2C e
-    t <- gets lastType
-    case t of
-         (BTArray i _ _) -> initExpr2C' $ BuiltInFunction "pred" [InitRange i]
-         a -> error $ "BuiltInFunction 'high': " ++ show a
-initExpr2C' (BuiltInFunction "succ" [BuiltInFunction "pred" [e]]) = initExpr2C' e
-initExpr2C' (BuiltInFunction "pred" [BuiltInFunction "succ" [e]]) = initExpr2C' e
-initExpr2C' (BuiltInFunction "succ" [e]) = liftM (<> text " + 1") $ initExpr2C' e
-initExpr2C' (BuiltInFunction "pred" [e]) = liftM (<> text " - 1") $ initExpr2C' e
-initExpr2C' b@(BuiltInFunction _ _) = error $ show b
-initExpr2C' a = error $ "initExpr2C: don't know how to render " ++ show a
-
-
-range2C :: InitExpression -> State RenderState [Doc]
-range2C (InitString [a]) = return [quotes $ text [a]]
-range2C (InitRange (Range i)) = liftM (flip (:) []) $ id2C IOLookup i
-range2C (InitRange (RangeFromTo (InitString [a]) (InitString [b]))) = return $ map (\i -> quotes $ text [i]) [a..b]
-range2C a = liftM (flip (:) []) $ initExpr2C a
-
-baseType2C :: String -> BaseType -> Doc
-baseType2C _ BTFloat = text "float"
-baseType2C _ BTBool = text "bool"
-baseType2C _ BTString = text "string255"
-baseType2C s a = error $ "baseType2C: " ++ show a ++ "\n" ++ s
-
-type2C :: TypeDecl -> State RenderState (Doc -> Doc)
-type2C (SimpleType i) = liftM (\i a -> i <+> a) $ id2C IOLookup i
-type2C t = do
-    r <- type2C' t
-    rt <- resolveType t
-    modify (\st -> st{lastType = rt})
-    return r
-    where
-    type2C' VoidType = return (text "void" <+>)
-    type2C' (String l) = return (text "string255" <+>)--return (text ("string" ++ show l) <+>)
-    type2C' (PointerTo (SimpleType i)) = do
-        i' <- id2C IODeferred i
-        lt <- gets lastType
-        case lt of
-             BTRecord _ _ -> return $ \a -> text "struct __" <> i' <+> text "*" <+> a
-             BTUnknown -> return $ \a -> text "struct __" <> i' <+> text "*" <+> a
-             _ -> return $ \a -> i' <+> text "*" <+> a
-    type2C' (PointerTo t) = liftM (\t a -> t (parens $ text "*" <> a)) $ type2C t
-    type2C' (RecordType tvs union) = do
-        t <- withState' f $ mapM (tvar2C False False True False) tvs
-        u <- unions
-        return $ \i -> text "struct __" <> i <+> lbrace $+$ nest 4 ((vcat . map (<> semi) . concat $ t) $$ u) $+$ rbrace <+> i
-        where
-            f s = s{currentUnit = ""}
-            unions = case union of
-                     Nothing -> return empty
-                     Just a -> do
-                         structs <- mapM struct2C a
-                         return $ text "union" $+$ braces (nest 4 $ vcat structs) <> semi
-            struct2C tvs = do
-                t <- withState' f $ mapM (tvar2C False False True False) tvs
-                return $ text "struct" $+$ braces (nest 4 (vcat . map (<> semi) . concat $ t)) <> semi
-    type2C' (RangeType r) = return (text "int" <+>)
-    type2C' (Sequence ids) = do
-        is <- mapM (id2C IOInsert . setBaseType bt) ids
-        return (text "enum" <+> (braces . vcat . punctuate comma . map (\(a, b) -> a <+> equals <+> text "0x" <> text (showHex b "")) $ zip is [0..]) <+>)
-        where
-            bt = BTEnum $ map (\(Identifier i _) -> map toLower i) ids
-    type2C' (ArrayDecl Nothing t) = type2C (PointerTo t)
-    type2C' (ArrayDecl (Just r) t) = do
-        t' <- type2C t
-        lt <- gets lastType
-        ft <- case lt of
-                -- BTFunction {} -> type2C (PointerTo t)
-                _ -> return t'
-        r' <- initExpr2C (InitRange r)
-        return $ \i -> ft i <> brackets r'
-    type2C' (Set t) = return (text "<<set>>" <+>)
-    type2C' (FunctionType returnType params) = do
-        t <- type2C returnType
-        p <- withState' id $ functionParams2C params
-        return (\i -> (t empty <> (parens $ text "*" <> i) <> parens p))
-    type2C' (DeriveType (InitBinOp _ _ i)) = type2C' (DeriveType i)
-    type2C' (DeriveType (InitPrefixOp _ i)) = type2C' (DeriveType i)
-    type2C' (DeriveType (InitNumber _)) = return (text "int" <+>)
-    type2C' (DeriveType (InitHexNumber _)) = return (text "int" <+>)
-    type2C' (DeriveType (InitFloat _)) = return (text "float" <+>)
-    type2C' (DeriveType (BuiltInFunction {})) = return (text "int" <+>)
-    type2C' (DeriveType (InitString {})) = return (text "string255" <+>)
-    type2C' (DeriveType r@(InitReference {})) = do
-        initExpr2C r
-        t <- gets lastType
-        return (baseType2C (show r) t <+>)
-    type2C' (DeriveType a) = error $ "Can't derive type from " ++ show a
-
-phrase2C :: Phrase -> State RenderState Doc
-phrase2C (Phrases p) = do
-    ps <- mapM phrase2C p
-    return $ text "{" $+$ (nest 4 . vcat $ ps) $+$ text "}"
-phrase2C (ProcCall f@(FunCall {}) []) = liftM (<> semi) $ ref2C f
-phrase2C (ProcCall ref []) = liftM (<> semi) $ ref2CF ref
-phrase2C (ProcCall ref params) = error $ "ProcCall"{-do
-    r <- ref2C ref
-    ps <- mapM expr2C params
-    return $ r <> parens (hsep . punctuate (char ',') $ ps) <> semi -}
-phrase2C (IfThenElse (expr) phrase1 mphrase2) = do
-    e <- expr2C expr
-    p1 <- (phrase2C . wrapPhrase) phrase1
-    el <- elsePart
-    return $
-        text "if" <> parens e $+$ p1 $+$ el
-    where
-    elsePart | isNothing mphrase2 = return $ empty
-             | otherwise = liftM (text "else" $$) $ (phrase2C . wrapPhrase) (fromJust mphrase2)
-phrase2C (Assignment ref expr) = do
-    r <- ref2C ref
-    t <- gets lastType
-    case (t, expr) of
-        (BTFunction {}, (Reference r')) -> do
-            e <- ref2C r'
-            return $ r <+> text "=" <+> e <> semi
-        (BTString, _) -> do
-            e <- expr2C expr
-            lt <- gets lastType
-            case lt of
-                -- assume pointer to char for simplicity
-                BTPointerTo _ -> do
-                    e <- expr2C $ Reference $ FunCall [Reference $ RefExpression expr] (SimpleReference (Identifier "pchar2str" BTUnknown))
-                    return $ r <+> text "=" <+> e <> semi
-                BTString -> do
-                    e <- expr2C expr
-                    return $ r <+> text "=" <+> e <> semi
-                _ -> error $ "Assignment to string from " ++ show lt
-        (BTArray _ _ _, _) -> do
-            case expr of
-                Reference er -> do
-                    exprRef <- ref2C er
-                    exprT <- gets lastType
-                    case exprT of
-                        BTArray RangeInfinite _ _ ->
-                            return $ text "FIXME: assign a dynamic array to an array"
-                        BTArray _ _ _ -> phrase2C $
-                                ProcCall (FunCall
-                                    [
-                                    Reference $ ref
-                                    , Reference $ RefExpression expr
-                                    , Reference $ FunCall [expr] (SimpleReference (Identifier "sizeof" BTUnknown))
-                                    ]
-                                    (SimpleReference (Identifier "memcpy" BTUnknown))
-                                    ) []
-                        _ -> return $ text "FIXME: assign a non-specific value to an array"
-
-                _ -> return $ text "FIXME: dynamic array assignment 2"
-        _ -> do
-            e <- expr2C expr
-            return $ r <+> text "=" <+> e <> semi
-phrase2C (WhileCycle expr phrase) = do
-    e <- expr2C expr
-    p <- phrase2C $ wrapPhrase phrase
-    return $ text "while" <> parens e $$ p
-phrase2C (SwitchCase expr cases mphrase) = do
-    e <- expr2C expr
-    cs <- mapM case2C cases
-    d <- dflt
-    return $
-        text "switch" <> parens e $+$ braces (nest 4 . vcat $ cs ++ d)
-    where
-    case2C :: ([InitExpression], Phrase) -> State RenderState Doc
-    case2C (e, p) = do
-        ies <- mapM range2C e
-        ph <- phrase2C p
-        return $
-             vcat (map (\i -> text "case" <+> i <> colon) . concat $ ies) <> nest 4 (ph $+$ text "break;")
-    dflt | isNothing mphrase = return [text "default: break;"] -- avoid compiler warning
-         | otherwise = do
-             ph <- mapM phrase2C $ fromJust mphrase
-             return [text "default:" <+> nest 4 (vcat ph)]
-
-phrase2C wb@(WithBlock ref p) = do
-    r <- ref2C ref
-    t <- gets lastType
-    case t of
-        (BTRecord _ rs) -> withRecordNamespace (render r ++ ".") (rec2Records rs) $ phrase2C $ wrapPhrase p
-        a -> do
-            error $ "'with' block referencing non-record type " ++ show a ++ "\n" ++ show wb
-phrase2C (ForCycle i' e1' e2' p up) = do
-    i <- id2C IOLookup i'
-    iType <- gets lastIdTypeDecl
-    e1 <- expr2C e1'
-    e2 <- expr2C e2'
-    let inc = if up then "inc" else "dec"
-    let add = if up then "+ 1" else "- 1"
-    let iEnd = i <> text "__end__"
-    ph <- phrase2C . appendPhrase (BuiltInFunctionCall [Reference $ SimpleReference i'] (SimpleReference (Identifier inc BTUnknown))) $ wrapPhrase p
-    return . braces $
-        i <+> text "=" <+> e1 <> semi
-        $$
-        iType <+> iEnd <+> text "=" <+> e2 <> semi
-        $$
-        text "if" <+> (parens $ i <+> text "<=" <+> iEnd) <+> text "do" <+> ph <+>
-        text "while" <> parens (i <+> text "!=" <+> iEnd <+> text add) <> semi
-    where
-        appendPhrase p (Phrases ps) = Phrases $ ps ++ [p]
-phrase2C (RepeatCycle e' p') = do
-    e <- expr2C e'
-    p <- phrase2C (Phrases p')
-    return $ text "do" <+> p <+> text "while" <> parens (text "!" <> parens e) <> semi
-phrase2C NOP = return $ text ";"
-
-phrase2C (BuiltInFunctionCall [] (SimpleReference (Identifier "exit" BTUnknown))) = do
-    f <- gets currentFunctionResult
-    if null f then
-        return $ text "return" <> semi
-        else
-        return $ text "return" <+> text f <> semi
-phrase2C (BuiltInFunctionCall [] (SimpleReference (Identifier "break" BTUnknown))) = return $ text "break" <> semi
-phrase2C (BuiltInFunctionCall [] (SimpleReference (Identifier "continue" BTUnknown))) = return $ text "continue" <> semi
-phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "exit" BTUnknown))) = liftM (\e -> text "return" <+> e <> semi) $ expr2C e
-phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "dec" BTUnknown))) = liftM (\e -> text "--" <> e <> semi) $ expr2C e
-phrase2C (BuiltInFunctionCall [e1, e2] (SimpleReference (Identifier "dec" BTUnknown))) = liftM2 (\a b -> a <> text " -= " <> b <> semi) (expr2C e1) (expr2C e2)
-phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "inc" BTUnknown))) = liftM (\e -> text "++" <> e <> semi) $ expr2C e
-phrase2C (BuiltInFunctionCall [e1, e2] (SimpleReference (Identifier "inc" BTUnknown))) = liftM2 (\a b -> a <+> text "+=" <+> b <> semi) (expr2C e1) (expr2C e2)
-phrase2C a = error $ "phrase2C: " ++ show a
-
-wrapPhrase p@(Phrases _) = p
-wrapPhrase p = Phrases [p]
-
-expr2C :: Expression -> State RenderState Doc
-expr2C (Expression s) = return $ text s
-expr2C b@(BinOp op expr1 expr2) = do
-    e1 <- expr2C expr1
-    t1 <- gets lastType
-    e2 <- expr2C expr2
-    t2 <- gets lastType
-    case (op2C op, t1, t2) of
-        ("+", BTString, BTString) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strconcat" (BTFunction False 2 BTString))
-        ("+", BTString, BTChar) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strappend" (BTFunction False 2 BTString))
-        ("+", BTChar, BTString) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strprepend" (BTFunction False 2 BTString))
-        ("+", BTChar, BTChar) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_chrconcat" (BTFunction False 2 BTString))
-        ("==", BTString, BTChar) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strcomparec" (BTFunction False 2 BTBool))
-        ("==", BTString, BTString) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strcompare" (BTFunction False 2 BTBool))
-        ("!=", BTString, _) -> expr2C $ BuiltInFunCall [expr1, expr2] (SimpleReference $ Identifier "_strncompare" (BTFunction False 2 BTBool))
-        ("&", BTBool, _) -> return $ parens e1 <+> text "&&" <+> parens e2
-        ("|", BTBool, _) -> return $ parens e1 <+> text "||" <+> parens e2
-        (_, BTRecord t1 _, BTRecord t2 _) -> do
-            i <- op2CTyped op [SimpleType (Identifier t1 undefined), SimpleType (Identifier t2 undefined)]
-            ref2C $ FunCall [expr1, expr2] (SimpleReference i)
-        (_, BTRecord t1 _, BTInt) -> do
-            -- aw, "LongInt" here is hwengine-specific hack
-            i <- op2CTyped op [SimpleType (Identifier t1 undefined), SimpleType (Identifier "LongInt" undefined)]
-            ref2C $ FunCall [expr1, expr2] (SimpleReference i)
-        ("in", _, _) ->
-            case expr2 of
-                 SetExpression set -> do
-                     ids <- mapM (id2C IOLookup) set
-                     modify(\s -> s{lastType = BTBool})
-                     return . parens . hcat . punctuate (text " || ") . map (\i -> parens $ e1 <+> text "==" <+> i) $ ids
-                 _ -> error "'in' against not set expression"
-        (o, _, _) | o `elem` boolOps -> do
-                        modify(\s -> s{lastType = BTBool})
-                        return $ parens e1 <+> text o <+> parens e2
-                  | otherwise -> do
-                        o' <- return $ case o of
-                            "/(float)" -> text "/(float)" -- pascal returns real value
-                            _ -> text o
-                        e1' <- return $ case (o, t1, t2) of
-                                ("-", BTInt, BTInt) -> parens $ text "(int64_t)" <+> parens e1
-                                _ -> parens e1
-                        e2' <- return $ case (o, t1, t2) of
-                                ("-", BTInt, BTInt) -> parens $ text "(int64_t)" <+> parens e2
-                                _ -> parens e2
-                        return $ e1' <+> o' <+> e2'
-    where
-        boolOps = ["==", "!=", "<", ">", "<=", ">="]
-expr2C (NumberLiteral s) = do
-    modify(\s -> s{lastType = BTInt})
-    return $ text s
-expr2C (FloatLiteral s) = return $ text s
-expr2C (HexNumber s) = return $ text "0x" <> (text . map toLower $ s)
-{-expr2C (StringLiteral [a]) = do
-    modify(\s -> s{lastType = BTChar})
-    return . quotes . text $ escape a
-    where
-        escape '\'' = "\\\'"
-        escape a = [a]-}
-expr2C (StringLiteral s) = addStringConst s
-expr2C (PCharLiteral s) = return . doubleQuotes $ text s
-expr2C (Reference ref) = ref2CF ref
-expr2C (PrefixOp op expr) = do
-    e <- expr2C expr
-    lt <- gets lastType
-    case lt of
-        BTRecord t _ -> do
-            i <- op2CTyped op [SimpleType (Identifier t undefined)]
-            ref2C $ FunCall [expr] (SimpleReference i)
-        BTBool -> do
-            o <- return $ case op of
-                     "not" -> text "!"
-                     _ -> text (op2C op)
-            return $ o <> parens e
-        _ -> return $ text (op2C op) <> parens e
-expr2C Null = return $ text "NULL"
-expr2C (CharCode a) = do
-    modify(\s -> s{lastType = BTChar})
-    return $ quotes $ text "\\x" <> text (showHex (read a) "")
-expr2C (HexCharCode a) = if length a <= 2 then return $ quotes $ text "\\x" <> text (map toLower a) else expr2C $ HexNumber a
-expr2C (SetExpression ids) = mapM (id2C IOLookup) ids >>= return . parens . hcat . punctuate (text " | ")
-
-expr2C (BuiltInFunCall [e] (SimpleReference (Identifier "low" _))) = do
-    e' <- liftM (map toLower . render) $ expr2C e
-    lt <- gets lastType
-    case lt of
-         BTEnum a -> return $ int 0
-         BTInt -> case e' of
-                  "longint" -> return $ int (-2147483648)
-         BTArray {} -> return $ int 0
-         _ -> error $ "BuiltInFunCall 'low' from " ++ show e ++ "\ntype: " ++ show lt
-expr2C (BuiltInFunCall [e] (SimpleReference (Identifier "high" _))) = do
-    e' <- liftM (map toLower . render) $ expr2C e
-    lt <- gets lastType
-    case lt of
-         BTEnum a -> return . int $ length a - 1
-         BTInt -> case e' of
-                  "longint" -> return $ int (2147483647)
-         BTString -> return $ int 255
-         BTArray (RangeFromTo _ n) _ _ -> initExpr2C n
-         _ -> error $ "BuiltInFunCall 'high' from " ++ show e ++ "\ntype: " ++ show lt
-expr2C (BuiltInFunCall [e] (SimpleReference (Identifier "ord" _))) = liftM parens $ expr2C e
-expr2C (BuiltInFunCall [e] (SimpleReference (Identifier "succ" _))) = liftM (<> text " + 1") $ expr2C e
-expr2C (BuiltInFunCall [e] (SimpleReference (Identifier "pred" _))) = liftM (<> text " - (int64_t)1") $ expr2C e
-expr2C (BuiltInFunCall [e] (SimpleReference (Identifier "length" _))) = do
-    e' <- expr2C e
-    lt <- gets lastType
-    modify (\s -> s{lastType = BTInt})
-    case lt of
-         BTString -> return $ text "fpcrtl_Length" <> parens e'
-         BTArray RangeInfinite _ _ -> error $ "length() called on variable size array " ++ show e'
-         BTArray (RangeFromTo _ n) _ _ -> initExpr2C (BuiltInFunction "succ" [n])
-         _ -> error $ "length() called on " ++ show lt
-expr2C (BuiltInFunCall params ref) = do
-    r <- ref2C ref
-    t <- gets lastType
-    ps <- mapM expr2C params
-    case t of
-        BTFunction _ _ t' -> do
-            modify (\s -> s{lastType = t'})
-        _ -> error $ "BuiltInFunCall lastType: " ++ show t
-    return $
-        r <> parens (hsep . punctuate (char ',') $ ps)
-expr2C a = error $ "Don't know how to render " ++ show a
-
-ref2CF :: Reference -> State RenderState Doc
-ref2CF (SimpleReference name) = do
-    i <- id2C IOLookup name
-    t <- gets lastType
-    case t of
-         BTFunction _ _ rt -> do
-             modify(\s -> s{lastType = rt})
-             return $ i <> parens empty --xymeng: removed parens
-         _ -> return $ i
-ref2CF r@(RecordField (SimpleReference _) (SimpleReference _)) = do
-    i <- ref2C r
-    t <- gets lastType
-    case t of
-         BTFunction _ _ rt -> do
-             modify(\s -> s{lastType = rt})
-             return $ i <> parens empty
-         _ -> return $ i
-ref2CF r = ref2C r
-
-ref2C :: Reference -> State RenderState Doc
--- rewrite into proper form
-ref2C (RecordField ref1 (ArrayElement exprs ref2)) = ref2C $ ArrayElement exprs (RecordField ref1 ref2)
-ref2C (RecordField ref1 (Dereference ref2)) = ref2C $ Dereference (RecordField ref1 ref2)
-ref2C (RecordField ref1 (RecordField ref2 ref3)) = ref2C $ RecordField (RecordField ref1 ref2) ref3
-ref2C (RecordField ref1 (FunCall params ref2)) = ref2C $ FunCall params (RecordField ref1 ref2)
-ref2C (ArrayElement (a:b:xs) ref) = ref2C $ ArrayElement (b:xs) (ArrayElement [a] ref)
--- conversion routines
-ref2C ae@(ArrayElement [expr] ref) = do
-    e <- expr2C expr
-    r <- ref2C ref
-    t <- gets lastType
-    case t of
-         (BTArray _ _ t') -> modify (\st -> st{lastType = t'})
---         (BTFunctionReturn _ (BTArray _ _ t')) -> modify (\st -> st{lastType = t'})
---         (BTFunctionReturn _ (BTString)) -> modify (\st -> st{lastType = BTChar})
-         (BTString) -> modify (\st -> st{lastType = BTChar})
-         (BTPointerTo t) -> do
-                t'' <- fromPointer (show t) =<< gets lastType
-                case t'' of
-                     BTChar -> modify (\st -> st{lastType = BTChar})
-                     a -> error $ "Getting element of " ++ show a ++ "\nReference: " ++ show ae
-         a -> error $ "Getting element of " ++ show a ++ "\nReference: " ++ show ae
-    case t of
-         BTString ->  return $ r <> text ".s" <> brackets e
-         _ -> return $ r <> brackets e
-ref2C (SimpleReference name) = id2C IOLookup name
-ref2C rf@(RecordField (Dereference ref1) ref2) = do
-    r1 <- ref2C ref1
-    t <- fromPointer (show ref1) =<< gets lastType
-    r2 <- case t of
-        BTRecord _ rs -> withRecordNamespace "" (rec2Records rs) $ ref2C ref2
-        BTUnit -> error "What??"
-        a -> error $ "dereferencing from " ++ show a ++ "\n" ++ show rf
-    return $
-        r1 <> text "->" <> r2
-ref2C rf@(RecordField ref1 ref2) = do
-    r1 <- ref2C ref1
-    t <- gets lastType
-    case t of
-        BTRecord _ rs -> do
-            r2 <- withRecordNamespace "" (rec2Records rs) $ ref2C ref2
-            return $ r1 <> text "." <> r2
-        BTUnit -> withLastIdNamespace $ ref2C ref2
-        a -> error $ "dereferencing from " ++ show a ++ "\n" ++ show rf
-ref2C d@(Dereference ref) = do
-    r <- ref2C ref
-    t <- fromPointer (show d) =<< gets lastType
-    modify (\st -> st{lastType = t})
-    return $ (parens $ text "*" <> r)
-ref2C f@(FunCall params ref) = do
-    r <- fref2C ref
-    t <- gets lastType
-    case t of
-        BTFunction _ _ t' -> do
-            ps <- liftM (parens . hsep . punctuate (char ',')) $ mapM expr2C params
-            modify (\s -> s{lastType = t'})
-            return $ r <> ps
-        _ -> case (ref, params) of
-                  (SimpleReference i, [p]) -> ref2C $ TypeCast i p
-                  _ -> error $ "ref2C FunCall erroneous type cast detected: " ++ show f ++ "\nType detected: " ++ show t
-    where
-    fref2C (SimpleReference name) = id2C (IOLookupFunction $ length params) name
-    fref2C a = ref2C a
-
-ref2C (Address ref) = do
-    r <- ref2C ref
-    lt <- gets lastType
-    case lt of
-        BTFunction True _ _ -> return $ text "&" <> parens (r <> text "__vars")
-        _ -> return $ text "&" <> parens r
-ref2C (TypeCast t'@(Identifier i _) expr) = do
-    lt <- expr2C expr >> gets lastType
-    case (map toLower i, lt) of
-        ("pchar", BTString) -> ref2C $ FunCall [expr] (SimpleReference (Identifier "_pchar" $ BTPointerTo BTChar))
-        ("shortstring", BTPointerTo _) -> ref2C $ FunCall [expr] (SimpleReference (Identifier "pchar2str" $ BTString))
-        (a, _) -> do
-            e <- expr2C expr
-            t <- id2C IOLookup t'
-            return . parens $ parens t <> e
-ref2C (RefExpression expr) = expr2C expr
-
-
-op2C :: String -> String
-op2C "or" = "|"
-op2C "and" = "&"
-op2C "not" = "~"
-op2C "xor" = "^"
-op2C "div" = "/"
-op2C "mod" = "%"
-op2C "shl" = "<<"
-op2C "shr" = ">>"
-op2C "<>" = "!="
-op2C "=" = "=="
-op2C "/" = "/(float)"
-op2C a = a
-
--- a/tools/unitCycles.hs	Tue Apr 30 01:47:30 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-module Main where
-
-import PascalParser
-import System
-import Control.Monad
-import Data.Either
-import Data.List
-import Data.Graph
-import Data.Maybe
-
-unident :: Identificator -> String
-unident (Identificator s) = s
-
-extractUnits :: PascalUnit -> (String, [String])
-extractUnits (Program (Identificator name) (Implementation (Uses idents) _ _) _) = ("program " ++ name, map unident idents)
-extractUnits (Unit (Identificator name) (Interface (Uses idents1) _) (Implementation (Uses idents2) _ _) _ _) = (name, map unident $ idents1 ++ idents2)
-
-f :: [(String, [String])] -> String
-f = unlines . map showSCC . stronglyConnComp . map (\(a, b) -> (a, a, b))
-    where
-    showSCC (AcyclicSCC v) = v
-    showSCC (CyclicSCC vs) = intercalate ", " vs
-
-myf :: [(String, [String])] -> String
-myf d = unlines . map (findCycle . fst) $ d
-    where
-    findCycle :: String -> String
-    findCycle searched = searched ++ ": " ++ (intercalate ", " $ fc searched [])
-        where
-        fc :: String -> [String] -> [String]
-        fc curSearch visited = let uses = curSearch `lookup` d; res = dropWhile null . map t $ fromJust uses in if isNothing uses || null res then [] else head res
-            where
-            t u =
-                if u == searched then
-                    [u]
-                    else
-                    if u `elem` visited then
-                        []
-                        else
-                        let chain = fc u (u:visited) in if null chain then [] else u:chain
-
-
-main = do
-    fileNames <- getArgs
-    files <- mapM readFile fileNames
-    putStrLn . myf . map extractUnits . rights . map parsePascalUnit $ files
--- a/tools/w32DownloadUnzip.vbs	Tue Apr 30 01:47:30 2013 +0200
+++ b/tools/w32DownloadUnzip.vbs	Thu Jun 13 22:27:23 2013 +0200
@@ -7,6 +7,7 @@
 ' References
 '   http://superuser.com/questions/59465/is-it-possible-to-download-using-the-windows-command-line
 '   http://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
+'   http://stackoverflow.com/questions/424331/get-the-current-temporary-directory-path-in-vbscript
 
 Set ArgObj = WScript.Arguments
 
@@ -23,7 +24,8 @@
     End if
 End if
 
-strHDLocation = "C:\Windows\Temp\temp.zip"
+' Temporary directory
+strHDLocation = WScript.CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2) + "\hwlibtemp.zip"
 
 ' Fetch the file
 WScript.Echo ( "Trying to download from " & strFileURL)
@@ -37,7 +39,7 @@
     objADOStream.Type = 1 'adTypeBinary
 
     objADOStream.Write objXMLHTTP.ResponseBody
-    objADOStream.Position = 0    'Set the stream position to the start
+    objADOStream.Position = 0 'Set the stream position to the start
 
     Set objFSO = Createobject("Scripting.FileSystemObject")
     If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
@@ -46,12 +48,12 @@
     objADOStream.SaveToFile strHDLocation
     objADOStream.Close
     Set objADOStream = Nothing
+    Set objXMLHTTP = Nothing
 Else
     WScript.Echo ("Error downloading file (error code: " & objXMLHTTP.Status & ")")
     Set objXMLHTTP = Nothing
     WScript.Quit
 End if
-Set objXMLHTTP = Nothing
 
 WScript.Echo ( "Extracting file to " & strOutputPath)
 Set objShell = CreateObject( "Shell.Application" )