Merge Racer/TechRacer tie handling
authorWuzzy <Wuzzy2@mail.ru>
Thu, 04 Oct 2018 21:17:21 +0200
changeset 13841 b2cc4e4e380c
parent 13840 219c2e588874 (current diff)
parent 13838 2b6702777c8c (diff)
child 13842 35ba3a550cad
Merge Racer/TechRacer tie handling
ChangeLog.txt
QTfrontend/res/campaign/A_Classic_Fairytale/backstab.png
QTfrontend/res/campaign/A_Classic_Fairytale/dragon.png
QTfrontend/res/campaign/A_Classic_Fairytale/enemy.png
QTfrontend/res/campaign/A_Classic_Fairytale/epil.png
QTfrontend/res/campaign/A_Classic_Fairytale/family.png
QTfrontend/res/campaign/A_Classic_Fairytale/first_blood.png
QTfrontend/res/campaign/A_Classic_Fairytale/journey.png
QTfrontend/res/campaign/A_Classic_Fairytale/queen.png
QTfrontend/res/campaign/A_Classic_Fairytale/shadow.png
QTfrontend/res/campaign/A_Classic_Fairytale/united.png
QTfrontend/res/campaign/A_Space_Adventure/cosmos.png
QTfrontend/res/campaign/A_Space_Adventure/death01.png
QTfrontend/res/campaign/A_Space_Adventure/death02.png
QTfrontend/res/campaign/A_Space_Adventure/desert01.png
QTfrontend/res/campaign/A_Space_Adventure/desert02.png
QTfrontend/res/campaign/A_Space_Adventure/desert03.png
QTfrontend/res/campaign/A_Space_Adventure/final.png
QTfrontend/res/campaign/A_Space_Adventure/fruit01.png
QTfrontend/res/campaign/A_Space_Adventure/fruit02.png
QTfrontend/res/campaign/A_Space_Adventure/fruit03.png
QTfrontend/res/campaign/A_Space_Adventure/ice01.png
QTfrontend/res/campaign/A_Space_Adventure/ice02.png
QTfrontend/res/campaign/A_Space_Adventure/moon01.png
QTfrontend/res/campaign/A_Space_Adventure/moon02.png
share/hedgewars/Data/Scripts/Multiplayer/Racer.lua
share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua
--- a/.hgignore	Wed Sep 05 20:09:32 2018 +0200
+++ b/.hgignore	Thu Oct 04 21:17:21 2018 +0200
@@ -44,6 +44,7 @@
 *.rej
 project_files/hwc/*.c
 project_files/hwc/*.h
+project_files/hwc/*.out
 project_files/Android-build/SDL-android-project/jni/**
 project_files/Android-build/SDL-android-project/obj
 project_files/Android-build/SDL-android-project/libs/armeabi*
--- a/ChangeLog.txt	Wed Sep 05 20:09:32 2018 +0200
+++ b/ChangeLog.txt	Thu Oct 04 21:17:21 2018 +0200
@@ -9,7 +9,10 @@
  + Increase hedgehog limit to 64
  + Campaigns and missions now use the user's chosen custom clan colors
  + New default brown clan color for better contrast
+ + Allow to change volume during pause
+ + Rename chat command “/team” to “/clan” (but “/team” still works)
  * Functionality of controllers restored
+ * Fix sine gun dealing damage to attacker if shooting up
  * Fix crash when 2 or more controllers were connected
  * Fix hammer and pickhammer not digging correctly at wrap world edge
  * Fix drill rocket exploding when digging at bounce/wrap world edge
@@ -38,9 +41,12 @@
 Frontend:
  + Add setting to disable audio dampening when losing window focus
  + Rework player rankings: Losing clans are now ranked in the reverse order they died
+ + Add-ons now support preview images for campaign missions
+ + Add help button in main menu (link to Hedgewars Wiki)
  * Fix player rankings on round draw: Clans that died in the same turn now have the same rank
  * Fix rare crash when aborting video encoding in progress
  * Fix critical failure to cleanup teams list after rejoining game under certain conditions
+ * Fix displayed Sudden Death timeout being off by one
  * Controllers are detected again
  * Fix failure to shutdown game window properly after player got kicked
  * No longer allow having schemes with equal names (case-insensitive)
@@ -88,12 +94,16 @@
 Campaigns and missions:
  * A Classic Fairytale: Fix clan membership of princess in some missions
  * A Classic Fairytale, Mission 5: Tribe was not in same clan as Natives, screwing up stats a bit
+ * A Space Adventure, Hard Flying: Display current flying time next to team bar
  + A Space Adventure, final mission: Terrain types are easier to distinguish
  * A Space Adventure, Searching in the Dust: Fix display error when destroying device crate
  * A Space Adventure, Searching in the Dust: Don't take away control right above the pit near Sandy
- * A Space Adeventure: Fix clan membership of PAotH in main Death Planet mission
+ * A Space Adventure, Hard Flying: Fix incorrect recorded time, was 6 seconds more than reality
+ * A Space Adventure: Fix clan membership of PAotH in main Death Planet mission
+ * A Space Adventure, final mission: Don't say "Missed" or "Yes, Sir!" when inappropriate
  * The Great Escape: Infinite attack mode did not work
  * Shotgun/Sniper Rifle Target Practicse: Suppress “X remaining” message
+ * Basic Movement Training: Back jumps should be easier now
  * Fix resurrection animation appearing at wrong position for some missions and styles
 
 Content:
@@ -109,8 +119,8 @@
 
 Lua API:
  * Deprecation: Setting TurnTimeLeft/ReadyTimeLeft directly is deprecated and will become useless in future. Use the setter functions below
- + New call: SetTurnTimeLeft(TurnTimeLeft): Set remaining turn time
- + New call: SetReadyTimeLeft(ReadyTimeLeft): Set remaining ready time
+ + New call: SetTurnTimeLeft(newTurnTimeLeft): Set remaining turn time
+ + New call: SetReadyTimeLeft(newReadyTimeLeft): Set remaining ready time
  + New call: Retreat(time [, respectGetAwayTimeFactor): Force current turn into retreating mode
  + New call: GetAmmoTimer(gearUid, ammoType): Returns current set timer for given ammoType and hog gear in ms. Returns nil for non-timerable ammo
  + New call: EnableSwitchHog(): Enable hog switching
--- a/QTfrontend/campaign.cpp	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/campaign.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -137,8 +137,8 @@
                 missionInfo.realName = m_info->value(scriptPrefix+".name", missionInfo.name).toString();
                 missionInfo.description = m_info->value(scriptPrefix + ".desc",
                                             QObject::tr("No description available")).toString();
-                QString image = campfile.value(QString("Mission %1/Script").arg(i)).toString().replace(QString(".lua"),QString(".png"));
-                missionInfo.image = ":/res/campaign/"+campaignName+"/"+image;
+                QString image = campfile.value(QString("Mission %1/Script").arg(i)).toString().replace(QString(".lua"),QString("@2x.png"));
+                missionInfo.image = "physfs://Graphics/Missions/Campaign/"+campaignName+"/"+image;
                 if (!QFile::exists(missionInfo.image))
                     missionInfo.image = ":/res/CampaignDefault.png";
                 missionInfoList.append(missionInfo);
@@ -159,8 +159,8 @@
             missionInfo.realName = m_info->value(scriptPrefix+".name", missionInfo.name).toString();
             missionInfo.description = m_info->value(scriptPrefix + ".desc",
                                             QObject::tr("No description available")).toString();
-            QString image = campfile.value(QString("Mission %1/Script").arg(missionNumber)).toString().replace(QString(".lua"),QString(".png"));
-            missionInfo.image = ":/res/campaign/"+campaignName+"/"+image;
+            QString image = campfile.value(QString("Mission %1/Script").arg(missionNumber)).toString().replace(QString(".lua"),QString("@2x.png"));
+            missionInfo.image = "physfs://Graphics/Missions/Campaign/"+campaignName+"/"+image;
             if (!QFile::exists(missionInfo.image))
                 missionInfo.image = ":/res/CampaignDefault.png";
             missionInfoList.append(missionInfo);
--- a/QTfrontend/game.cpp	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/game.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -346,6 +346,20 @@
     RawSendIPC(buf);
 }
 
+void HWGame::FromNetWarning(const QString & msg)
+{
+    QByteArray buf;
+    HWProto::addStringToBuffer(buf, "s\x00" + msg + "\x20\x20");
+    RawSendIPC(buf);
+}
+
+void HWGame::FromNetError(const QString & msg)
+{
+    QByteArray buf;
+    HWProto::addStringToBuffer(buf, "s\x05" + msg + "\x20\x20");
+    RawSendIPC(buf);
+}
+
 void HWGame::onClientRead()
 {
     quint8 msglen;
--- a/QTfrontend/game.h	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/game.h	Thu Oct 04 21:17:21 2018 +0200
@@ -105,6 +105,8 @@
     public slots:
         void FromNet(const QByteArray & msg);
         void FromNetChat(const QString & msg);
+        void FromNetWarning(const QString & msg);
+        void FromNetError(const QString & msg);
 
     private:
         char msgbuf[MAXMSGCHARS];
--- a/QTfrontend/hedgewars.qrc	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/hedgewars.qrc	Thu Oct 04 21:17:21 2018 +0200
@@ -35,30 +35,6 @@
         <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/campaign/A_Space_Adventure/cosmos.png</file>
-        <file>res/campaign/A_Space_Adventure/moon01.png</file>
-        <file>res/campaign/A_Space_Adventure/moon02.png</file>
-        <file>res/campaign/A_Space_Adventure/ice01.png</file>
-        <file>res/campaign/A_Space_Adventure/ice02.png</file>
-        <file>res/campaign/A_Space_Adventure/desert01.png</file>
-        <file>res/campaign/A_Space_Adventure/desert02.png</file>
-        <file>res/campaign/A_Space_Adventure/desert03.png</file>
-        <file>res/campaign/A_Space_Adventure/fruit01.png</file>
-        <file>res/campaign/A_Space_Adventure/fruit02.png</file>
-        <file>res/campaign/A_Space_Adventure/fruit03.png</file>
-        <file>res/campaign/A_Space_Adventure/death01.png</file>
-        <file>res/campaign/A_Space_Adventure/death02.png</file>
-        <file>res/campaign/A_Space_Adventure/final.png</file>
         <file>res/bonus.png</file>
         <file>res/Hedgehog.png</file>
         <file>res/net.png</file>
@@ -81,6 +57,7 @@
         <file>res/audio.png</file>
         <file>res/camera.png</file>
         <file>res/Settings.png</file>
+        <file>res/Help.png</file>
         <file>res/dropdown.png</file>
         <file>res/dropdown_disabled.png</file>
         <file>res/dropdown_selected.png</file>
@@ -209,6 +186,7 @@
         <file>res/StatsMostSelfDamage.png</file>
         <file>res/StatsSelfKilled.png</file>
         <file>res/StatsSkipped.png</file>
+        <file>res/StatsEverAfter.png</file>
         <file>res/StatsCustomAchievement.png</file>
         <file>res/Start.png</file>
         <file>res/mapRandom.png</file>
--- a/QTfrontend/hwform.cpp	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/hwform.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -246,6 +246,7 @@
     connect(ui.pageMain->BtnDataDownload, SIGNAL(clicked()), pageSwitchMapper, SLOT(map()));
     pageSwitchMapper->setMapping(ui.pageMain->BtnDataDownload, ID_PAGE_DATADOWNLOAD);
 
+    connect(ui.pageMain->BtnHelp, SIGNAL(clicked()), this, SLOT(GoToHelp()));
 
 #ifdef VIDEOREC
     connect(ui.pageMain->BtnVideos, SIGNAL(clicked()), pageSwitchMapper, SLOT(map()));
@@ -641,6 +642,13 @@
     GoToPage(ID_PAGE_SCHEME);
 }
 
+void HWForm::GoToHelp()
+{
+    // For now just opens the Hedgewars Wiki in external browser.
+    // TODO: Replace this with an offline help someday (bug 660).
+    QDesktopServices::openUrl(QUrl("https://hedgewars.org/wiki"));
+}
+
 void HWForm::GoToVideos()
 {
     GoToPage(ID_PAGE_VIDEOS);
@@ -1865,6 +1873,8 @@
     connect(game, SIGNAL(SendConsoleCommand(const QString&)), hwnet, SLOT(consoleCommand(const QString&)));
     connect(game, SIGNAL(SendTeamMessage(const QString &)), hwnet, SLOT(SendTeamMessage(const QString &)));
     connect(hwnet, SIGNAL(chatStringFromNet(const QString &)), game, SLOT(FromNetChat(const QString &)), Qt::QueuedConnection);
+    connect(hwnet, SIGNAL(Warning(const QString&)), game, SLOT(FromNetWarning(const QString&)), Qt::QueuedConnection);
+    connect(hwnet, SIGNAL(Error(const QString&)), game, SLOT(FromNetError(const QString&)), Qt::QueuedConnection);
 
     game->StartNet();
 }
--- a/QTfrontend/hwform.h	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/hwform.h	Thu Oct 04 21:17:21 2018 +0200
@@ -75,6 +75,7 @@
         void GoToSaves();
         void GoToDemos();
         void GoToNet();
+        void GoToHelp();
         void GoToEditWeapons();
         void GoToNewWeapons();
         void GoToWeapons(int index);
Binary file QTfrontend/res/Help.png has changed
Binary file QTfrontend/res/StatsEverAfter.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
Binary file QTfrontend/res/campaign/A_Space_Adventure/cosmos.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/death01.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/death02.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/desert01.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/desert02.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/desert03.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/final.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/fruit01.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/fruit02.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/fruit03.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/ice01.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/ice02.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/moon01.png has changed
Binary file QTfrontend/res/campaign/A_Space_Adventure/moon02.png has changed
--- a/QTfrontend/ui/page/pagecampaign.cpp	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/ui/page/pagecampaign.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -46,7 +46,7 @@
     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);
+    btnPreview = formattedButton("physfs://Graphics/Missions/Campaign/A_Classic_Fairytale/first_blood@2x.png", true);
     btnPreview->setWhatsThis(tr("Start fighting"));
     infoLayout->setAlignment(btnPreview, Qt::AlignHCenter | Qt::AlignVCenter);
 
--- a/QTfrontend/ui/page/pagegamestats.cpp	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/ui/page/pagegamestats.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -401,5 +401,11 @@
             scriptPlayerPosition = info.toInt();
             break;
         }
+        case 'h' :
+        {
+            QString message = "<p><img src=\":/res/StatsEverAfter.png\"> " + PageGameStats::tr("With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.") + "</p>";
+            AddStatText(message);
+            break;
+        }
     }
 }
--- a/QTfrontend/ui/page/pagemain.cpp	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/ui/page/pagemain.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -113,7 +113,10 @@
     BtnVideos->setWhatsThis(tr("Manage videos recorded from game"));
 #endif
 
-    BtnSetup = addButton(":/res/Settings.png", bottomLayout, 2, true, Qt::AlignBottom);
+    BtnHelp = addButton(":/res/Help.png", bottomLayout, 2, true, Qt::AlignBottom);
+    BtnHelp->setWhatsThis(tr("Open the Hedgewars online game manual in your web browser"));
+
+    BtnSetup = addButton(":/res/Settings.png", bottomLayout, 3, true, Qt::AlignBottom);
     BtnSetup->setWhatsThis(tr("Edit game preferences"));
 
     return bottomLayout;
--- a/QTfrontend/ui/page/pagemain.h	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/ui/page/pagemain.h	Thu Oct 04 21:17:21 2018 +0200
@@ -40,6 +40,7 @@
         QPushButton * BtnInfo;
         QPushButton * BtnDataDownload;
         QPushButton * BtnVideos;
+        QPushButton * BtnHelp;
         QLabel * mainNote;
 
     private:
--- a/QTfrontend/ui/page/pagescheme.cpp	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/ui/page/pagescheme.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -30,6 +30,7 @@
 #include "gameSchemeModel.h"
 #include "pagescheme.h"
 #include "FreqSpinBox.h"
+#include "SDTimeoutSpinBox.h"
 #include "MinesTimeSpinBox.h"
 
 
@@ -251,9 +252,21 @@
     l->setWhatsThis(wtSuddenDeath);
     l->setPixmap(QPixmap(":/res/iconSuddenDeathTime.png"));
     glBSLayout->addWidget(l,3,1,1,1);
-    SB_SuddenDeath = new QSpinBox(gbBasicSettings);
+    /* NOTE:
+       The internally stored value for Sudden Death Timeout
+       is defined as
+       "number of full rounds to play till Sudden Death, minus one"
+       i.e. value 0 means Sudden Death starts in 2nd round.
+       The lowest possible internal value is 0.
+       The user-facing value is different, it's defined as
+       "number of full rounds to play till Sudden Death"
+       i.e. the user-facing value 1 is equivalent to internal value 0.
+       We use SDTimeoutSpinBox for the magic to happen. */
+    SB_SuddenDeath = new SDTimeoutSpinBox(gbBasicSettings);
     SB_SuddenDeath->setWhatsThis(wtSuddenDeath);
-    SB_SuddenDeath->setRange(0, 50);
+    // Will display as 1-52
+    SB_SuddenDeath->setRange(0, 51);
+    // Will display as 16
     SB_SuddenDeath->setValue(15);
     SB_SuddenDeath->setSingleStep(3);
     glBSLayout->addWidget(SB_SuddenDeath,3,2,1,1);
--- a/QTfrontend/ui/page/pagescheme.h	Wed Sep 05 20:09:32 2018 +0200
+++ b/QTfrontend/ui/page/pagescheme.h	Thu Oct 04 21:17:21 2018 +0200
@@ -23,6 +23,7 @@
 #include "togglebutton.h"
 
 class FreqSpinBox;
+class SDTimeoutSpinBox;
 class MinesTimeSpinBox;
 
 class PageScheme : public AbstractPage
@@ -80,7 +81,7 @@
         QSpinBox * SB_DamageModifier;
         QSpinBox * SB_TurnTime;
         QSpinBox * SB_InitHealth;
-        QSpinBox * SB_SuddenDeath;
+        SDTimeoutSpinBox * SB_SuddenDeath;
         QSpinBox * SB_WaterRise;
         QSpinBox * SB_HealthDecrease;
         FreqSpinBox * SB_CaseProb;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/ui/widget/SDTimeoutSpinBox.cpp	Thu Oct 04 21:17:21 2018 +0200
@@ -0,0 +1,49 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2015 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/**
+ * @file
+ * @brief SDTimeoutSpinBox class implementation
+ */
+
+#include "SDTimeoutSpinBox.h"
+
+SDTimeoutSpinBox::SDTimeoutSpinBox(QWidget* parent) : QSpinBox(parent)
+{
+    // do nothing
+};
+
+
+QString SDTimeoutSpinBox::textFromValue(int internalValue) const
+{
+    // user-facing value = internal value + 1
+    return QString::number(internalValue + 1);
+}
+
+int SDTimeoutSpinBox::valueFromText(const QString & userFacingString) const
+{
+    // internal value = user-facing value - 1
+    bool ok;
+    int value = userFacingString.toInt(&ok);
+
+    if (ok)
+        return value - 1;
+    // Fallback
+    else
+        return 15;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/ui/widget/SDTimeoutSpinBox.h	Thu Oct 04 21:17:21 2018 +0200
@@ -0,0 +1,65 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2015 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/**
+ * @file
+ * @brief SDTimeoutSpinBox class definition
+ */
+
+#ifndef HEDGEWARS_SDTIMEOUTSPINBOX_H
+#define HEDGEWARS_SDTIMEOUTSPINBOX_H
+
+#include <QObject>
+#include <QSpinBox>
+
+/**
+ * <code>SpinBox</code> for Sudden Death timeout.
+ * The internally stored Sudden Death timeout is different
+ * from the actual number of rounds it takes until SD starts.
+ * e.g. value 0 means SD starts in 2nd round
+ * @author Wuzzy
+ * @since  0.9.25
+ */
+class SDTimeoutSpinBox : public QSpinBox
+{
+        Q_OBJECT
+
+    public:
+        /**
+         * @brief Class constructor.
+         * @param parent parent widget.
+         */
+        SDTimeoutSpinBox(QWidget * parent);
+
+    protected:
+        /**
+         * Returns its value in real number of rounds.
+         * @param internal value integer value to be represented as string.
+         * @return the real number of rounds
+         */
+        QString textFromValue(int value) const;
+        /**
+         * Returns the internally-used value for SD timeout.
+         * @param user-facing string, i.e. real number of rounds
+         * @return internally-stored SD timeout value
+         */
+        int valueFromText(const QString & text) const;
+};
+
+
+#endif // HEDGEWARS_SDTIMEOUTSPINBOX_H
--- a/gameServer/HWProtoCore.hs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer/HWProtoCore.hs	Thu Oct 04 21:17:21 2018 +0200
@@ -65,6 +65,10 @@
         else
         handleCmd_NotEntered cmd
 
+unknownCmdWarningText :: B.ByteString
+unknownCmdWarningText = loc "Unknown command or invalid parameters. Say '/help' in chat for a list of commands."
+
+handleCmd_loggedin ["CMD"] = return [Warning unknownCmdWarningText]
 
 handleCmd_loggedin ["CMD", parameters] = uncurry h $ extractParameters parameters
     where
@@ -74,8 +78,6 @@
         h "SAVE" n | not $ B.null n = let (sn, ln) = B.break (== ' ') n in if B.null ln then return [] else handleCmd ["SAVE", sn, B.tail ln]
         h "DELETE" n | not $ B.null n = handleCmd ["DELETE", 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)
@@ -94,8 +96,6 @@
                      | otherwise = handleCmd ["VOTE", ""]
         h "FORCE" msg | not $ B.null msg = handleCmd ["VOTE", upperCase msg, "FORCE"]
                       | otherwise = handleCmd ["VOTE", "", "FORCE"]
-        h "VOTE" msg | not $ B.null msg = handleCmd ["VOTE", upperCase msg]
-        h "FORCE" msg | not $ B.null msg = handleCmd ["VOTE", upperCase msg, "FORCE"]
         h "MAXTEAMS" n | not $ B.null n = handleCmd ["MAXTEAMS", n]
         h "INFO" n | not $ B.null n = handleCmd ["INFO", n]
         h "HELP" _ = handleCmd ["HELP"]
@@ -113,7 +113,7 @@
                 [ModifyClient (\c -> c{hasSuperPower = True})
                 , AnswerClients [sendChan cl] ["CHAT", nickServer, loc "Super power activated."]
                 ]
-        h _ _ = return [Warning $ loc "Unknown command or invalid parameters. Say '/help' in chat for a list of commands." ]
+        h _ _ = return [Warning unknownCmdWarningText]
 
 
         extractParameters p = let (a, b) = B.break (== ' ') p in (upperCase a, B.dropWhile (== ' ') b)
--- a/gameServer/HWProtoInRoomState.hs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer/HWProtoInRoomState.hs	Thu Oct 04 21:17:21 2018 +0200
@@ -382,9 +382,9 @@
     chans <- roomSameClanChans
     return [AnswerClients chans ["EM", engineMsg cl]]
     where
-        -- FIXME: Use different method to send team message, without hardcoding the format.
-        -- The formatting should be decided by the engine, not the sever. This one cannot be localized.
-        engineMsg cl = toEngineMsg $ B.concat ["b", "[Clan] ", nick cl, ": ", msg, "\x20\x20"]
+        -- This is formatted in a way so it can parsed by engine to make it translatable
+        -- Format: b<PLAYER NAME>]<MESSAGE>
+        engineMsg cl = toEngineMsg $ B.concat ["b", nick cl, "]", msg, "\x20\x20"]
 
 
 handleCmd_inRoom ["BAN", banNick] = do
--- a/gameServer/HWProtoLobbyState.hs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer/HWProtoLobbyState.hs	Thu Oct 04 21:17:21 2018 +0200
@@ -226,4 +226,6 @@
 handleCmd_lobby ["STATS"] = serverAdminOnly $
     return [Stats]
 
-handleCmd_lobby _ = return [ProtocolError "Incorrect command (state: in lobby)"]
+handleCmd_lobby (s:_) = return [ProtocolError $ "Incorrect command '" `B.append` s `B.append` "' (state: in lobby)"]
+
+handleCmd_lobby [] = return [ProtocolError "Empty command (state: in lobby)"]
\ No newline at end of file
--- a/gameServer/HWProtoNEState.hs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer/HWProtoNEState.hs	Thu Oct 04 21:17:21 2018 +0200
@@ -101,4 +101,6 @@
         parsedProto = readInt_ protoNum
 #endif
 
-handleCmd_NotEntered _ = return [ProtocolError "Incorrect command (state: not entered)"]
+handleCmd_NotEntered (s:_) = return [ProtocolError $ "Incorrect command '" `B.append` s `B.append` "' (state: not entered)"]
+
+handleCmd_NotEntered [] = return [ProtocolError "Empty command (state: not entered)"]
\ No newline at end of file
--- a/gameServer2/Cargo.toml	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/Cargo.toml	Thu Oct 04 21:17:21 2018 +0200
@@ -1,22 +1,28 @@
-cargo-features = ["edition"]
-
 [package]
 edition = "2018"
 name = "hedgewars-server"
 version = "0.0.1"
 authors = [ "Andrey Korotaev <a.korotaev@hedgewars.org>" ]
 
+[features]
+official-server = ["openssl"]
+tls-connections = ["openssl"]
+default = []
+
 [dependencies]
 rand = "0.5"
 mio = "0.6"
 slab = "0.4"
 netbuf = "0.4"
 nom = "4.0"
-env_logger = "0.4"
+env_logger = "0.5"
 log = "0.4"
-proptest = "0.8"
 base64 = "0.9"
 bitflags = "1.0"
 serde = "1.0"
-serde_yaml = "0.7"
+serde_yaml = "0.8"
 serde_derive = "1.0"
+openssl = { version = "0.10", optional = true }
+
+[dev-dependencies]
+proptest = "0.8"
\ No newline at end of file
--- a/gameServer2/src/main.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/main.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -1,28 +1,12 @@
 #![allow(unused_imports)]
 #![deny(bare_trait_objects)]
-#![feature(rust_2018_preview)]
-
-extern crate rand;
-extern crate mio;
-extern crate slab;
-extern crate netbuf;
-extern crate base64;
-#[macro_use]
-extern crate nom;
-#[macro_use]
-extern crate log;
-extern crate env_logger;
-#[macro_use] extern crate proptest;
-#[macro_use] extern crate bitflags;
-extern crate serde;
-extern crate serde_yaml;
-#[macro_use] extern crate serde_derive;
 
 //use std::io::*;
 //use rand::Rng;
 //use std::cmp::Ordering;
 use mio::net::*;
 use mio::*;
+use log::*;
 
 mod utils;
 mod server;
@@ -32,7 +16,7 @@
 use std::time::Duration;
 
 fn main() {
-    env_logger::init().unwrap();
+    env_logger::init();
 
     info!("Hedgewars game server, protocol {}", utils::PROTOCOL_VERSION);
 
--- a/gameServer2/src/protocol/messages.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/protocol/messages.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -20,7 +20,7 @@
     Nick(String),
     Proto(u16),
     Password(String, String),
-    Checker(u32, String, String),
+    Checker(u16, String, String),
     // lobby
     List,
     Chat(String),
@@ -77,6 +77,7 @@
     Bye(String),
     Nick(String),
     Proto(u16),
+    ServerAuth(String),
     LobbyLeft(String, String),
     LobbyJoined(Vec<String>),
     ChatMsg {nick: String, msg: String},
@@ -99,10 +100,14 @@
     RoundFinished,
 
     ServerMessage(String),
+    Notice(String),
     Warning(String),
     Error(String),
     Connected(u32),
     Unreachable,
+
+    //Deprecated messages
+    LegacyReady(bool, Vec<String>)
 }
 
 pub fn server_chat(msg: String) -> HWServerMessage  {
@@ -122,8 +127,8 @@
 
             Ammo(n, None) => ("AMMO".to_string(), vec![n.to_string()]),
             Ammo(n, Some(s)) => ("AMMO".to_string(), vec![n.to_string(), s.to_string()]),
-            Scheme(n, None) => ("SCHEME".to_string(), vec![n.to_string()]),
-            Scheme(n, Some(s)) => ("SCHEME".to_string(), {
+            Scheme(n, s) if s.is_empty() => ("SCHEME".to_string(), vec![n.to_string()]),
+            Scheme(n, s) => ("SCHEME".to_string(), {
                 let mut v = vec![n.to_string()];
                 v.extend(s.clone().into_iter());
                 v
@@ -151,6 +156,7 @@
     };
 }
 
+#[cfg(test)]
 macro_rules! several {
     [$part: expr] => { once($part) };
     [$part: expr, $($other: expr),*] => { once($part).chain(several![$($other),*]) };
@@ -161,6 +167,7 @@
      *
      * This is the inverse of the `message` parser.
      */
+    #[cfg(test)]
     pub(crate) fn to_raw_protocol(&self) -> String {
         use self::HWProtocolMessage::*;
         match self {
@@ -265,6 +272,7 @@
             Bye(msg) => msg!["BYE", msg],
             Nick(nick) => msg!["NICK", nick],
             Proto(proto) => msg!["PROTO", proto],
+            ServerAuth(hash) => msg!["SERVER_AUTH", hash],
             LobbyLeft(nick, msg) => msg!["LOBBY:LEFT", nick, msg],
             LobbyJoined(nicks) =>
                 construct_message(&["LOBBY:JOINED"], &nicks),
@@ -295,8 +303,13 @@
             RoundFinished => msg!["ROUND_FINISHED"],
             ChatMsg {nick, msg} => msg!["CHAT", nick, msg],
             ServerMessage(msg) => msg!["SERVER_MESSAGE", msg],
+            Notice(msg) => msg!["NOTICE", msg],
             Warning(msg) => msg!["WARNING", msg],
             Error(msg) => msg!["ERROR", msg],
+
+            LegacyReady(is_ready, nicks) =>
+                construct_message(&[if *is_ready {"READY"} else {"NOT_READY"}], &nicks),
+
             _ => msg!["ERROR", "UNIMPLEMENTED"],
         }
     }
--- a/gameServer2/src/protocol/mod.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/protocol/mod.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -7,6 +7,7 @@
 };
 
 pub mod messages;
+#[cfg(test)]
 pub mod test;
 mod parser;
 
--- a/gameServer2/src/protocol/parser.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/protocol/parser.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -14,11 +14,15 @@
     ops::Range
 };
 use super::{
-    messages::{HWProtocolMessage, HWProtocolMessage::*},
-    test::gen_proto_msg
+    messages::{HWProtocolMessage, HWProtocolMessage::*}
+};
+#[cfg(test)]
+use {
+    super::test::gen_proto_msg,
+    proptest::{proptest, proptest_helper}
 };
 use crate::server::coretypes::{
-    HedgehogInfo, TeamInfo, GameCfg, VoteType
+    HedgehogInfo, TeamInfo, GameCfg, VoteType, MAX_HEDGEHOGS_PER_TEAM
 };
 
 named!(end_of_message, tag!("\n\n"));
@@ -42,7 +46,7 @@
 named!(hog_line<&[u8], HedgehogInfo>,
     do_parse!(name: str_line >> eol >> hat: str_line >>
         (HedgehogInfo{name: name.to_string(), hat: hat.to_string()})));
-named!(_8_hogs<&[u8], [HedgehogInfo; 8]>,
+named!(_8_hogs<&[u8], [HedgehogInfo; MAX_HEDGEHOGS_PER_TEAM as usize]>,
     do_parse!(h1: hog_line >> eol >> h2: hog_line >> eol >>
               h3: hog_line >> eol >> h4: hog_line >> eol >>
               h5: hog_line >> eol >> h6: hog_line >> eol >>
@@ -131,7 +135,7 @@
                     s: a_line     >>
                     (Password(p, s)))
     | do_parse!(tag!("CHECKER")   >> eol >>
-                    i: u32_line   >> eol >>
+                    i: u16_line   >> eol >>
                     n: a_line     >> eol >>
                     p: a_line     >>
                     (Checker(i, n, p)))
@@ -196,7 +200,7 @@
     | do_parse!(tag!("SCHEME")   >> eol >>
                 name: a_line     >>
                 values: opt!(preceded!(eol, separated_list!(eol, a_line))) >>
-                (GameCfg::Scheme(name, values)))
+                (GameCfg::Scheme(name, values.unwrap_or(Vec::new()))))
     | do_parse!(tag!("FEATURE_SIZE") >> eol >>
                 value: u32_line    >>
                 (GameCfg::FeatureSize(value)))
@@ -242,6 +246,7 @@
 
 named!(pub extract_messages<&[u8], Vec<HWProtocolMessage> >, many0!(complete!(message)));
 
+#[cfg(test)]
 proptest! {
     #[test]
     fn is_parser_composition_idempotent(ref msg in gen_proto_msg()) {
--- a/gameServer2/src/protocol/test.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/protocol/test.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -1,7 +1,7 @@
 use proptest::{
     test_runner::{TestRunner, Reason},
     arbitrary::{any, any_with, Arbitrary, StrategyFor},
-    strategy::{Strategy, BoxedStrategy, Just, Map},
+    strategy::{Strategy, BoxedStrategy, Just, Map}
 };
 
 use crate::server::coretypes::{GameCfg, TeamInfo, HedgehogInfo};
@@ -22,9 +22,6 @@
 impl Into2<Option<String>> for Option<Ascii>{
     fn into2(self) -> Option<String> { self.map(|x| {x.0}) }
 }
-impl Into2<Option<Vec<String>>> for Option<Vec<Ascii>>{
-    fn into2(self) -> Option<Vec<String>> { self.map(|x| {x.into2()}) }
-}
 
 macro_rules! proto_msg_case {
     ($val: ident()) =>
@@ -74,7 +71,7 @@
             4 => Seed(Ascii),
             5 => Template(u32),
             6 => Ammo(Ascii, Option<Ascii>),
-            7 => Scheme(Ascii, Option<Vec<Ascii>>),
+            7 => Scheme(Ascii, Vec<Ascii>),
             8 => Script(Ascii),
             9 => Theme(Ascii),
             10 => DrawnMap(Ascii))
@@ -120,7 +117,7 @@
         9 => Nick(Ascii),
         10 => Proto(u16),
         11 => Password(Ascii, Ascii),
-        12 => Checker(u32, Ascii, Ascii),
+        12 => Checker(u16, Ascii, Ascii),
         13 => List(),
         14 => Chat(Ascii),
         15 => CreateRoom(Ascii, Option<Ascii>),
--- a/gameServer2/src/server/actions.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/actions.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -143,12 +143,25 @@
         },
         ReactProtocolMessage(msg) =>
             handlers::handle(server, client_id, msg),
-        CheckRegistered =>
-            if server.clients[client_id].protocol_number > 0 && server.clients[client_id].nick != "" {
-                server.react(client_id, vec![
-                    JoinLobby,
-                    ]);
-            },
+        CheckRegistered => {
+            let client = &server.clients[client_id];
+            if client.protocol_number > 0 && client.nick != "" {
+                let has_nick_clash = server.clients.iter().any(
+                    |(id, c)| id != client_id && c.nick == client.nick);
+
+                let actions = if !client.is_checker() && has_nick_clash {
+                    if client.protocol_number < 38 {
+                        vec![ByeClient("Nickname is already in use".to_string())]
+                    } else {
+                        server.clients[client_id].nick.clear();
+                        vec![Notice("NickAlreadyInUse".to_string()).send_self().action()]
+                    }
+                } else {
+                    vec![JoinLobby]
+                };
+                server.react(client_id, actions);
+            }
+        },
         JoinLobby => {
             server.clients[client_id].room_id = Some(server.lobby_id);
 
@@ -466,6 +479,9 @@
                     None => {}
                 }
                 r.master_id = new_id;
+                if !r.is_fixed() && c.protocol_number < 42 {
+                    r.name.replace_range(.., new_nick.as_ref().map_or("[]", String::as_str));
+                }
                 r.set_join_restriction(false);
                 r.set_team_add_restriction(false);
                 let is_fixed = r.is_fixed();
@@ -517,6 +533,8 @@
 
                 if !room.has_multiple_clans() {
                     vec![Warn("The game can't be started with less than two clans!".to_string())]
+                } else if room.protocol_number <= 43 && room.players_number != room.ready_players_number {
+                    vec![Warn("Not all players are ready".to_string())]
                 } else if room.game_info.is_some() {
                     vec![Warn("The game is already in progress".to_string())]
                 } else {
@@ -561,17 +579,13 @@
         }
         FinishRoomGame(room_id) => {
             let mut actions = Vec::new();
-            let old_info;
-            {
-                let r = &mut server.rooms[room_id];
-                old_info = replace(&mut r.game_info, None);
-                r.game_info = None;
-                r.ready_players_number = 1;
-                actions.push(SendRoomUpdate(None));
-                actions.push(RoundFinished.send_all().in_room(r.id).action());
-            }
 
-            if let Some(info) = old_info {
+            let r = &mut server.rooms[room_id];
+            r.ready_players_number = 1;
+            actions.push(SendRoomUpdate(None));
+            actions.push(RoundFinished.send_all().in_room(r.id).action());
+
+            if let Some(info) = replace(&mut r.game_info, None) {
                 for (_, c) in server.clients.iter() {
                     if c.room_id == Some(room_id) && c.is_joined_mid_game() {
                         actions.push(SendRoomData{
@@ -596,9 +610,14 @@
                 } else {
                     None
                 }).collect();
+
             if !nicks.is_empty() {
-                actions.push(ClientFlags("-r".to_string(), nicks)
-                    .send_all().in_room(room_id).action());
+                let msg = if r.protocol_number < 38 {
+                    LegacyReady(false, nicks)
+                } else {
+                    ClientFlags("-r".to_string(), nicks)
+                };
+                actions.push(msg.send_all().in_room(room_id).action());
             }
             server.react(client_id, actions);
         }
--- a/gameServer2/src/server/client.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/client.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -1,4 +1,5 @@
 use super::coretypes::ClientId;
+use bitflags::*;
 
 bitflags!{
     pub struct ClientFlags: u8 {
@@ -7,6 +8,7 @@
         const IS_READY = 0b0000_0100;
         const IS_IN_GAME = 0b0000_1000;
         const IS_JOINED_MID_GAME = 0b0001_0000;
+        const IS_CHECKER = 0b0010_0000;
 
         const NONE = 0b0000_0000;
         const DEFAULT = Self::NONE.bits;
@@ -17,6 +19,8 @@
     pub id: ClientId,
     pub room_id: Option<usize>,
     pub nick: String,
+    pub web_password: String,
+    pub server_salt: String,
     pub protocol_number: u16,
     pub flags: ClientFlags,
     pub teams_in_game: u8,
@@ -25,11 +29,13 @@
 }
 
 impl HWClient {
-    pub fn new(id: ClientId) -> HWClient {
+    pub fn new(id: ClientId, salt: String) -> HWClient {
         HWClient {
             id,
             room_id: None,
             nick: String::new(),
+            web_password: String::new(),
+            server_salt: salt,
             protocol_number: 0,
             flags: ClientFlags::DEFAULT,
             teams_in_game: 0,
@@ -51,10 +57,12 @@
     pub fn is_ready(&self)-> bool { self.contains(ClientFlags::IS_READY) }
     pub fn is_in_game(&self)-> bool { self.contains(ClientFlags::IS_IN_GAME) }
     pub fn is_joined_mid_game(&self)-> bool { self.contains(ClientFlags::IS_JOINED_MID_GAME) }
+    pub fn is_checker(&self)-> bool { self.contains(ClientFlags::IS_CHECKER) }
 
     pub fn set_is_admin(&mut self, value: bool) { self.set(ClientFlags::IS_ADMIN, value) }
     pub fn set_is_master(&mut self, value: bool) { self.set(ClientFlags::IS_MASTER, value) }
     pub fn set_is_ready(&mut self, value: bool) { self.set(ClientFlags::IS_READY, value) }
     pub fn set_is_in_game(&mut self, value: bool) { self.set(ClientFlags::IS_IN_GAME, value) }
     pub fn set_is_joined_mid_game(&mut self, value: bool) { self.set(ClientFlags::IS_JOINED_MID_GAME, value) }
+    pub fn set_is_checker(&mut self, value: bool) { self.set(ClientFlags::IS_CHECKER, value) }
 }
\ No newline at end of file
--- a/gameServer2/src/server/coretypes.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/coretypes.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -1,6 +1,8 @@
 pub type ClientId = usize;
 pub type RoomId = usize;
 
+pub const MAX_HEDGEHOGS_PER_TEAM: u8 = 8;
+
 #[derive(PartialEq, Eq, Clone, Debug)]
 pub enum ServerVar {
     MOTDNew(String),
@@ -18,7 +20,7 @@
     Template(u32),
 
     Ammo(String, Option<String>),
-    Scheme(String, Option<Vec<String>>),
+    Scheme(String, Vec<String>),
     Script(String),
     Theme(String),
     DrawnMap(String)
@@ -34,7 +36,7 @@
     pub flag: String,
     pub difficulty: u8,
     pub hedgehogs_number: u8,
-    pub hedgehogs: [HedgehogInfo; 8],
+    pub hedgehogs: [HedgehogInfo; MAX_HEDGEHOGS_PER_TEAM as usize],
 }
 
 #[derive(PartialEq, Eq, Clone, Debug)]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gameServer2/src/server/handlers/checker.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -0,0 +1,18 @@
+use mio;
+use log::*;
+
+use crate::{
+    server::{
+        server::HWServer,
+        coretypes::ClientId,
+    },
+    protocol::messages::{
+        HWProtocolMessage
+    },
+};
+
+pub fn handle(server: & mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
+    match message {
+        _ => warn!("Unknown command"),
+    }
+}
--- a/gameServer2/src/server/handlers/common.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/handlers/common.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -23,8 +23,8 @@
 #[cfg(test)]
 mod tests {
     use super::*;
-    use protocol::messages::HWServerMessage::ChatMsg;
-    use server::actions::{
+    use crate::protocol::messages::HWServerMessage::ChatMsg;
+    use crate::server::actions::{
         Action::{self, Send}, PendingMessage,
     };
 
--- a/gameServer2/src/server/handlers/inroom.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/handlers/inroom.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -2,7 +2,10 @@
 
 use crate::{
     server::{
-        coretypes::{ClientId, RoomId, Voting, VoteType},
+        coretypes::{
+            ClientId, RoomId, Voting, VoteType, GameCfg,
+            MAX_HEDGEHOGS_PER_TEAM
+        },
         server::HWServer,
         room::{HWRoom, RoomFlags},
         actions::{Action, Action::*}
@@ -20,6 +23,7 @@
 };
 use base64::{encode, decode};
 use super::common::rnd_reply;
+use log::*;
 
 #[derive(Clone)]
 struct ByMsg<'a> {
@@ -53,7 +57,8 @@
     match msg {
         [size, typ, body..] => VALID_MESSAGES.contains(typ)
             && match body {
-                [1...8, team, ..] if *typ == b'h' => team_indices.contains(team),
+                [1...MAX_HEDGEHOGS_PER_TEAM, team, ..] if *typ == b'h' =>
+                    team_indices.contains(team),
                 _ => *typ != b'h'
             },
         _ => false
@@ -164,13 +169,20 @@
                     r.ready_players_number += 1;
                     "+r"
                 };
-                c.set_is_ready(!c.is_ready());
-                let mut v =
-                    vec![ClientFlags(flags.to_string(), vec![c.nick.clone()])
-                        .send_all().in_room(r.id).action()];
+
+                let msg = if c.protocol_number < 38 {
+                    LegacyReady(c.is_ready(), vec![c.nick.clone()])
+                } else {
+                    ClientFlags(flags.to_string(), vec![c.nick.clone()])
+                };
+
+                let mut v = vec![msg.send_all().in_room(r.id).action()];
+
                 if r.is_fixed() && r.ready_players_number == r.players_number {
                     v.push(StartRoomGame(r.id))
                 }
+
+                c.set_is_ready(!c.is_ready());
                 server.react(client_id, v);
             }
         }
@@ -188,7 +200,7 @@
                 } else if r.is_team_add_restricted() {
                     actions.push(Warn("This room currently does not allow adding new teams.".to_string()));
                 } else {
-                    let team = r.add_team(c.id, *info);
+                    let team = r.add_team(c.id, *info, c.protocol_number < 42);
                     c.teams_in_game += 1;
                     c.clan = Some(team.color);
                     actions.push(TeamAccepted(team.name.clone())
@@ -227,7 +239,7 @@
                 let actions = if let Some((_, team)) = r.find_team_and_owner_mut(|t| t.name == team_name) {
                     if !c.is_master() {
                         vec![ProtocolError("You're not the room master!".to_string())]
-                    } else if number < 1 || number > 8
+                    } else if number < 1 || number > MAX_HEDGEHOGS_PER_TEAM
                            || number > addable_hedgehogs + team.hedgehogs_number {
                         vec![HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
                             .send_self().action()]
@@ -274,6 +286,18 @@
                 } else if !c.is_master() {
                     vec![ProtocolError("You're not the room master!".to_string())]
                 } else {
+                    let cfg = match cfg {
+                        GameCfg::Scheme(name, mut values) => {
+                            if c.protocol_number == 49 && values.len() >= 2 {
+                                let mut s = "X".repeat(50);
+                                s.push_str(&values.pop().unwrap());
+                                values.push(s);
+                            }
+                            GameCfg::Scheme(name, values)
+                        }
+                        cfg => cfg
+                    };
+
                     let v = vec![cfg.to_server_msg()
                         .send_all().in_room(r.id).but_self().action()];
                     r.set_config(cfg);
@@ -377,7 +401,7 @@
                 },
                 VoteType::HedgehogsPerTeam(number) => {
                     match number {
-                        1...8 => None,
+                        1...MAX_HEDGEHOGS_PER_TEAM => None,
                         _ => Some("/callvote hedgehogs: Specify number from 1 to 8.".to_string())
                     }
                 },
--- a/gameServer2/src/server/handlers/lobby.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/handlers/lobby.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -13,6 +13,7 @@
     utils::is_name_illegal
 };
 use super::common::rnd_reply;
+use log::*;
 
 pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
     use crate::protocol::messages::HWProtocolMessage::*;
--- a/gameServer2/src/server/handlers/loggingin.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/handlers/loggingin.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -2,6 +2,7 @@
 
 use crate::{
     server::{
+        client::HWClient,
         server::HWServer,
         coretypes::ClientId,
         actions::{Action, Action::*}
@@ -11,6 +12,29 @@
     },
     utils::is_name_illegal
 };
+#[cfg(feature = "official-server")]
+use openssl::sha::sha1;
+use std::fmt::{Formatter, LowerHex};
+use log::*;
+
+#[derive(PartialEq)]
+struct Sha1Digest([u8; 20]);
+
+impl LowerHex for Sha1Digest {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
+        for byte in &self.0 {
+            write!(f, "{:02x}", byte)?;
+        }
+        Ok(())
+    }
+}
+
+#[cfg(feature = "official-server")]
+fn get_hash(client: &HWClient, salt1: &str, salt2: &str) -> Sha1Digest {
+    let s = format!("{}{}{}{}{}", salt1, salt2,
+                    client.web_password, client.protocol_number, "!hedgewars");
+    Sha1Digest(sha1(s.as_bytes()))
+}
 
 pub fn handle(server: & mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
     match message {
@@ -23,7 +47,7 @@
             else if !client.nick.is_empty() {
                 vec![ProtocolError("Nickname already provided.".to_string())]
             }
-            else if     is_name_illegal(&nick) {
+            else if is_name_illegal(&nick) {
                 vec![ByeClient("Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string())]
             }
             else {
@@ -33,7 +57,7 @@
             };
 
             server.react(client_id, actions);
-        },
+        }
         HWProtocolMessage::Proto(proto) => {
             let client = &mut server.clients[client_id];
             let actions = if client.protocol_number != 0 {
@@ -48,7 +72,28 @@
                      CheckRegistered]
             };
             server.react(client_id, actions);
-        },
+        }
+        #[cfg(feature = "official-server")]
+        HWProtocolMessage::Password(hash, salt) => {
+            let c = &server.clients[client_id];
+
+            let client_hash = get_hash(c, &salt, &c.server_salt);
+            let server_hash = get_hash(c, &c.server_salt, &salt);
+            let actions = if client_hash == server_hash {
+                vec![ServerAuth(format!("{:x}", server_hash)).send_self().action(),
+                     JoinLobby]
+            } else {
+                vec![ByeClient("Authentication failed".to_string())]
+            };
+            server.react(client_id, actions);
+        }
+        #[cfg(feature = "official-server")]
+        HWProtocolMessage::Checker(protocol, nick, password) => {
+            let c = &mut server.clients[client_id];
+            c.nick = nick;
+            c.web_password = password;
+            c.set_is_checker(true);
+        }
         _ => warn!("Incorrect command in logging-in state"),
     }
 }
--- a/gameServer2/src/server/handlers/mod.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/handlers/mod.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -12,11 +12,13 @@
         HWServerMessage::*
     }
 };
+use log::*;
 
 mod loggingin;
 mod lobby;
 mod inroom;
 mod common;
+mod checker;
 
 pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) {
     match message {
--- a/gameServer2/src/server/network.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/network.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -1,7 +1,7 @@
 extern crate slab;
 
 use std::{
-    io, io::{Error, ErrorKind, Write},
+    io, io::{Error, ErrorKind, Read, Write},
     net::{SocketAddr, IpAddr, Ipv4Addr},
     collections::HashSet,
     mem::{swap, replace}
@@ -13,6 +13,7 @@
 };
 use netbuf;
 use slab::Slab;
+use log::*;
 
 use crate::{
     utils,
@@ -22,6 +23,15 @@
     server::{HWServer},
     coretypes::ClientId
 };
+#[cfg(feature = "tls-connections")]
+use openssl::{
+    ssl::{
+        SslMethod, SslContext, Ssl, SslContextBuilder,
+        SslVerifyMode, SslFiletype, SslOptions,
+        SslStreamBuilder, HandshakeError, MidHandshakeSslStream, SslStream
+    },
+    error::ErrorStack
+};
 
 const MAX_BYTES_PER_READ: usize = 2048;
 
@@ -35,16 +45,43 @@
 
 type NetworkResult<T> = io::Result<(T, NetworkClientState)>;
 
+#[cfg(not(feature = "tls-connections"))]
+pub enum ClientSocket {
+    Plain(TcpStream)
+}
+
+#[cfg(feature = "tls-connections")]
+pub enum ClientSocket {
+    SslHandshake(Option<MidHandshakeSslStream<TcpStream>>),
+    SslStream(SslStream<TcpStream>)
+}
+
+impl ClientSocket {
+    fn inner(&self) -> &TcpStream {
+        #[cfg(not(feature = "tls-connections"))]
+        match self {
+            ClientSocket::Plain(stream) => stream,
+        }
+
+        #[cfg(feature = "tls-connections")]
+        match self {
+            ClientSocket::SslHandshake(Some(builder)) => builder.get_ref(),
+            ClientSocket::SslHandshake(None) => unreachable!(),
+            ClientSocket::SslStream(ssl_stream) => ssl_stream.get_ref()
+        }
+    }
+}
+
 pub struct NetworkClient {
     id: ClientId,
-    socket: TcpStream,
+    socket: ClientSocket,
     peer_addr: SocketAddr,
     decoder: ProtocolDecoder,
     buf_out: netbuf::Buf
 }
 
 impl NetworkClient {
-    pub fn new(id: ClientId, socket: TcpStream, peer_addr: SocketAddr) -> NetworkClient {
+    pub fn new(id: ClientId, socket: ClientSocket, peer_addr: SocketAddr) -> NetworkClient {
         NetworkClient {
             id, socket, peer_addr,
             decoder: ProtocolDecoder::new(),
@@ -52,31 +89,53 @@
         }
     }
 
-    pub fn read_messages(&mut self) -> NetworkResult<Vec<HWProtocolMessage>> {
+    #[cfg(feature = "tls-connections")]
+    fn handshake_impl(&mut self, handshake: MidHandshakeSslStream<TcpStream>) -> io::Result<NetworkClientState> {
+        match handshake.handshake() {
+            Ok(stream) => {
+                self.socket = ClientSocket::SslStream(stream);
+                debug!("TLS handshake with {} ({}) completed", self.id, self.peer_addr);
+                Ok(NetworkClientState::Idle)
+            }
+            Err(HandshakeError::WouldBlock(new_handshake)) => {
+                self.socket = ClientSocket::SslHandshake(Some(new_handshake));
+                Ok(NetworkClientState::Idle)
+            }
+            Err(HandshakeError::Failure(new_handshake)) => {
+                self.socket = ClientSocket::SslHandshake(Some(new_handshake));
+                debug!("TLS handshake with {} ({}) failed", self.id, self.peer_addr);
+                Err(Error::new(ErrorKind::Other, "Connection failure"))
+            }
+            Err(HandshakeError::SetupFailure(_)) => unreachable!()
+        }
+    }
+
+    fn read_impl<R: Read>(decoder: &mut ProtocolDecoder, source: &mut R,
+                          id: ClientId, addr: &SocketAddr) -> NetworkResult<Vec<HWProtocolMessage>> {
         let mut bytes_read = 0;
         let result = loop {
-            match self.decoder.read_from(&mut self.socket) {
+            match decoder.read_from(source) {
                 Ok(bytes) => {
-                    debug!("Client {}: read {} bytes", self.id, bytes);
+                    debug!("Client {}: read {} bytes", id, bytes);
                     bytes_read += bytes;
                     if bytes == 0 {
                         let result = if bytes_read == 0 {
-                            info!("EOF for client {} ({})", self.id, self.peer_addr);
+                            info!("EOF for client {} ({})", id, addr);
                             (Vec::new(), NetworkClientState::Closed)
                         } else {
-                            (self.decoder.extract_messages(), NetworkClientState::NeedsRead)
+                            (decoder.extract_messages(), NetworkClientState::NeedsRead)
                         };
                         break Ok(result);
                     }
                     else if bytes_read >= MAX_BYTES_PER_READ {
-                        break Ok((self.decoder.extract_messages(), NetworkClientState::NeedsRead))
+                        break Ok((decoder.extract_messages(), NetworkClientState::NeedsRead))
                     }
                 }
                 Err(ref error) if error.kind() == ErrorKind::WouldBlock => {
                     let messages =  if bytes_read == 0 {
                         Vec::new()
                     } else {
-                        self.decoder.extract_messages()
+                        decoder.extract_messages()
                     };
                     break Ok((messages, NetworkClientState::Idle));
                 }
@@ -84,14 +143,32 @@
                     break Err(error)
             }
         };
-        self.decoder.sweep();
+        decoder.sweep();
         result
     }
 
-    pub fn flush(&mut self) -> NetworkResult<()> {
+    pub fn read(&mut self) -> NetworkResult<Vec<HWProtocolMessage>> {
+        #[cfg(not(feature = "tls-connections"))]
+        match self.socket {
+            ClientSocket::Plain(ref mut stream) =>
+                NetworkClient::read_impl(&mut self.decoder, stream, self.id, &self.peer_addr),
+        }
+
+        #[cfg(feature = "tls-connections")]
+        match self.socket {
+            ClientSocket::SslHandshake(ref mut handshake_opt) => {
+                let handshake = std::mem::replace(handshake_opt, None).unwrap();
+                Ok((Vec::new(), self.handshake_impl(handshake)?))
+            },
+            ClientSocket::SslStream(ref mut stream) =>
+                NetworkClient::read_impl(&mut self.decoder, stream, self.id, &self.peer_addr)
+        }
+    }
+
+    fn write_impl<W: Write>(buf_out: &mut netbuf::Buf, destination: &mut W) -> NetworkResult<()> {
         let result = loop {
-            match self.buf_out.write_to(&mut self.socket) {
-                Ok(bytes) if self.buf_out.is_empty() || bytes == 0 =>
+            match buf_out.write_to(destination) {
+                Ok(bytes) if buf_out.is_empty() || bytes == 0 =>
                     break Ok(((), NetworkClientState::Idle)),
                 Ok(_) => (),
                 Err(ref error) if error.kind() == ErrorKind::Interrupted
@@ -102,7 +179,30 @@
                     break Err(error)
             }
         };
-        self.socket.flush()?;
+        result
+    }
+
+    pub fn write(&mut self) -> NetworkResult<()> {
+        let result = {
+            #[cfg(not(feature = "tls-connections"))]
+            match self.socket {
+                ClientSocket::Plain(ref mut stream) =>
+                    NetworkClient::write_impl(&mut self.buf_out, stream)
+            }
+
+            #[cfg(feature = "tls-connections")] {
+                match self.socket {
+                    ClientSocket::SslHandshake(ref mut handshake_opt) => {
+                        let handshake = std::mem::replace(handshake_opt, None).unwrap();
+                        Ok(((), self.handshake_impl(handshake)?))
+                    }
+                    ClientSocket::SslStream(ref mut stream) =>
+                        NetworkClient::write_impl(&mut self.buf_out, stream)
+                }
+            }
+        };
+
+        self.socket.inner().flush()?;
         result
     }
 
@@ -119,12 +219,19 @@
     }
 }
 
+#[cfg(feature = "tls-connections")]
+struct ServerSsl {
+    context: SslContext
+}
+
 pub struct NetworkLayer {
     listener: TcpListener,
     server: HWServer,
     clients: Slab<NetworkClient>,
     pending: HashSet<(ClientId, NetworkClientState)>,
-    pending_cache: Vec<(ClientId, NetworkClientState)>
+    pending_cache: Vec<(ClientId, NetworkClientState)>,
+    #[cfg(feature = "tls-connections")]
+    ssl: ServerSsl
 }
 
 impl NetworkLayer {
@@ -133,7 +240,24 @@
         let clients = Slab::with_capacity(clients_limit);
         let pending = HashSet::with_capacity(2 * clients_limit);
         let pending_cache = Vec::with_capacity(2 * clients_limit);
-        NetworkLayer {listener, server, clients, pending, pending_cache}
+
+        NetworkLayer {
+            listener, server, clients, pending, pending_cache,
+            #[cfg(feature = "tls-connections")]
+            ssl: NetworkLayer::create_ssl_context()
+        }
+    }
+
+    #[cfg(feature = "tls-connections")]
+    fn create_ssl_context() -> ServerSsl {
+        let mut builder = SslContextBuilder::new(SslMethod::tls()).unwrap();
+        builder.set_verify(SslVerifyMode::NONE);
+        builder.set_read_ahead(true);
+        builder.set_certificate_file("ssl/cert.pem", SslFiletype::PEM).unwrap();
+        builder.set_private_key_file("ssl/key.pem", SslFiletype::PEM).unwrap();
+        builder.set_options(SslOptions::NO_COMPRESSION);
+        builder.set_cipher_list("DEFAULT:!LOW:!RC4:!EXP").unwrap();
+        ServerSsl { context: builder.build() }
     }
 
     pub fn register_server(&self, poll: &Poll) -> io::Result<()> {
@@ -144,7 +268,7 @@
     fn deregister_client(&mut self, poll: &Poll, id: ClientId) {
         let mut client_exists = false;
         if let Some(ref client) = self.clients.get(id) {
-            poll.deregister(&client.socket)
+            poll.deregister(client.socket.inner())
                 .expect("could not deregister socket");
             info!("client {} ({}) removed", client.id, client.peer_addr);
             client_exists = true;
@@ -154,8 +278,8 @@
         }
     }
 
-    fn register_client(&mut self, poll: &Poll, id: ClientId, client_socket: TcpStream, addr: SocketAddr) {
-        poll.register(&client_socket, Token(id),
+    fn register_client(&mut self, poll: &Poll, id: ClientId, client_socket: ClientSocket, addr: SocketAddr) {
+        poll.register(client_socket.inner(), Token(id),
                       Ready::readable() | Ready::writable(),
                       PollOpt::edge())
             .expect("could not register socket with event loop");
@@ -180,12 +304,34 @@
         }
     }
 
+    fn create_client_socket(&self, socket: TcpStream) -> io::Result<ClientSocket> {
+        #[cfg(not(feature = "tls-connections"))] {
+            Ok(ClientSocket::Plain(socket))
+        }
+
+        #[cfg(feature = "tls-connections")] {
+            let ssl = Ssl::new(&self.ssl.context).unwrap();
+            let mut builder = SslStreamBuilder::new(ssl, socket);
+            builder.set_accept_state();
+            match builder.handshake() {
+                Ok(stream) =>
+                    Ok(ClientSocket::SslStream(stream)),
+                Err(HandshakeError::WouldBlock(stream)) =>
+                    Ok(ClientSocket::SslHandshake(Some(stream))),
+                Err(e) => {
+                    debug!("OpenSSL handshake failed: {}", e);
+                    Err(Error::new(ErrorKind::Other, "Connection failure"))
+                }
+            }
+        }
+    }
+
     pub fn accept_client(&mut self, poll: &Poll) -> io::Result<()> {
         let (client_socket, addr) = self.listener.accept()?;
         info!("Connected: {}", addr);
 
         let client_id = self.server.add_client();
-        self.register_client(poll, client_id, client_socket, addr);
+        self.register_client(poll, client_id, self.create_client_socket(client_socket)?, addr);
         self.flush_server_messages();
 
         Ok(())
@@ -205,7 +351,7 @@
                            client_id: ClientId) -> io::Result<()> {
         let messages =
             if let Some(ref mut client) = self.clients.get_mut(client_id) {
-                client.read_messages()
+                client.read()
             } else {
                 warn!("invalid readable client: {}", client_id);
                 Ok((Vec::new(), NetworkClientState::Idle))
@@ -246,7 +392,7 @@
                            client_id: ClientId) -> io::Result<()> {
         let result =
             if let Some(ref mut client) = self.clients.get_mut(client_id) {
-                client.flush()
+                client.write()
             } else {
                 warn!("invalid writable client: {}", client_id);
                 Ok(((), NetworkClientState::Idle))
--- a/gameServer2/src/server/room.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/room.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -2,14 +2,20 @@
     iter, collections::HashMap
 };
 use crate::server::{
-    coretypes::{ClientId, RoomId, TeamInfo, GameCfg, GameCfg::*, Voting},
+    coretypes::{
+        ClientId, RoomId, TeamInfo, GameCfg, GameCfg::*, Voting,
+        MAX_HEDGEHOGS_PER_TEAM
+    },
     client::{HWClient}
 };
+use bitflags::*;
 use serde::{Serialize, Deserialize};
+use serde_derive::{Serialize, Deserialize};
 use serde_yaml;
 
-const MAX_HEDGEHOGS_IN_ROOM: u8 = 64;
 const MAX_TEAMS_IN_ROOM: u8 = 8;
+const MAX_HEDGEHOGS_IN_ROOM: u8 =
+    MAX_HEDGEHOGS_PER_TEAM * MAX_HEDGEHOGS_PER_TEAM;
 
 #[derive(Clone, Serialize, Deserialize)]
 struct Ammo {
@@ -20,7 +26,7 @@
 #[derive(Clone, Serialize, Deserialize)]
 struct Scheme {
     name: String,
-    settings: Option<Vec<String>>
+    settings: Vec<String>
 }
 
 #[derive(Clone, Serialize, Deserialize)]
@@ -50,7 +56,7 @@
             template: 0,
 
             ammo: Ammo {name: "Default".to_string(), settings: None },
-            scheme: Scheme {name: "Default".to_string(), settings: None },
+            scheme: Scheme {name: "Default".to_string(), settings: Vec::new() },
             script: "Normal".to_string(),
             theme: "\u{1f994}".to_string(),
             drawn_map: None
@@ -176,11 +182,13 @@
         MAX_HEDGEHOGS_IN_ROOM - self.hedgehogs_number()
     }
 
-    pub fn add_team(&mut self, owner_id: ClientId, mut team: TeamInfo) -> &TeamInfo {
-        team.color = iter::repeat(()).enumerate()
-            .map(|(i, _)| i as u8).take(u8::max_value() as usize + 1)
-            .find(|i| self.teams.iter().all(|(_, t)| t.color != *i ))
-            .unwrap_or(0u8);
+    pub fn add_team(&mut self, owner_id: ClientId, mut team: TeamInfo, preserve_color: bool) -> &TeamInfo {
+        if !preserve_color {
+            team.color = iter::repeat(()).enumerate()
+                .map(|(i, _)| i as u8).take(u8::max_value() as usize + 1)
+                .find(|i| self.teams.iter().all(|(_, t)| t.color != *i))
+                .unwrap_or(0u8)
+        };
         team.hedgehogs_number = if self.teams.is_empty() {
             self.default_hedgehog_number
         } else {
--- a/gameServer2/src/server/server.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/server/server.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -6,6 +6,9 @@
     actions::{Destination, PendingMessage}
 };
 use crate::protocol::messages::*;
+use rand::{RngCore, thread_rng};
+use base64::{encode};
+use log::*;
 
 type Slab<T> = slab::Slab<T>;
 
@@ -37,7 +40,10 @@
         {
             let entry = self.clients.vacant_entry();
             key = entry.key();
-            let client = HWClient::new(entry.key());
+            let mut salt = [0u8; 18];
+            thread_rng().fill_bytes(&mut salt);
+
+            let client = HWClient::new(entry.key(), encode(&salt));
             entry.insert(client);
         }
         self.send(key, &Destination::ToSelf, HWServerMessage::Connected(utils::PROTOCOL_VERSION));
--- a/gameServer2/src/utils.rs	Wed Sep 05 20:09:32 2018 +0200
+++ b/gameServer2/src/utils.rs	Thu Oct 04 21:17:21 2018 +0200
@@ -20,4 +20,48 @@
     tmp.push(msg.clone().count() as u8);
     tmp.extend(msg);
     encode(&tmp)
+}
+
+pub fn protocol_version_string(protocol_number: u16) -> &'static str {
+    match protocol_number {
+        17 => "0.9.7-dev",
+        19 => "0.9.7",
+        20 => "0.9.8-dev",
+        21 => "0.9.8",
+        22 => "0.9.9-dev",
+        23 => "0.9.9",
+        24 => "0.9.10-dev",
+        25 => "0.9.10",
+        26 => "0.9.11-dev",
+        27 => "0.9.11",
+        28 => "0.9.12-dev",
+        29 => "0.9.12",
+        30 => "0.9.13-dev",
+        31 => "0.9.13",
+        32 => "0.9.14-dev",
+        33 => "0.9.14",
+        34 => "0.9.15-dev",
+        35 => "0.9.14.1",
+        37 => "0.9.15",
+        38 => "0.9.16-dev",
+        39 => "0.9.16",
+        40 => "0.9.17-dev",
+        41 => "0.9.17",
+        42 => "0.9.18-dev",
+        43 => "0.9.18",
+        44 => "0.9.19-dev",
+        45 => "0.9.19",
+        46 => "0.9.20-dev",
+        47 => "0.9.20",
+        48 => "0.9.21-dev",
+        49 => "0.9.21",
+        50 => "0.9.22-dev",
+        51 => "0.9.22",
+        52 => "0.9.23-dev",
+        53 => "0.9.23",
+        54 => "0.9.24-dev",
+        55 => "0.9.24",
+        56 => "0.9.25-dev",
+        _ => "Unknown"
+    }
 }
\ No newline at end of file
--- a/hedgewars/hwengine.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/hwengine.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -45,15 +45,19 @@
 procedure preInitEverything();
 procedure initEverything(complete:boolean);
 procedure freeEverything(complete:boolean);
+{$IFNDEF PAS2C}
 procedure catchUnhandledException(Obj: TObject; Addr: Pointer; FrameCount: Longint; Frames: PPointer);
+{$ENDIF}
 
 implementation
 {$ELSE}
 procedure preInitEverything(); forward;
 procedure initEverything(complete:boolean); forward;
 procedure freeEverything(complete:boolean); forward;
+{$IFNDEF PAS2C}
 procedure catchUnhandledException(Obj: TObject; Addr: Pointer; FrameCount: Longint; Frames: PPointer); forward;
 {$ENDIF}
+{$ENDIF}
 
 {$IFDEF WIN32}
 type TSetProcessDpiAwareness = function(value: Integer): Integer; stdcall;
@@ -600,6 +604,7 @@
     freeEverything(false);
 end;
 
+{$IFNDEF PAS2C}
 // Write backtrace to console and log when an unhandled exception occurred
 procedure catchUnhandledException(Obj: TObject; Addr: Pointer; FrameCount: Longint; Frames: PPointer);
 var
@@ -621,6 +626,7 @@
         WriteLnToConsole(BackTraceStrFunc(Frames[i]));
     end;
 end;
+{$ENDIF}
 
 {$IFDEF HWLIBRARY}
 function RunEngine(argc: LongInt; argv: PPChar): LongInt; cdecl; export;
@@ -649,8 +655,10 @@
     // workaround for pascal's ParamStr and ParamCount
     init(argc, argv);
 {$ENDIF}
+{$IFNDEF PAS2C}
     // Custom procedure for unhandled exceptions; ExceptProc is used by sysutils module
     ExceptProc:= @catchUnhandledException;
+{$ENDIF}
 
     preInitEverything();
 
--- a/hedgewars/uChat.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uChat.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -437,12 +437,15 @@
 
 t:= LocalTeam;
 x:= 0;
+// speech bubble
 if (s[1] = '"') and (s[Length(s)] = '"')
     then x:= 1
 
+// thinking bubble
 else if (s[1] = '''') and (s[Length(s)] = '''') then
     x:= 2
 
+// yelling bubble
 else if (s[1] = '-') and (s[Length(s)] = '-') then
     x:= 3;
 
@@ -462,7 +465,16 @@
 
 if (s[1] = '/') then
     begin
-    // These 3 are same as above, only are to make the hedgehog say it on next attack
+
+    // Ignore message-type commands with empty argument list
+    if (copy(s, 2, 2) = 'me') and (Length(s) = 3) then
+        exit;
+    if ((copy(s, 2, 3) = 'hsa') or (copy(s, 2, 3) = 'hta') or (copy(s, 2, 3) = 'hya')) and (Length(s) = 4) then
+        exit;
+    if ((copy(s, 2, 4) = 'team') or (copy(s, 2, 4) = 'clan')) and (Length(s) = 5) then
+        exit;
+
+    // Speech bubble, but on next attack
     if (copy(s, 2, 4) = 'hsa ') then
         begin
         if CurrentTeam^.ExtDriven then
@@ -472,6 +484,7 @@
         exit
         end;
 
+    // Thinking bubble, but on next attack
     if (copy(s, 2, 4) = 'hta ') then
         begin
         if CurrentTeam^.ExtDriven then
@@ -481,6 +494,7 @@
         exit
         end;
 
+    // Yelling bubble, but on next attack
     if (copy(s, 2, 4) = 'hya ') then
         begin
         if CurrentTeam^.ExtDriven then
@@ -490,9 +504,10 @@
         exit
         end;
 
-    if (copy(s, 2, 5) = 'team ') and (length(s) > 6) then
+    // “/clan” or “/team” (“/team” is an alias for “/clan”)
+    if ((copy(s, 2, 5) = 'clan ') or (copy(s, 2, 5) = 'team ')) and (length(s) > 6) then
         begin
-        ParseCommand(s, true);
+        ParseCommand('team ' + copy(s, 7, Length(s) - 6), true);
         exit
         end;
 
@@ -604,6 +619,8 @@
 
     if (gameType = gmtNet) then
         SendConsoleCommand(s)
+    else
+        AddChatString(#0 + trcmd[sidCmdUnknown]);
     end
 else
     begin
@@ -1113,7 +1130,7 @@
     if copy(s, 1, 4) = '/me ' then
         s:= #2 + '* ' + UserNick + ' ' + copy(s, 5, Length(s) - 4)
     else
-        s:= #1 + Format(trmsg[sidChat], [UserNick, s]);
+        s:= #1 + Format(trmsg[sidChat], UserNick, s);
 
     AddChatString(s)
 end;
@@ -1122,7 +1139,7 @@
 begin
     SendIPC('b' + s);
 
-    s:= #4 + Format(trmsg[sidChatTeam], [UserNick, s]);
+    s:= #4 + Format(trmsg[sidChatTeam], UserNick, s);
 
     AddChatString(s)
 end;
@@ -1160,7 +1177,7 @@
         SetLine(InputStr, '', true)
     else
         begin
-        SetLine(InputStr, '/team ', true);
+        SetLine(InputStr, '/clan ', true);
         cursorPos:= 6;
         UpdateCursorCoords();
         end;
--- a/hedgewars/uCommandHandlers.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uCommandHandlers.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -131,7 +131,8 @@
 procedure chCurU_m(var s: shortstring);
 begin
 s:= s; // avoid compiler hint
-CursorMovementY:= 0;
+if CursorMovementY < 0 then
+    CursorMovementY:= 0;
 end;
 
 procedure chCurD_p(var s: shortstring);
@@ -143,7 +144,8 @@
 procedure chCurD_m(var s: shortstring);
 begin
 s:= s; // avoid compiler hint
-CursorMovementY:= 0;
+if CursorMovementY > 0 then
+    CursorMovementY:= 0;
 end;
 
 procedure chCurL_p(var s: shortstring);
@@ -155,7 +157,8 @@
 procedure chCurL_m(var s: shortstring);
 begin
 s:= s; // avoid compiler hint
-CursorMovementX:= 0;
+if CursorMovementX < 0 then
+    CursorMovementX:= 0;
 end;
 
 procedure chCurR_p(var s: shortstring);
@@ -167,7 +170,8 @@
 procedure chCurR_m(var s: shortstring);
 begin
 s:= s; // avoid compiler hint
-CursorMovementX:= 0;
+if CursorMovementX > 0 then
+    CursorMovementX:= 0;
 end;
 
 procedure chLeft_p(var s: shortstring);
--- a/hedgewars/uGame.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uGame.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -35,6 +35,37 @@
 var i,j : LongInt;
     s: ansistring;
 begin
+
+inc(SoundTimerTicks, Lag);
+if SoundTimerTicks >= 50 then
+    begin
+    SoundTimerTicks:= 0;
+    if cVolumeDelta <> 0 then
+        begin
+        j:= Volume;
+        i:= ChangeVolume(cVolumeDelta);
+        if (not cIsSoundEnabled) or (isAudioMuted and (j<>i)) then
+            AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume)
+        else if not isAudioMuted then
+            begin
+            s:= ansistring(inttostr(i));
+            AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume)
+            end
+        end
+    else if cMuteToggle then
+        begin
+        MuteAudio;
+        if isAudioMuted then
+            AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume)
+        else
+            begin
+            s:= ansistring(inttostr(GetVolumePercent()));
+            AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume);
+            end;
+        cMuteToggle:= false;
+        end;
+    end;
+
 if isPaused then
     exit;
 
@@ -78,35 +109,6 @@
 if cTestLua then
     Lag:= High(LongInt);
 
-inc(SoundTimerTicks, Lag);
-if SoundTimerTicks >= 50 then
-    begin
-    SoundTimerTicks:= 0;
-    if cVolumeDelta <> 0 then
-        begin
-        j:= Volume;
-        i:= ChangeVolume(cVolumeDelta);
-        if (not cIsSoundEnabled) or (isAudioMuted and (j<>i)) then
-            AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume)
-        else if not isAudioMuted then
-            begin
-            s:= ansistring(inttostr(i));
-            AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume)
-            end
-        end
-    else if cMuteToggle then
-        begin
-        MuteAudio;
-        if isAudioMuted then
-            AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume)
-        else
-            begin
-            s:= ansistring(inttostr(GetVolumePercent()));
-            AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume);
-            end;
-        cMuteToggle:= false;
-        end;
-    end;
 PlayNextVoice;
 i:= 1;
 while (GameState <> gsExit) and (i <= Lag) and allOK do
--- a/hedgewars/uGears.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uGears.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -336,14 +336,18 @@
         if TotalRoundsPre = cSuddenDTurns + 1 then
             bWaterRising:= true;
         if bWaterRising and (cWaterRise > 0) then
+            begin
+            bDuringWaterRise:= true;
             AddGear(0, 0, gtWaterUp, 0, _0, _0, 0)^.Tag:= cWaterRise;
+            end;
         inc(step)
         end
-    else // since we are not raising the water, a second win-check isn't needed
+    else // since we are not raising the water, another win-check isn't needed
         inc(step,2);
     stChWin3:
         begin
         CheckForWin;
+        bDuringWaterRise:= false;
         inc(step)
         end;
 
@@ -418,7 +422,8 @@
         dec(delay2);
 
         if ((delay2 mod cInactDelay) = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil)
-        and (not CurrentHedgehog^.Unplaced) then
+        and (not CurrentHedgehog^.Unplaced)
+        and (not PlacingHogs) then
             begin
             if (CurrentHedgehog^.Gear^.State and gstAttacked <> 0)
             and (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then
@@ -1216,7 +1221,7 @@
                 Gear^.Text:= text;
                 Gear^.FrameTicks:= x
                 end;
-            AddChatString(#9+FormatA(trmsg[sidChatHog], [HH^.Name, text]));
+            AddChatString(#9+FormatA(trmsg[sidChatHog], HH^.Name, text));
             end
         end
     else if (x >= 4) then
--- a/hedgewars/uGearsHandlersMess.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uGearsHandlersMess.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -3268,7 +3268,7 @@
     with HHGear^ do
         begin
         State := State and (not gstAttacking);
-        Message := Message and (not gmAttack)
+        Message := Message and (not (gmAttack or gmSwitch))
         end
 end;
 
@@ -5478,7 +5478,7 @@
         Gear^.dY.isNegative := not Gear^.dY.isNegative;
         HHGear^.dX := Gear^.dX;
         HHGear^.dY := Gear^.dY;
-        AmmoShove(Gear, 0, 80);
+        AmmoShove(Gear, 0, 79);
         Gear^.dX.isNegative := not Gear^.dX.isNegative;
         Gear^.dY.isNegative := not Gear^.dY.isNegative;
         end;
--- a/hedgewars/uGearsHedgehog.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uGearsHedgehog.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -186,6 +186,9 @@
 Gear^.Message:= Gear^.Message and (not gmTimer);
 CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^);
 with Gear^.Hedgehog^ do
+    if (((Gear^.State and gstAttacked) <> 0) and (GameFlags and gfInfAttack = 0))
+    or ((Gear^.State and gstHHDriven) = 0) then
+        exit;
     if ((Gear^.Message and gmPrecise) <> 0) and ((CurWeapon^.Propz and ammoprop_SetBounce) <> 0) then
         begin
         color:= Gear^.Hedgehog^.Team^.Clan^.Color;
@@ -579,7 +582,7 @@
                     speech^.Text:= SpeechText;
                     speech^.Hedgehog:= Gear^.Hedgehog;
                     speech^.FrameTicks:= SpeechType;
-                    AddChatString(#9+FormatA(trmsg[sidChatHog], [Gear^.Hedgehog^.Name, SpeechText]));
+                    AddChatString(#9+FormatA(trmsg[sidChatHog], Gear^.Hedgehog^.Name, SpeechText));
                     end;
                 SpeechText:= ''
                 end;
@@ -866,6 +869,9 @@
     exit
     end;
 
+if (Gear^.Hedgehog^.Unplaced) then
+    exit;
+
     if ((Gear^.Message and gmAnimate) <> 0) then
         begin
         Gear^.Message:= 0;
@@ -910,7 +916,7 @@
         end;
 
     if (Gear^.Message and (gmLeft or gmRight) <> 0) and (Gear^.State and gstMoving = 0) and 
-		(CheckGearNear(Gear, gtPortal, 26, 26) <> nil) then 
+		(CheckGearNear(Gear, gtPortal, 26, 26) = nil) then
 		Gear^.PortalCounter:= 0;
     PrevdX:= hwSign(Gear^.dX);
     if (Gear^.Message and gmLeft  )<>0 then
--- a/hedgewars/uGearsRender.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uGearsRender.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -301,7 +301,7 @@
     sign, hx, hy, tx, ty, sx, sy, m: LongInt;  // hedgehog, crosshair, temp, sprite, direction
     dx, dy, ax, ay, aAngle, dAngle, hAngle, lx, ly: real;  // laser, change
     wraps: LongWord; // numbe of wraps for laser in world wrap
-    defaultPos, HatVisible: boolean;
+    defaultPos, HatVisible, inWorldBounds: boolean;
     HH: PHedgehog;
     CurWeapon: PAmmo;
     iceOffset:Longint;
@@ -444,7 +444,8 @@
                 hx:= tx;
                 hy:= ty;
                 wraps:= 0;
-                while ((Land[ty, tx] and lfAll) = 0) do
+                inWorldBounds := ((ty and LAND_HEIGHT_MASK) or (tx and LAND_WIDTH_MASK)) = 0;
+                while inWorldBounds and ((Land[ty, tx] and lfAll) = 0) do
                     begin
                     if wraps > cMaxLaserSightWraps then
                         break;
--- a/hedgewars/uGearsUtils.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uGearsUtils.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -1332,18 +1332,9 @@
     if (Gear^.State and gstNoDamage) = 0 then
         begin
 
-        if (not (Gear^.Kind in [gtMinigun, gtPortal])) and
-            (Ammo^.Kind in [gtDEagleShot, gtSniperRifleShot, gtMinigunBullet]) then
-            begin
-            VGear := AddVisualGear(t^.cX[i], t^.cY[i], vgtBulletHit);
-            if VGear <> nil then
-                VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY);
-            end;
-
         if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then
             Gear^.FlightTime:= 1;
 
-
         case Gear^.Kind of
             gtHedgehog,
             gtMine,
@@ -1355,6 +1346,12 @@
             gtExplosives: //,
             //gtStructure:
             begin
+            if Ammo^.Kind in [gtDEagleShot, gtSniperRifleShot, gtMinigunBullet] then
+                begin
+                VGear := AddVisualGear(t^.cX[i], t^.cY[i], vgtBulletHit);
+                if VGear <> nil then
+                    VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY);
+                end;
             if (Ammo^.Kind = gtDrill) then
                 begin
                 Ammo^.Timer:= 0;
@@ -1397,13 +1394,13 @@
 
             if (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.King or (Gear^.Hedgehog^.Effects[heFrozen] > 0)) then
                 begin
-                Gear^.dX:= Gear^.dX + Ammo^.dX * Power * _0_005;
-                Gear^.dY:= Gear^.dY + Ammo^.dY * Power * _0_005
+                Gear^.dX:= Ammo^.dX * Power * _0_005;
+                Gear^.dY:= Ammo^.dY * Power * _0_005
                 end
             else if ((Ammo^.Kind <> gtFlame) or (Gear^.Kind = gtHedgehog)) and (Power <> 0) then
                 begin
-                Gear^.dX:= Gear^.dX + Ammo^.dX * Power * _0_01;
-                Gear^.dY:= Gear^.dY + Ammo^.dY * Power * _0_01
+                Gear^.dX:= Ammo^.dX * Power * _0_01;
+                Gear^.dY:= Ammo^.dY * Power * _0_01
                 end;
 
             if (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then
--- a/hedgewars/uIO.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uIO.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -39,7 +39,7 @@
 procedure doPut(putX, putY: LongInt; fromAI: boolean);
 
 implementation
-uses uConsole, uConsts, uVariables, uCommands, uUtils, uDebug;
+uses uConsole, uConsts, uVariables, uCommands, uUtils, uDebug, uLocale;
 
 const
     cSendEmptyPacketTime = 1000;
@@ -147,6 +147,8 @@
 procedure ParseIPCCommand(s: shortstring);
 var loTicks: Word;
     isProcessed: boolean;
+    nick, msg: shortstring;
+    i: LongInt;
 begin
 isProcessed := true;
 
@@ -175,7 +177,30 @@
           else
              isProcessed:= false;
      'b': if gameType = gmtNet then
-             ParseChatCommand('chatmsg ' + #4, s, 2)
+             // parse team message from net
+             // expected format: <PLAYER NAME>]<MESSAGE>
+             begin
+             i:= 2;
+             nick:= '';
+             while (i <= length(s)) and (s[i] <> ']') do
+                begin
+                nick:= nick + s[i];
+                inc(i)
+                end;
+
+             inc(i);
+             msg:= '';
+             while (i <= length(s)) do
+                begin
+                msg:= msg + s[i];
+                inc(i)
+                end;
+             s:= 'b' + Format(trmsg[sidChatTeam], nick, msg);
+             if (nick = '') or (msg = '') then
+                 isProcessed:= false
+             else
+                 ParseChatCommand('chatmsg ' + #4, s, 2);
+             end
           else
              isProcessed:= false;
      else
@@ -254,7 +279,7 @@
 end;
 
 procedure SendStat(sit: TStatInfoType; s: shortstring);
-const stc: array [TStatInfoType] of char = ('r', 'D', 'k', 'K', 'H', 'T', 'P', 's', 'S', 'B', 'c', 'g', 'p', 'R');
+const stc: array [TStatInfoType] of char = ('r', 'D', 'k', 'K', 'H', 'T', 'P', 's', 'S', 'B', 'c', 'g', 'p', 'R', 'h');
 var buf: shortstring;
 begin
 buf:= 'i' + stc[sit] + s;
--- a/hedgewars/uLand.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uLand.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -984,12 +984,14 @@
 
 procedure chSendLandDigest(var s: shortstring);
 var i: LongInt;
+	landPixelDigest  : LongInt;	
 begin
+	landPixelDigest:= 1;
     for i:= 0 to LAND_HEIGHT-1 do
-        syncedPixelDigest:= Adler32Update(syncedPixelDigest, @Land[i,0], LAND_WIDTH*2);
-    s:= 'M' + IntToStr(syncedPixelDigest); // + cScriptName; script name is no longer needed. scripts are hashed
+        landPixelDigest:= Adler32Update(landPixelDigest, @Land[i,0], LAND_WIDTH*2);
+    s:= 'M' + IntToStr(syncedPixelDigest)+'|'+IntToStr(landPixelDigest);
 
-    ScriptSetString('LandDigest', s);
+    ScriptSetString('LandDigest',IntToStr(landPixelDigest));
 
     chLandCheck(s);
     if allOK then SendIPCRaw(@s[0], Length(s) + 1)
--- a/hedgewars/uLandObjects.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uLandObjects.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -204,7 +204,7 @@
                 pLandColor:= @LandPixels[(cpY + y) div 2, (cpX + x) div 2];
 
             alpha:= (color and AMask) shr AShift;
-            if (alpha <> $FF) and (pLandColor^ <> 0) then
+            if ((alpha <> $FF) and ((pLandColor^) <> 0)) then
                 begin
                 landColor:= pLandColor^;
                 color:=
--- a/hedgewars/uLocale.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uLocale.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -23,15 +23,31 @@
 uses uTypes;
 
 const MAX_EVENT_STRINGS = 255;
-const MAX_FORMAT_STRING_SYMBOLS = 9;
 
 procedure LoadLocale(FileName: shortstring);
-function  Format(fmt: shortstring; args: array of shortstring): shortstring;
-function  FormatA(fmt: ansistring; args: array of ansistring): ansistring;
-function  Format(fmt: shortstring; arg: shortstring): shortstring;
-function  FormatA(fmt: ansistring; arg: ansistring): ansistring;
 function  GetEventString(e: TEventId): ansistring;
 
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: shortstring; argCount: Byte): shortstring;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: shortstring): shortstring;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8: shortstring): shortstring;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7: shortstring): shortstring;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6: shortstring): shortstring;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5: shortstring): shortstring;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4: shortstring): shortstring;
+function Format(fmt: shortstring; arg1, arg2, arg3: shortstring): shortstring;
+function Format(fmt: shortstring; arg1, arg2: shortstring): shortstring;
+function Format(fmt: shortstring; arg1: shortstring): shortstring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: ansistring; argCount: Byte): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1: ansistring): ansistring;
+
 {$IFDEF HWLIBRARY}
 procedure LoadLocaleWrapper(path: pchar; userpath: pchar; filename: pchar); cdecl; export;
 {$ENDIF}
@@ -119,60 +135,147 @@
 end;
 
 // Format the string fmt.
-// Take a shortstring with placeholders %1, %2, %3, etc. and replace
+// Take a shortstring with placeholders %1, %2, %3, ... %9. and replace
 // them with the corresponding elements of an array with up to
-// MAX_FORMAT_STRING_SYMBOLS. Important! Each placeholder can only be
-// used exactly once and numbers MUST NOT be skipped (e.g. using %1 and %3
-// but not %2.
-function Format(fmt: shortstring; args: array of shortstring): shortstring;
+// argCount. ArgCount must not be larger than 9.
+// Each placeholder must be used exactly once and numbers MUST NOT be
+// skipped (e.g. using %1 and %3 but not %2.
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: shortstring; argCount: Byte): shortstring;
 var i, p: LongInt;
-tempstr: shortstring;
+tempstr, curArg: shortstring;
 begin
 tempstr:= fmt;
-for i:=0 to MAX_FORMAT_STRING_SYMBOLS - 1 do
+for i:=0 to argCount - 1 do
     begin
+        case i of
+            0: curArg:= arg1;
+            1: curArg:= arg2;
+            2: curArg:= arg3;
+            3: curArg:= arg4;
+            4: curArg:= arg5;
+            5: curArg:= arg6;
+            6: curArg:= arg7;
+            7: curArg:= arg8;
+            8: curArg:= arg9;
+        end;
+
         p:= Pos('%'+IntToStr(i+1), tempstr);
-        if (p = 0) or (i >= Length(args)) then
+        if (p = 0) then
             break
         else
             begin
             delete(tempstr, p, 2);
-            insert(args[i], tempstr, p);
+            insert(curArg, tempstr, p);
             end;
     end;
 Format:= tempstr;
 end;
 
 // Same as Format, but for ansistring
-function FormatA(fmt: ansistring; args: array of ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: ansistring; argCount: Byte): ansistring;
 var i, p: LongInt;
-tempstr: ansistring;
+tempstr, curArg: ansistring;
 begin
 tempstr:= fmt;
-for i:=0 to MAX_FORMAT_STRING_SYMBOLS - 1 do
+for i:=0 to argCount - 1 do
     begin
+        case i of
+            0: curArg:= arg1;
+            1: curArg:= arg2;
+            2: curArg:= arg3;
+            3: curArg:= arg4;
+            4: curArg:= arg5;
+            5: curArg:= arg6;
+            6: curArg:= arg7;
+            7: curArg:= arg8;
+            8: curArg:= arg9;
+        end;
+
         p:= Pos('%'+IntToStr(i+1), tempstr);
-        if (p = 0) or (i >= Length(args)) then
+        if (p = 0) then
             break
         else
             begin
             delete(tempstr, p, 2);
-            insert(args[i], tempstr, p);
+            insert(curArg, tempstr, p);
             end;
     end;
 FormatA:= tempstr;
 end;
 
-// Same as Format above, but with only one placeholder %1, replaced by arg.
-function Format(fmt: shortstring; arg: shortstring): shortstring;
+// The following functions are just shortcuts of Format/FormatA, with fewer argument counts
+function Format(fmt: shortstring; arg1: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, '', '', '', '', '', '', '', '', 1);
+end;
+function Format(fmt: shortstring; arg1, arg2: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, arg2, '', '', '', '', '', '', '', 2);
+end;
+function Format(fmt: shortstring; arg1, arg2, arg3: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, arg2, arg3, '', '', '', '', '', '', 3);
+end;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4: shortstring): shortstring;
 begin
-    Format:= Format(fmt, [arg]);
+    Format:= Format(fmt, arg1, arg2, arg3, arg4, '', '', '', '', '', 4);
+end;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, arg2, arg3, arg4, arg5, '', '', '', '', 5);
+end;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, '', '', '', 6);
+end;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, '', '', 7);
+end;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, '', 8);
+end;
+function Format(fmt: shortstring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: shortstring): shortstring;
+begin
+    Format:= Format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, 9);
 end;
 
-// Same as above, but for ansistring
-function FormatA(fmt: ansistring; arg: ansistring): ansistring;
+function FormatA(fmt: ansistring; arg1: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, '', '', '', '', '', '', '', '', 1);
+end;
+function FormatA(fmt: ansistring; arg1, arg2: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, arg2, '', '', '', '', '', '', '', 2);
+end;
+function FormatA(fmt: ansistring; arg1, arg2, arg3: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, arg2, arg3, '', '', '', '', '', '', 3);
+end;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, arg2, arg3, arg4, '', '', '', '', '', 4);
+end;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5: ansistring): ansistring;
 begin
-    FormatA:= FormatA(fmt, [arg]);
+    FormatA:= FormatA(fmt, arg1, arg2, arg3, arg4, arg5, '', '', '', '', 5);
+end;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, arg2, arg3, arg4, arg5, arg6, '', '', '', 6);
+end;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, '', '', 7);
+end;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, '', 8);
+end;
+function FormatA(fmt: ansistring; arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9: ansistring): ansistring;
+begin
+    FormatA:= FormatA(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, 9);
 end;
 
 {$IFDEF HWLIBRARY}
--- a/hedgewars/uScript.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uScript.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -1651,7 +1651,7 @@
                vgear^.Text:= lua_tostring(L, 2);
                if Gear^.Kind = gtHedgehog then
                    begin
-                   AddChatString(#9+FormatA(trmsg[sidChatHog], [gear^.Hedgehog^.Name, vgear^.text]));
+                   AddChatString(#9+FormatA(trmsg[sidChatHog], gear^.Hedgehog^.Name, vgear^.text));
                    vgear^.Hedgehog:= gear^.Hedgehog
                    end
                else vgear^.Frame:= gear^.uid;
@@ -2199,8 +2199,8 @@
 var s: LongInt;
     soundState: boolean;
 const
-    call = 'SetSoundMasked';
-    params = 'soundId, isMasked]';
+    call = 'SetSoundMask';
+    params = 'soundId, isMasked';
 begin
     if CheckLuaParamCount(L, 2, call, params) then
         begin
@@ -2810,7 +2810,7 @@
     placed, behind, flipHoriz, flipVert : boolean;
 const
     call = 'PlaceSprite';
-    params = 'x, y, sprite, frameIdx, tint, behind, flipHoriz, flipVert, [, landFlag, ... ]';
+    params = 'x, y, sprite, frameIdx, tint, behind, flipHoriz, flipVert [, landFlag, ... ]';
 begin
     placed:= false;
     if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then
@@ -2858,7 +2858,7 @@
     eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean;
 const
     call = 'EraseSprite';
-    params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert, [, landFlag, ... ]';
+    params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert [, landFlag, ... ]';
 begin
     if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then
         begin
@@ -3212,7 +3212,7 @@
 function lc_setturntimeleft(L : Plua_State) : LongInt; Cdecl;
 var number: Int64;
 begin
-    if CheckLuaParamCount(L, 1, 'SetTurnTimeLeft', 'TurnTimeLeft') then
+    if CheckLuaParamCount(L, 1, 'SetTurnTimeLeft', 'newTurnTimeLeft') then
         begin
         number:= Trunc(lua_tonumber(L, 1));
         if number < 0 then
@@ -3229,7 +3229,7 @@
 function lc_setreadytimeleft(L : Plua_State) : LongInt; Cdecl;
 var number: Int64;
 begin
-    if CheckLuaParamCount(L, 1, 'SetReadyTimeLeft', 'ReadyTimeLeft') then
+    if CheckLuaParamCount(L, 1, 'SetReadyTimeLeft', 'newReadyTimeLeft') then
         begin
         number:= Trunc(lua_tonumber(L, 1));
         if number < 0 then
@@ -3654,7 +3654,7 @@
 hedgewarsMountPackage(Str2PChar(copy(s, 3, length(s)-6)+'.hwp'));
 
 physfsReaderSetBuffer(@buf);
-if Pos('Locale/',s) <> 0 then
+if (Pos('Locale/',s) <> 0) or (s = 'Scripts/OfficialChallengeHashes.lua') then
      ret:= lua_load(luaState, @ScriptLocaleReader, f, Str2PChar(s))
 else
 	begin
@@ -3752,11 +3752,13 @@
 if isPendingTurnTimeLeft then
     begin
     TurnTimeLeft:= PendingTurnTimeLeft;
+    ScriptSetInteger('TurnTimeLeft', TurnTimeLeft);
     isPendingTurnTimeLeft:= false;
     end;
 if isPendingReadyTimeLeft then
     begin
     ReadyTimeLeft:= PendingReadyTimeLeft;
+    ScriptSetInteger('ReadyTimeLeft', ReadyTimeLeft);
     isPendingReadyTimeLeft:= false;
     end;
 end;
--- a/hedgewars/uStore.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uStore.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -511,7 +511,7 @@
     AFKTexture:= RenderStringTex(trmsg[sidAFK], cCentralMessageColor, fntBig);
     keyConfirm:= KeyBindToName('confirm');
     keyQuit:= KeyBindToName('quit');
-    ConfirmTexture:= RenderStringTex(Format(trmsg[sidConfirm], [keyConfirm, keyQuit]), cCentralMessageColor, fntBig);
+    ConfirmTexture:= RenderStringTex(Format(trmsg[sidConfirm], keyConfirm, keyQuit), cCentralMessageColor, fntBig);
     SyncTexture:= RenderStringTex(trmsg[sidSync], cCentralMessageColor, fntBig);
 
     if not reload then
@@ -772,8 +772,9 @@
 var i: LongInt;
     f: PFSFile;
     key, value, l, temp: shortstring;
-    color: Longword;
-    c: byte;
+    color, tempColor: Longword;
+    clanID, tempClanID: byte;
+    conversionSuccess: boolean;
 begin
     if cOnlyStats then exit;
 
@@ -786,6 +787,7 @@
         while (not pfsEOF(f)) and (l <> '[colors]') do
             pfsReadLn(f, l);
 
+        conversionSuccess:= false;
         while (not pfsEOF(f)) and (l <> '') do
             begin
             pfsReadLn(f, l);
@@ -801,11 +803,11 @@
             if temp = 'color' then
                 begin
                 temp:= copy(key, 6, length(key) - 5);
-                try
-                    c:= StrToInt(temp);
-                except
-                    on E : EConvertError do continue;
-                end;
+                tempClanID:= StrToInt(temp, conversionSuccess);
+                if conversionSuccess then
+                    clanID:= tempClanID
+                else
+                    continue;
                 end
             else
                 continue;
@@ -820,15 +822,15 @@
                 if value[1] <> '#' then
                     continue;
                 temp:= copy(value, 2, length(value) - 1);
-                try
-                    color:= StrToInt('0x'+temp);
-                except
-                    on E : EConvertError do continue;
-                end;
+                tempColor:= StrToInt('0x'+temp, conversionSuccess);
+                if conversionSuccess then
+                    color:= tempColor
+                else
+                    continue;
                 end;
 
-            if c <= cClanColors then
-                ClanColorArray[c]:= color;
+            if clanID <= cClanColors then
+                ClanColorArray[clanID]:= color;
 
             end;
 
--- a/hedgewars/uTeams.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uTeams.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -58,6 +58,7 @@
     s, cap: ansistring;
     ts: array[0..(cMaxTeams - 1)] of ansistring;
     t, AliveCount, i, j: LongInt;
+    allWin, winCamera: boolean;
 begin
 CheckForWin:= false;
 AliveCount:= 0;
@@ -75,11 +76,13 @@
 TurnTimeLeft:= 0;
 ReadyTimeLeft:= 0;
 
-// if the game ends during a multishot, do last TurnStats + TurnReaction
-if (not bBetweenTurns) and isInMultiShoot then
+// If the game ends during a multishot, or after the Sudden Death
+// water has risen, do last turn stats / reaction.
+if ((not bBetweenTurns) and isInMultiShoot) or (bDuringWaterRise) then
     begin
     TurnStats();
-    TurnReaction();
+    if (not bDuringWaterRise) then
+        TurnReaction();
     TurnStatsReset();
     end;
 
@@ -98,6 +101,7 @@
         end
     else // win
         begin
+        allWin:= false;
         with AliveClan^ do
             begin
             if TeamsNumber = 1 then // single team wins
@@ -118,11 +122,25 @@
 
                 // Write victory message for caption and stats page
                 if (TeamsNumber = cMaxTeams) or (TeamsCount = TeamsNumber) then
+                    begin
                     // No enemies for some reason … Everyone wins!!1!
-                    s:= trmsg[sidWinnerAll]
+                    s:= trmsg[sidWinnerAll];
+                    allWin:= true;
+                    end
                 else if (TeamsNumber >= 2) and (TeamsNumber < cMaxTeams) then
                     // List all winning teams in a list
-                    s:= FormatA(trmsg[TMsgStrId(Ord(sidWinner2) + (TeamsNumber - 2))], ts);
+                    if (TeamsNumber = 2) then
+                        s:= FormatA(trmsg[TMsgStrId(sidWinner2)], ts[0], ts[1])
+                    else if (TeamsNumber = 3) then
+                        s:= FormatA(trmsg[TMsgStrId(sidWinner3)], ts[0], ts[1], ts[2])
+                    else if (TeamsNumber = 4) then
+                        s:= FormatA(trmsg[TMsgStrId(sidWinner4)], ts[0], ts[1], ts[2], ts[3])
+                    else if (TeamsNumber = 5) then
+                        s:= FormatA(trmsg[TMsgStrId(sidWinner5)], ts[0], ts[1], ts[2], ts[3], ts[4])
+                    else if (TeamsNumber = 6) then
+                        s:= FormatA(trmsg[TMsgStrId(sidWinner6)], ts[0], ts[1], ts[2], ts[3], ts[4], ts[5])
+                    else if (TeamsNumber = 7) then
+                        s:= FormatA(trmsg[TMsgStrId(sidWinner7)], ts[0], ts[1], ts[2], ts[3], ts[4], ts[5], ts[6]);
 
                 // The winner caption is the same as the stats message and not randomized
                 cap:= s;
@@ -130,12 +148,21 @@
                 // TODO (maybe): Show victory animation/captions per-team instead of all winners at once?
                 end;
 
+            // Enable winner state for winning hogs and move camera to a winning hedgehog
+            winCamera:= false;
             for j:= 0 to Pred(TeamsNumber) do
                 with Teams[j]^ do
                     for i:= 0 to cMaxHHIndex do
                         with Hedgehogs[i] do
                             if (Gear <> nil) then
+                                begin
+                                if (not winCamera) then
+                                    begin
+                                    FollowGear:= Gear;
+                                    winCamera:= true;
+                                    end;
                                 Gear^.State:= gstWinner;
+                                end;
             if Flawless then
                 AddVoice(sndFlawless, Teams[0]^.voicepack)
             else
@@ -144,6 +171,8 @@
 
         if SendGameResultOn then
             SendStat(siGameResult, shortstring(s));
+        if allWin and SendAchievementsStatsOn then
+            SendStat(siEverAfter, '');
         AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000)
         end;
     SendStats;
--- a/hedgewars/uTypes.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uTypes.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -176,7 +176,7 @@
     TStatInfoType = (siGameResult, siMaxStepDamage, siMaxStepKills, siKilledHHs,
             siClanHealth, siTeamStats, siPlayerKills, siMaxTeamDamage,
             siMaxTeamKills, siMaxTurnSkips, siCustomAchievement, siGraphTitle,
-            siPointType, siTeamRank);
+            siPointType, siTeamRank, siEverAfter);
 
     // Various 'emote' animations a hedgehog can do
     TWave = (waveRollup, waveSad, waveWave, waveHurrah, waveLemonade, waveShrug, waveJuggle);
@@ -493,7 +493,7 @@
             sidWinner2, sidWinner3, sidWinner4, sidWinner5, sidWinner6,
             sidWinner7, sidWinnerAll, sidTeamGone, sidTeamBack, sidAutoSkip,
             sidFPS, sidLuaParsingOff, sidLuaParsingOn, sidLuaParsingDenied,
-            sidAmmoCount, sidChat, sidChatTeam, sidChatHog);
+            sidAmmoCount, sidChat, sidChatTeam, sidChatHog, sidEverAfter);
 
     TCmdHelpStrId = (
             sidCmdHeaderBasic, sidCmdTogglechat, sidCmdTeam, sidCmdMe,
@@ -503,7 +503,7 @@
             sidCmdHeaderTaunts, sidCmdSpeech, sidCmdThink, sidCmdYell,
             sidCmdSpeechNumberHint, sidCmdHsa, sidCmdHta, sidCmdHya,
             sidCmdHurrah, sidCmdIlovelotsoflemonade, sidCmdJuggle,
-            sidCmdRollup, sidCmdShrug, sidCmdWave);
+            sidCmdRollup, sidCmdShrug, sidCmdWave, sidCmdUnknown);
 
     // Events that are important for the course of the game or at least interesting for other reasons
     TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
--- a/hedgewars/uUtils.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uUtils.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -50,6 +50,7 @@
 
 function  IntToStr(n: LongInt): shortstring;
 function  StrToInt(s: shortstring): LongInt;
+function  StrToInt(s: shortstring; var success: boolean): LongInt;
 function  FloatToStr(n: hwFloat): shortstring;
 
 function  DxDy2Angle(const _dY, _dX: hwFloat): real; inline;
@@ -331,9 +332,22 @@
 str(n, IntToStr)
 end;
 
-function StrToInt(s: shortstring): LongInt;
+// Convert string to longint, with error checking.
+// Success will be set to false when conversion failed.
+// See documentation on Val procedure for syntax of s
+function StrToInt(s: shortstring; var success: boolean): LongInt;
+var Code: Word;
 begin
-val(s, StrToInt);
+val(s, StrToInt, Code);
+success:= Code = 0;
+end;
+
+// Convert string to longint, without error checking
+function StrToInt(s: shortstring): LongInt;
+var success: boolean; // ignored
+begin
+success:= true; // avoid compiler hint
+StrToInt:= StrToInt(s, success);
 end;
 
 function FloatToStr(n: hwFloat): shortstring;
--- a/hedgewars/uVariables.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uVariables.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -177,6 +177,7 @@
 
     bBetweenTurns   : boolean;
     bWaterRising    : boolean;
+    bDuringWaterRise: boolean;
 
     CrosshairX      : LongInt;
     CrosshairY      : LongInt;
@@ -2856,6 +2857,7 @@
     flagDumpLand    := false;
     bBetweenTurns   := false;
     bWaterRising    := false;
+    bDuringWaterRise:= false;
     isCursorVisible := false;
     isInLag         := false;
     isPaused        := false;
--- a/hedgewars/uWorld.pas	Wed Sep 05 20:09:32 2018 +0200
+++ b/hedgewars/uWorld.pas	Thu Oct 04 21:17:21 2018 +0200
@@ -2005,6 +2005,8 @@
     ammoStr: ansistring;
     tmpsurf: PSDL_Surface;
 begin
+    if cOnlyStats then exit;
+    
     ammoStrId := Ammoz[ammoType].NameId;
 
     trluaammo[ammoStrId] := name;
@@ -2014,7 +2016,7 @@
         ammoStr:= trammo[ammoStrId];
 
     if checkFails(length(ammoStr) > 0,'No default text/translation found for ammo type #' + intToStr(ord(ammoType)) + '!',true) then exit;
-        
+
     tmpsurf:= TTF_RenderUTF8_Blended(Fontz[CheckCJKFont(ammoStr,fnt16)].Handle, PChar(ammoStr), cWhiteColorChannels);
     if checkFails(tmpsurf <> nil,'Name-texture creation for ammo type #' + intToStr(ord(ammoType)) + ' failed!',true) then exit;
     tmpsurf:= doSurfaceConversion(tmpsurf);
--- a/share/hedgewars/Data/Graphics/Missions/CMakeLists.txt	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Graphics/Missions/CMakeLists.txt	Thu Oct 04 21:17:21 2018 +0200
@@ -1,3 +1,4 @@
 add_subdirectory(Training)
 add_subdirectory(Challenge)
 add_subdirectory(Scenario)
+add_subdirectory(Campaign)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/CMakeLists.txt	Thu Oct 04 21:17:21 2018 +0200
@@ -0,0 +1,5 @@
+file(GLOB MissionPics *@2x.png)
+
+install(FILES
+    ${MissionPics}
+    DESTINATION ${SHAREPATH}Data/Graphics/Missions/Campaign/A_Classic_Fairytale)
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/backstab@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/dragon@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/enemy@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/epil@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/family@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/first_blood@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/journey@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/queen@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/shadow@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Classic_Fairytale/united@2x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/CMakeLists.txt	Thu Oct 04 21:17:21 2018 +0200
@@ -0,0 +1,5 @@
+file(GLOB MissionPics *@2x.png)
+
+install(FILES
+    ${MissionPics}
+    DESTINATION ${SHAREPATH}Data/Graphics/Missions/Campaign/A_Space_Adventure)
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/cosmos@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/death01@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/death02@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/desert01@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/desert02@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/desert03@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/final@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/fruit01@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/fruit02@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/fruit03@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/ice01@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/ice02@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/moon01@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Campaign/A_Space_Adventure/moon02@2x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Graphics/Missions/Campaign/CMakeLists.txt	Thu Oct 04 21:17:21 2018 +0200
@@ -0,0 +1,2 @@
+add_subdirectory(A_Classic_Fairytale)
+add_subdirectory(A_Space_Adventure)
--- a/share/hedgewars/Data/Locale/cs.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/cs.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/da.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/da.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/de.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/de.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 ["1 - Normal Girder"]="1 – Normaler Bauträger",
 ["1 - Normal Land"]="1 – Normales Gelände",
 ["1 - Normal Rubber"]="1 – Normales Gummi",
+["+1 point"] = "+1 Punkt", -- Mutant
 ["-1 point"] = "-1 Punkt", -- Mutant
-["+1 point"] = "+1 Punkt", -- Mutant
 ["-1 to anyone for a suicide"]="-1 für Selbstmord",
 ["+1 to the Bottom Feeder for killing anyone"] = "+1 für den Versager für jeden Abschuss", -- Mutant
 ["+1 to the Mutant for killing anyone"] = "+1 für den Mutanten für jeden Abschuss", -- Mutant
@@ -121,8 +121,8 @@
 ["Anton"] = "Anton", -- 
 ["An unexpected event!"]="Ein unerwartetes Ereignis!",
 ["Anyway, the aliens accept me for who I am."] = "Jedenfalls akzeptieren die Außerirdischen mich für den, der ich bin!", -- A_Classic_Fairytale:queen
+["A random hedgehog will inherit the weapons of his deceased team-mates"]="Ein zufälliger Igel wird die Waffen seiner verstorbenen Teamkollegen erben", -- A_Space_Adventure:death02
 ["A random hedgehog will inherit the weapons of his deceased team-mates."]="Ein zufälliger Igel wird die Waffen seiner verstorbenen Teamkollegen erben.", -- A_Space_Adventure:death02
-["A random hedgehog will inherit the weapons of his deceased team-mates"]="Ein zufälliger Igel wird die Waffen seiner verstorbenen Teamkollegen erben", -- A_Space_Adventure:death02
 ["Arashi"] = "Arashi", -- 
 ["Areas surrounded by a green dashed outline are portal-proof and repel portals."] = "Land, das mit einer grünen gestrichtelten Linie umrandet ist, ist portalabweisend.", -- A_Space_Adventure:final
 ["Areas surrounded by a security border are indestructible."] = "Land, das eine Sicherheitsumrandung hat, ist unzerstörbar.", -- A_Space_Adventure:final
@@ -163,8 +163,8 @@
 ["Attack: Throw ball"] = "Angriff: Ball werfen", -- Knockball
 ["At the end of the game your health was "]="Am Ende des Spiels war deine Gesundheit ",
 ["At the end of the game your health was %d."] = "Am Ende des Spiels hattest du %d Gesundheit.", -- A_Space_Adventure:ice01
+["At the start of the game each enemy hog has only the weapon that he is named after"]="Am Anfang des Spiels hat jeder feindliche Igel nur die Waffe, nach der er benannt wurde", -- A_Space_Adventure:death02
 ["At the start of the game each enemy hog has only the weapon that he is named after."]="Am Anfang des Spiels hat jeder feindliche Igel nur die Waffe, nach der er benannt wurde.", -- A_Space_Adventure:death02
-["At the start of the game each enemy hog has only the weapon that he is named after"]="Am Anfang des Spiels hat jeder feindliche Igel nur die Waffe, nach der er benannt wurde", -- A_Space_Adventure:death02
 ["Australia"]="Australien",
 ["Available weapon specials:"] = "Verfügbare Waffenextras:", -- Continental_supplies
 ["Average pilot"]="Durchschnittlicher Pilot",
@@ -586,11 +586,11 @@
 ["DUD MINE PLACEMENT MODE"] = "BLINDGÄNGERMINENPLATZIERUNGSMODUS", -- HedgeEditor
 ["During the final testing of the device an accident happened"]="Bei den letzten Tests des Gerätes ist ein Unfall passiert.",
 ["During the final testing of the device an accident happened."] = "Bei den letzten Tests des Geräts ist ein Unfall passiert.", -- A_Space_Adventure:moon02
+["During the game you can get new RC planes by collecting the weapon crates"]="Während des Spiels kannst du neue Funkflugzeuge erhalten, indem du die Waffenkisten sammelst",
 ["During the game you can get new RC planes by collecting the weapon crates."]="Während des Spiels kannst du neue Funkflugzeuge erhalten, indem du die Waffenkisten sammelst.",
-["During the game you can get new RC planes by collecting the weapon crates"]="Während des Spiels kannst du neue Funkflugzeuge erhalten, indem du die Waffenkisten sammelst",
 ["Dust Storm"] = "Staubsturm", -- Continental_supplies
+["Each time you destroy all the targets on your current level you'll get teleported to the next level"]="Jedes Mal, wenn du alle Zielscheiben im aktuellen Level zerstörst, wirst du zum nächsten Level teleportiert",
 ["Each time you destroy all the targets on your current level you'll get teleported to the next level."]="Jedes Mal, wenn du alle Zielscheiben im aktuellen Level zerstörst, wirst du zum nächsten Level teleportiert.",
-["Each time you destroy all the targets on your current level you'll get teleported to the next level"]="Jedes Mal, wenn du alle Zielscheiben im aktuellen Level zerstörst, wirst du zum nächsten Level teleportiert",
 ["Each time you play this missions enemy hogs will play in a random order"]="Jedes Mal, wenn du diese Mission spielst, werden die feindlichen Igel in einer zufälligen Reihenfolge spielen", -- A_Space_Adventure:death02
 ["Each turn is only ONE SECOND!"]="Jeder Zug dauert nur EINE SEKUNDE!",
 ["Each turn you get 1-3 random weapons"]="Du bekommst jede Runde 1-3 zufällig gewählte Waffen",
@@ -627,8 +627,8 @@
 ["Epilogue"] = "Epilog", -- A_Classic_Fairytale:epil
 ["Eugene"] = "Eugen", -- 
 ["Europe"]="Europa",
+["Every 2 rings, the ring color will be green and you'll get an extra flying saucer"]="Alle 2 Ringe wird der Ring grün und du erhältst eine neue fliegende Untertasse",
 ["Every 2 rings, the ring color will be green and you'll get an extra flying saucer."]="Alle 2 Ringe wird der Ring grün und du erhältst eine neue fliegende Untertasse.",
-["Every 2 rings, the ring color will be green and you'll get an extra flying saucer"]="Alle 2 Ringe wird der Ring grün und du erhältst eine neue fliegende Untertasse",
 ["Every 2 rings you'll get extra flying saucers"]="Alle 2 Ringe erhältst du neue fliegende Untertassen",
 ["Every 2 rings you'll get extra flying saucers."] = "Alle 2 Ringe erhältst du neue fliegende Untertassen.", -- A_Space_Adventure:ice02
 ["Everyone knows this."]="Das weiß jeder.",
@@ -1961,8 +1961,8 @@
 ["So I shook my fist in the air!"] = "Und so schlug ich die Faust gen Himmel!", -- A_Classic_Fairytale:epil
 ["Soldier"]="Soldat",
 ["So, let me tell you what I know about Professor Hogevil."]="Also, lass mich erzählen, was ich über Professor Bösigel weiß.",
+["Some parts of the land are indestructible"]="Einige Teile des Landes sind unzerstörbar",
 ["Some parts of the land are indestructible."]="Einige Teile des Landes sind unzerstörbar.",
-["Some parts of the land are indestructible"]="Einige Teile des Landes sind unzerstörbar",
 ["Some sick game of yours?!"] = "Ein krankes Spiel von euch?!", -- A_Classic_Fairytale:queen
 ["Some weapons can be dropped from the rope."] = "Einige Waffen können vom Seil aus fallen gelassen werden.", -- Basic_Training_-_Rope
 ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"]="Irgendwo anders auf dem Obstplaneten hilft Leutnant Limone Igel Einsam",
@@ -2150,6 +2150,7 @@
 ["Team Identity Mode"]="Team-Identitätsmodus",
 ["TEAM IDENTITY MODE"]="TEAMIDENTITÄTSMODUS",
 ["Team of Hearts"]="Team der Herzen",
+["Teams are tied! Continue playing rounds until we have a winner!"] = "Gleichstand! Spielt weiter Runden, bis wir einen Sieger haben!", -- Space_Invasion
 ["Team’s best heights per round"]="Die Besthöhen der Teams pro Runde",
 ["Teamwork 2"] = "Teamwork 2", -- User_Mission_-_Teamwork_2
 ["Teamwork"] = "Teamwork", -- User_Mission_-_Teamwork
@@ -2233,8 +2234,8 @@
 ["The First Encounter"]="Das erste Zusammentreffen",
 ["The first hedgehog to kill someone becomes the Mutant."] = "Der erste Igel, der einen anderen tötet, mutiert.", -- Mutant
 ["The first stop"]="Der erste Halt",
+["The first turn will last 25 sec and every other turn 15 sec"]="Der 1. Zug wird 25 Sek., jeder andere Zug 15 Sek. dauern",
 ["The first turn will last 25 sec and every other turn 15 sec."]="Der 1. Zug wird 25 Sek., jeder andere Zug 15 Sek. dauern.",
-["The first turn will last 25 sec and every other turn 15 sec"]="Der 1. Zug wird 25 Sek., jeder andere Zug 15 Sek. dauern",
 ["The flag will respawn next round."]="Die Flagge wird nächste Runde wieder auftauchen.",
 ["The flood has stopped! Challenge over."] = "Die Flut ist vorbei! Herausforderung beendet.", -- User_Mission_-_That_Sinking_Feeling
 ["The food bites back"]="Das Essen beißt zurück",
@@ -2308,6 +2309,8 @@
 ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "Die Geister der Ahnen sind sicherlich erfreut, Undichte Stelle.", -- A_Classic_Fairytale:first_blood
 ["The targets will guide you through the training."] = "Die Zielscheiben führen dich durch die Übung.", -- Basic_Training_-_Rope
 ["The team continued their quest of finding the rest of the tribe."] = "Das Team setzte die Suche nach dem Rest ihres Stammes fort.", -- A_Classic_Fairytale:queen
+["The teams were tied, so an additional round has been played to determine the winner."] = "Die Teams hatten Gleichstand, also wurde eine weitere Runde gespielt, um den Sieger zu bestimmen.", -- Space_Invasion
+["The teams were tied, so %d additional rounds have been played to determine the winner."] = "Die Teams hatten Gleichstand, also wurden %d weitere Runden gespielt, um den Sieger zu bestimmen.", -- Space_Invasion
 ["The time that you have left when you reach the blue hedgehog will be added to the next turn."]="Deine verbleibende Zeit wird zu deinem nächsten Zug addiert, sobald du den blauen Igel erreichst.",
 ["The Torment"]="Die Qual",
 ["The truth about Professor Hogevil"]="Die Wahrheit über Professor Bösigel",
@@ -2375,6 +2378,7 @@
 ["Throw a grenade to destroy the target!"] = "Wirf eine Granate, um die Zielscheibe zu zerstören!", -- Basic_Training_-_Grenade
 ["Thug #%d"] = "Rowdy %d", -- A_Space_Adventure:death01
 ["thug"]="Rowdy",
+["Tie-breaking round %d"] = "%d. Stichrunde", -- Space_Invasion
 ["Timbers"] = "Holz", -- 
 ["Time: %.1fs"] = "Zeit: %.1fs", -- Racer, TechRacer
 ["Time: %.3fs by %s"] = "Zeit: %.3fs von %s", -- TrophyRace
@@ -2425,8 +2429,8 @@
 ["To win the game you have to find the right crate."]="Um das Spiel zu gewinnen, musst du die richtige Kiste finden.",
 ["To win the game you have to go next to Thanta."]="Um das Spiel zu gewinnen, musst du neben Thanta stehen.",
 ["To win the game you have to go to the surface."]="Um das Spiel zu gewinnen, musst du an die Oberfläche gelangen.",
+["To win the game you have to pass into the rings in time"]="Um das Spiel zu gewinnen, musst du rechtzeitig durch die Ringe fliegen",
 ["To win the game you have to pass into the rings in time."]="Um das Spiel zu gewinnen, musst du rechtzeitig durch die Ringe fliegen.",
-["To win the game you have to pass into the rings in time"]="Um das Spiel zu gewinnen, musst du rechtzeitig durch die Ringe fliegen",
 ["To win the game you have to stand next to Thanta."] = "Um das Spiel zu gewinnen, musst du neben Thanta stehen.", -- A_Space_Adventure:ice01
 ["Toxic Team"]="Giftige Gegner",
 ["Track completed!"] = "Strecke durchlaufen!", -- Racer, TechRacer
@@ -2512,16 +2516,16 @@
 ["Use space button twice to change flying saucer while being in air."]="Drücke die Angriffstaste 2 mal, um die fliegende Untertasse im Flug zu wechseln",
 ["Use space button twice to change flying saucer while floating in mid-air."]="Drücke die Angriffstaste 2 mal, um die fliegende Untertasse im Flug zu wechseln.",
 ["Use the attack key twice to change the flying saucer while being in air."] = "Benutze die Angriffstaste 2 mal, um die fliegende Untertasse in der Luft zu wechseln.", -- A_Space_Adventure:ice02
+["Use the attack key twice to change the flying saucer while floating in mid-air"] = "Benutze die Angriffstaste 2 mal, um die Fliegende Untertasse während des Fluges zu wechseln", -- A_Space_Adventure:ice02
 ["Use the attack key twice to change the flying saucer while floating in mid-air."] = "Benutze die Angriffstaste 2 mal, um die Fliegende Untertasse während des Fluges zu wechseln.", -- A_Space_Adventure:ice02
-["Use the attack key twice to change the flying saucer while floating in mid-air"] = "Benutze die Angriffstaste 2 mal, um die Fliegende Untertasse während des Fluges zu wechseln", -- A_Space_Adventure:ice02
 ["Use the bazooka and the flying saucer to get the freezer."] = "Benutze die Bazooka und die fliegende Untertasse, um die Eiskanone zu ergattern.", -- A_Space_Adventure:ice01
 ["Use the bazooka and the flying saucer to get the icegun."]="Benutze die Bazooka und die fliegende Untertasse, um die Eiskanone zu ergattern",
 ["Use the flying saucer from the crate to fly to the moon."] = "Benutze die fliegende Untertasse aus der Kiste, um zum Mond zu fliegen.", -- A_Space_Adventure:cosmos
 ["Use the flying saucer to fly to the other planets."] = "Benutze die fliegende Untertasse, um zu den anderen Planeten zu fliegen.", -- A_Space_Adventure:cosmos
 ["Use the parachute ([Space] while in air) to get the next crate"]="Benutze den Fallschirm ([Leer] drücken, wenn in der Luft), um die nächste Kiste zu erhalten.",
 ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"]="Benutze das Portalgewehr, um zur nächsten Kiste zu kommen,|dann benutze das nächste Werkzeug, um zum letzten Ziel zu kommen.|",
+["Use the RC plane and destroy the all the targets"]="Benutze das Funkflugzeug und zerstöre alle Zielscheiben",
 ["Use the RC plane and destroy the all the targets."]="Benutze das Funkflugzeug und zerstöre alle Zielscheiben.",
-["Use the RC plane and destroy the all the targets"]="Benutze das Funkflugzeug und zerstöre alle Zielscheiben",
 ["Use the rope in order to catch the blue hedgehog"]="Benutze das Seil, um den blauen Igel zu fangen.",
 ["Use the rope to complete the obstacle course!"] = "Benutze das Seil, um die Hindernisstrecke abzuschließen!", -- Basic_Training_-_Rope
 ["Use the rope to get on the head of the mole, young one!"]="Benutze das Seil, um auf den Kopf des Maulwurfs zu gelangen, Jüngling!",
@@ -2552,8 +2556,8 @@
 ["Use this mode to tag gears for win/lose conditions."]="Benutze diesen Modus, um Gears für Sieg-/Niederlagebedingungen zu markieren.",
 ["Use this mode to waypoints"]="Benutze diesen Modus, um Wegpunkte zu platzieren",
 ["Use your ammo wisely."]="Benutze deine Munition weise.",
+["Use your available weapons in order to eliminate the enemies"]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren",
 ["Use your available weapons in order to eliminate the enemies."]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren.",
-["Use your available weapons in order to eliminate the enemies"]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren",
 ["Use your ready time to think."]="Benutze deine Vorbereitungszeit zum Denken.",
 ["Use your rope to collect all crates as fast as possible."] = "Benutze dein Seil, um alle Kisten so schnell wie möglich einzusammeln.", -- 
 ["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!",
@@ -2796,8 +2800,8 @@
 ["You can dive with your flying saucer!"] = "Mit deiner fliegenden Untertasse kannst du abtauchen!", -- Basic_Training_-_Flying_Saucer
 ["You can even change your aiming direction in mid-flight if you first hold [Precise] and then press [Up] or [Down]."] = "Du kannst sogar deine Zielrichtung im Flug ändern, wenn du|zuerst [Genaues Zielen] gedrückt hältst, und dann [Hoch] oder [Runter] drückst.", -- Basic_Training_-_Flying_Saucer
 ["You can further customize the race by changing the scheme script parameter."] = "Du kannst das Rennen ferner bearbeiten, indem du den Skriptparameter im Schema änderst.", -- TechRacer
+["You can only use the sniper rifle or the watermelon bomb"]="Du kannst nur das Scharfschützengewehr oder die Wassermelonenbombe benutzen",
 ["You can only use the sniper rifle or the watermelon bomb."]="Du kannst nur das Scharfschützengewehr oder die Wassermelonenbombe benutzen.",
-["You can only use the sniper rifle or the watermelon bomb"]="Du kannst nur das Scharfschützengewehr oder die Wassermelonenbombe benutzen",
 ["You can practice moving around and using utilities in this mission.|However, it will never end!"] = "In dieser Mission kannst du üben, dich herumbewegen|und Werkzeuge benutzen.|Aber sie wird niemals enden!", -- A_Classic_Fairytale:epil
 ["You can set the bounciness of grenades (and grenade-like weapons)."] = "Du kannst die Sprunghaftigkeit von Granaten (und granatenähnlichen Waffen) setzen.", -- Basic_Training_-_Grenade
 ["You can’t open a portal on the blue surface."] = "Du kannst kein Portal auf der blauen Oberfläche öffnen.", -- portal
@@ -2918,16 +2922,16 @@
 ["You killed my father, you monster!"]="Du hast meinen Vater umgebracht, du Monster!",
 ["You know...taking a stroll."]="Du weißt schon … umherbummeln.",
 ["You know what? I don't even regret anything!"]="Weißt du was? Ich bereue nichts!",
+["You'll get an extra sniper rifle every time you kill an enemy hog with a limit of max 4 rifles"] = "Du erhältst ein zusätzliches Scharfschützengewehr für jeden Igel, den du tötest (max. 4 Gewehre)", -- A_Space_Adventure:fruit03
 ["You'll get an extra sniper rifle every time you kill an enemy hog with a limit of max 4 rifles."] = "Du erhältst ein zusätzliches Scharfschützengewehr für jeden Igel, den du tötest (max. 4 Gewehre).", -- A_Space_Adventure:fruit03
-["You'll get an extra sniper rifle every time you kill an enemy hog with a limit of max 4 rifles"] = "Du erhältst ein zusätzliches Scharfschützengewehr für jeden Igel, den du tötest (max. 4 Gewehre)", -- A_Space_Adventure:fruit03
+["You'll get an extra teleport every time you kill an enemy hog with a limit of max 2 teleports"]="Du erhältst einen zusätzlichen Teleporter für jeden getöteten Igel (max. 2 Teleporter)", -- A_Space_Adventure:fruit03
 ["You'll get an extra teleport every time you kill an enemy hog with a limit of max 2 teleports."]="Du erhältst einen zusätzlichen Teleporter für jeden getöteten Igel (max. 2 Teleporter).", -- A_Space_Adventure:fruit03
-["You'll get an extra teleport every time you kill an enemy hog with a limit of max 2 teleports"]="Du erhältst einen zusätzlichen Teleporter für jeden getöteten Igel (max. 2 Teleporter)", -- A_Space_Adventure:fruit03
+["You'll get extra time in case you need it when you pass a ring"]="Du erhältst Bonuszeit, wenn du sie brauchst, sobald du einen Ring passierst", -- A_Space_Adventure:ice02
 ["You'll get extra time in case you need it when you pass a ring."]="Du erhältst Bonuszeit, wenn du sie brauchst, sobald du einen Ring passierst.", -- A_Space_Adventure:ice02
-["You'll get extra time in case you need it when you pass a ring"]="Du erhältst Bonuszeit, wenn du sie brauchst, sobald du einen Ring passierst", -- A_Space_Adventure:ice02
+["You'll have only 2 watermelon bombs during the game"]="Du hast nur 2 Wassermelonenbomben während des Spiels", -- A_Space_Adventure:fruit03
 ["You'll have only 2 watermelon bombs during the game."]="Du hast nur 2 Wassermelonenbomben während des Spiels.", -- A_Space_Adventure:fruit03
-["You'll have only 2 watermelon bombs during the game"]="Du hast nur 2 Wassermelonenbomben während des Spiels", -- A_Space_Adventure:fruit03
+["You'll have only one RC plane at the start of the mission"]="Am Anfang der Mission hast du nur ein Funkflugzeug",
 ["You'll have only one RC plane at the start of the mission."]="Am Anfang der Mission hast du nur ein Funkflugzeug.",
-["You'll have only one RC plane at the start of the mission"]="Am Anfang der Mission hast du nur ein Funkflugzeug",
 ["You'll have to eliminate Captain Lime at the end."]="Am Ende musst du Leutnant Limone eliminieren.", -- A_Space_Adventure:fruit02
 ["You'll have to eliminate the Fruit Assassins at the end."] = "Am Ende musst du die Obstassassinen eliminieren.", -- A_Space_Adventure:fruit02
 ["You'll have to eliminate the Strawberry Assassins at the end."]="Am Ende musst du die Erdbeerassassinen eliminieren.", -- A_Space_Adventure:fruit02
--- a/share/hedgewars/Data/Locale/de.txt	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/de.txt	Thu Oct 04 21:17:21 2018 +0200
@@ -1398,7 +1398,7 @@
 ; Chat command help
 06:00=Liste der grundlegenden Client-Chatbefehle:
 06:01=/togglechat: Chatanzeige umschalten
-06:02=/team <Nachricht>: Nachricht nur an Klanmitglieder schicken
+06:02=/clan <Nachricht>: Nachricht nur an Klanmitglieder schicken
 06:03=/me <Nachricht>: Chataktion, z.B. wird »/me isst Pizza« zu »* Spieler isst Pizza«
 06:04=/pause: Pause umschalten
 06:05=/pause: Automatisches Überspringen umschalten
@@ -1422,3 +1422,4 @@
 06:23=/rollup: Igel sich einigeln lassen
 06:24=/shrug: Igel mit den Achseln zucken lassen
 06:25=/wave: Igel winken lassen
+06:26=Unbekannter Befehl oder ungültige Parameter. Sag »/help« im Chat für eine Liste an Befehlen.
--- a/share/hedgewars/Data/Locale/en.txt	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/en.txt	Thu Oct 04 21:17:21 2018 +0200
@@ -1301,7 +1301,7 @@
 ; Chat command help
 06:00=List of basic client chat commands:
 06:01=/togglechat: Toggle chat display
-06:02=/team <message>: Send message to clan members only
+06:02=/clan <message>: Send message to clan members only
 06:03=/me <message>: Chat action, e.g. “/me eats pizza” becomes “* Player eats pizza”
 06:04=/pause: Toggle pause
 06:05=/pause: Toggle auto skip
@@ -1325,3 +1325,4 @@
 06:23=/rollup: Make hedgehog roll up
 06:24=/shrug: Make hedgehog shrug
 06:25=/wave: Make hedgehog wave its hand
+06:26=Unknown command or invalid parameters. Say “/help” in chat for a list of commands.
--- a/share/hedgewars/Data/Locale/es.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/es.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/fr.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/fr.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
       ["-1 to anyone for a suicide"] = "-1 pour cause de suicide",
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -1582,8 +1582,8 @@
 	  ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "L'une des deux tribus était pacifique, passant son temps à chasser et à s'entraîner, appréciant les petits plaisirs de la vie",
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1666,8 +1666,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
       ["Play with me!"] = "Joue avec moi !",
@@ -1860,8 +1860,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2182,6 +2182,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2344,6 +2345,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
       ["The Torment"] = "Le supplice",
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2415,6 +2418,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/hedgewars_ar.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1346,6 +1346,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4123,10 +4127,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4147,10 +4147,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4167,18 +4163,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4191,14 +4175,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4230,5 +4206,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_bg.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1353,6 +1353,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4159,10 +4163,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4183,10 +4183,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4203,18 +4199,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4227,14 +4211,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4266,5 +4242,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_cs.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1384,6 +1384,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4233,10 +4237,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4257,10 +4257,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4277,18 +4273,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4301,14 +4285,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4340,5 +4316,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_da.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_da.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1371,6 +1371,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4229,10 +4233,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4253,10 +4253,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4273,18 +4269,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4297,14 +4281,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4336,5 +4312,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -966,7 +966,7 @@
 
 Please check the host name and port settings and/or try again later.</source>
         <translation>Die Verbindung wurde vom Host abgelehnt oder die maximale Wartezeit ist abgelaufen. Dies könnte einen der folgenden Gründe haben:
-– Das Hedgewars-Server-Programm läuft momentant nicht auf dem Host
+– Das Hedgewars-Server-Programm läuft momentan nicht auf dem Host
 – Die angegebene Portnummer ist falsch
 – Es gibt ein temporäres Netzwerkproblem
 
@@ -1187,7 +1187,7 @@
     <name>PageAdmin</name>
     <message>
         <source>Clear Accounts Cache</source>
-        <translation>Zwischenspeicher leeren</translation>
+        <translation>Konten-Zwischenspeicher leeren</translation>
     </message>
     <message>
         <source>Fetch data</source>
@@ -1228,7 +1228,7 @@
     </message>
     <message>
         <source>Expiration</source>
-        <translation>Ablaufzeitpunkt</translation>
+        <translation>Ablaufzeit</translation>
     </message>
     <message>
         <source>Reason</source>
@@ -1545,6 +1545,10 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; erledigte &lt;b&gt;%2&lt;/b&gt; der eigenen Igel.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation>Da alle die gleiche Klanfarbe hatten, gab es keinen Grund für einen Kampf. Und wenn sie nicht gestorben sind, dann leben die Igel noch heute in Frieden.</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4732,7 +4736,7 @@
     </message>
     <message>
         <source>/rnd: Flip a virtual coin and reply with &apos;heads&apos; or &apos;tails&apos;</source>
-        <translation>/rnd: Wirft eine virtuelle Münze und antwortet mit »heads« oder »tails«</translation>
+        <translation>/rnd: Wirft eine virtuelle Münze und antwortet mit »Kopf« oder »Zahl«</translation>
     </message>
     <message>
         <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
@@ -4756,7 +4760,7 @@
     </message>
     <message>
         <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation>/greeting &lt;Nachricht&gt;: Begrüßungsnachricht für Spieler, die diesen Raum betreten, setzen</translation>
+        <translation type="vanished">/greeting &lt;Nachricht&gt;: Begrüßungsnachricht für Spieler, die diesen Raum betreten, setzen</translation>
     </message>
     <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
@@ -4780,7 +4784,7 @@
     </message>
     <message>
         <source>/save &lt;parameter&gt;</source>
-        <translation>/save &lt;Parameter&gt;</translation>
+        <translation type="vanished">/save &lt;Parameter&gt;</translation>
     </message>
     <message>
         <source>/stats: Query server stats</source>
@@ -4800,15 +4804,15 @@
     </message>
     <message>
         <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation>/saveroom &lt;Dateiname&gt;: Raumeinstellungen in eine Datei speichern</translation>
+        <translation type="vanished">/saveroom &lt;Dateiname&gt;: Raumeinstellungen in eine Datei speichern</translation>
     </message>
     <message>
         <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation>/loadroom &lt;Dateiname&gt;: Raumeinstellungen aus einer Datei laden</translation>
+        <translation type="vanished">/loadroom &lt;Dateiname&gt;: Raumeinstellungen aus einer Datei laden</translation>
     </message>
     <message>
         <source>/delete &lt;parameter&gt;</source>
-        <translation>/delete &lt;Parameter&gt;</translation>
+        <translation type="vanished">/delete &lt;Parameter&gt;</translation>
     </message>
     <message>
         <source>List of lobby chat commands:</source>
@@ -4824,11 +4828,11 @@
     </message>
     <message>
         <source>Unknown command:</source>
-        <translation>Unbekannter Befehl</translation>
+        <translation type="vanished">Unbekannter Befehl</translation>
     </message>
     <message>
         <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation>Sag »/help« im Chat für eine Liste von Befehlen</translation>
+        <translation type="vanished">Sag »/help« im Chat für eine Liste von Befehlen</translation>
     </message>
     <message>
         <source>room</source>
@@ -4862,5 +4866,97 @@
         <source>Kicked</source>
         <translation>Hinausgeworfen</translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation>Dieser Server lässt nur registrierte Server rein.</translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation>Kopf</translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation>Zahl</translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation>Dieser Server unterstützt keine Wiederholungen!</translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation>/greeting [Nachricht]: Setze oder leere die Begrüßungsnachricht für Spieler, die den Raum betreten</translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation>/save &lt;Konfig-ID&gt; &lt;Konfig-Name&gt;: Aktuelle Raumeinstellung als Wahloption für /callvote map hinzufügen</translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation>/delete &lt;Konfig-ID&gt;: Eine wählbare Raumeinstellung löschen</translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation>/saveroom &lt;Dateiname&gt;: Alle wählbaren Raumeinstellungen (und die Begrüßung) dieses Raums in eine Datei speichern</translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation>/loadroom &lt;Dateiname&gt;: Wählbare Raumeinstellungen (und Begrüßung) aus einer Datei laden</translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation>»Registered only«-Zustand umgeschaltet.</translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation>Superkraft aktiviert.</translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation>Unbekannter Befehl oder ungültige Parameter. Sag »/help« im Chat für eine Liste an Befehlen.</translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation>Du kannst dich nicht selbst hinauswerfen!</translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation>Du kannst nicht den einzigen anderen Spieler hinauswerfen!</translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation>Der Spieler befindet sich nicht in deinem Raum.</translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation>Dieser Spieler wird vor Hinauswürfen geschützt.</translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation>Du bist nicht der Raumleiter oder ein Server-Admin!</translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation>Du bist bereits der Raumleiter.</translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation>Begrüßungsnachricht geleert.</translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation>Begrüßungsnachricht gesetzt.</translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation>/callvote kick: Dies ist nur in Räumen ohne Raumleiter erlaubt.</translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation>/callvote map: Keine Karten verfügbar.</translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation>Du bist der neue Raumleiter!</translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_el.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_el.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1365,6 +1365,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4207,10 +4211,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4231,10 +4231,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4251,18 +4247,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4275,14 +4259,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4314,5 +4290,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_en.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_en.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1461,6 +1461,10 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of their own hedgehogs.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4540,7 +4544,7 @@
     </message>
     <message>
         <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</translation>
+        <translation type="vanished">/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</translation>
     </message>
     <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
@@ -4564,7 +4568,7 @@
     </message>
     <message>
         <source>/save &lt;parameter&gt;</source>
-        <translation>/save &lt;parameter&gt;</translation>
+        <translation type="vanished">/save &lt;parameter&gt;</translation>
     </message>
     <message>
         <source>/stats: Query server stats</source>
@@ -4584,15 +4588,15 @@
     </message>
     <message>
         <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation>/saveroom &lt;file name&gt;: Save room configuration into a file</translation>
+        <translation type="vanished">/saveroom &lt;file name&gt;: Save room configuration into a file</translation>
     </message>
     <message>
         <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation>/loadroom &lt;file name&gt;: Load room configuration from a file</translation>
+        <translation type="vanished">/loadroom &lt;file name&gt;: Load room configuration from a file</translation>
     </message>
     <message>
         <source>/delete &lt;parameter&gt;</source>
-        <translation>/delete &lt;parameter&gt;</translation>
+        <translation type="vanished">/delete &lt;parameter&gt;</translation>
     </message>
     <message>
         <source>List of lobby chat commands:</source>
@@ -4608,11 +4612,11 @@
     </message>
     <message>
         <source>Unknown command:</source>
-        <translation>Unknown command:</translation>
+        <translation type="vanished">Unknown command:</translation>
     </message>
     <message>
         <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation>Say ‘/help’ in chat for a list of commands</translation>
+        <translation type="vanished">Say ‘/help’ in chat for a list of commands</translation>
     </message>
     <message>
         <source>room</source>
@@ -4646,5 +4650,97 @@
         <source>Kicked</source>
         <translation>Kicked</translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation>This server only allows registered users to join.</translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation>heads</translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation>tails</translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation>This server does not support replays!</translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation>/greeting [message]: Set or clear greeting message to be shown to players who join the room</translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation>/delete &lt;config ID&gt;: Delete a votable room configuration</translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation>‘Registered only’ state toggled.</translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation>Super power activated.</translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation>Unknown command or invalid parameters. Say ‘/help’ in chat for a list of commands.</translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation>You can’t kick yourself!</translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation>You can’t kick the only other player!</translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation>The player is not in your room.</translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation>This player is protected from being kicked.</translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation>You’re not the room master or a server admin!</translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation>You’re already the room master.</translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation>Greeting message cleared.</translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation>Greeting message set.</translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation>/callvote kick: This is only allowed in rooms without a room master.</translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation>/callvote map: No maps available.</translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation>You’re the new room master!</translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_es.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_es.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1371,6 +1371,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4225,10 +4229,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4249,10 +4249,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4269,18 +4265,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4293,14 +4277,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4332,5 +4308,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_fi.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1422,6 +1422,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4425,10 +4429,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4449,10 +4449,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4469,18 +4465,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4493,14 +4477,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4532,5 +4508,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_fr.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1447,6 +1447,10 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; a tué &lt;b&gt;%2&lt;/b&gt; de ses propres hérissons.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4607,10 +4611,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4631,10 +4631,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4651,18 +4647,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4675,14 +4659,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4714,5 +4690,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_gd.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_gd.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1456,6 +1456,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4473,10 +4477,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4497,10 +4497,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4517,18 +4513,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4541,14 +4525,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4580,5 +4556,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_gl.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_gl.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1345,6 +1345,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4150,10 +4154,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4174,10 +4174,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4194,18 +4190,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4218,14 +4202,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4257,5 +4233,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_hu.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1330,6 +1330,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4140,10 +4144,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4164,10 +4164,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4184,18 +4180,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4208,14 +4192,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4247,5 +4223,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_it.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_it.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1430,6 +1430,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4479,10 +4483,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4503,10 +4503,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4523,18 +4519,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4547,14 +4531,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4586,5 +4562,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ja.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1340,6 +1340,10 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt;は自分の針鼠を&lt;b&gt;%2&lt;/b&gt;匹犠牲にしました。</numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4086,10 +4090,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4110,10 +4110,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4130,18 +4126,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4154,14 +4138,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4193,5 +4169,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ko.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1307,6 +1307,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -3981,10 +3985,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4005,10 +4005,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4025,18 +4021,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4049,14 +4033,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4088,5 +4064,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_lt.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -660,45 +660,45 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1814"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1822"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/>
         <source>Cannot save record to file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2128"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2136"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2129"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2137"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2264"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2272"/>
         <source>Unknown network error (possibly missing SSL library).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2268"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2276"/>
         <source>This feature requires an Internet connection, but you don&apos;t appear to be online (error code: %1).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2273"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/>
         <source>Internal error: Reply object is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1011,17 +1011,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="559"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/>
         <source>Server authentication error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="781"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/>
         <source>Room destroyed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="538"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/>
         <source>You got kicked</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1041,24 +1041,24 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="724"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="856"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/>
         <source>%1 *** %2 has joined the room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="871"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/>
         <source>%1 *** %2 has left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="878"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="898"/>
         <source>%1 *** %2 has left (message: &quot;%3&quot;)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="883"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="886"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="906"/>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1546,7 +1546,7 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="76"/>
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="166"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="167"/>
         <source>Health graph</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1566,7 +1566,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="266"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="267"/>
         <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">
             <numerusform></numerusform>
@@ -1575,7 +1575,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="274"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="275"/>
         <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>
@@ -1584,7 +1584,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="281"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="282"/>
         <source>A total of &lt;b&gt;%1&lt;/b&gt; hedgehog(s) were killed during this round.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1593,7 +1593,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="356"/>
         <source>(%1 kill)</source>
         <extracomment>Number of kills in stats screen, written after the team name</extracomment>
         <translation type="unfinished">
@@ -1603,7 +1603,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="362"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/>
         <source>(%1 %2)</source>
         <extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment>
         <translation type="unfinished">
@@ -1613,7 +1613,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="375"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="373"/>
         <source>&lt;b&gt;%1&lt;/b&gt; thought it&apos;s good to shoot their own hedgehogs for &lt;b&gt;%2&lt;/b&gt; pts.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1622,7 +1622,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="383"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="381"/>
         <source>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of their own hedgehogs.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1631,7 +1631,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="391"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="389"/>
         <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>
@@ -1639,6 +1639,11 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="406"/>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -1785,7 +1790,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="146"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="147"/>
         <source>Start fighting (requires at least 2 teams)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2525,13 +2530,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="709"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="707"/>
         <source>%1 (%2%) - %3</source>
         <extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="712"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="710"/>
         <source>encoding</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2929,7 +2934,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="295"/>
         <source>Playing teams</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3321,12 +3326,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2289"/>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2290"/>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
         <translation type="unfinished"></translation>
@@ -3359,18 +3364,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2168"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2176"/>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/>
         <source>Hedgewars - Success</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2169"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2177"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2174"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2182"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3401,7 +3406,7 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="253"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/>
         <source>Netgame - Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3411,7 +3416,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="254"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="258"/>
         <source>Please enter room name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3462,18 +3467,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="589"/>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="618"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="587"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="616"/>
         <source>Videos - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="590"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="588"/>
         <source>Do you really want to delete the video &apos;%1&apos;?</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="619"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="617"/>
         <source>Do you really want to remove %1 file(s)?</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3906,7 +3911,7 @@
 <context>
     <name>TeamSelWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="300"/>
         <source>At least two teams are required to play!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4681,447 +4686,527 @@
 <context>
     <name>server</name>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="83"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="99"/>
         <source>New voting started</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="85"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="101"/>
         <source>kick</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="86"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
         <source>map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="87"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="103"/>
         <source>pause</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="88"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="104"/>
         <source>new seed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="59"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="71"/>
         <source>/maxteams: specify number from 2 to 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="60"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
         <source>Available callvote commands: kick &lt;nickname&gt;, map &lt;name&gt;, pause, newseed, hedgehogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="90"/>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="2"/>
-        <source>No checker rights</source>
+        <source>Nickname is already in use</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
-        <source>Authentication failed</source>
+        <source>This server only allows registered users to join.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="4"/>
-        <source>60 seconds cooldown after kick</source>
+        <source>No checker rights</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="5"/>
-        <source>Kicked</source>
+        <source>Authentication failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
-        <source>kicked</source>
+        <source>60 seconds cooldown after kick</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
-        <source>Reconnected too fast</source>
+        <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="8"/>
-        <source>Ping timeout</source>
+        <source>kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
-        <source>/info &lt;player&gt;: Show info about player</source>
+        <source>Reconnected too fast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
-        <source>/me &lt;message&gt;: Chat action, e.g. &apos;/me eats pizza&apos; becomes &apos;* Player eats pizza&apos;</source>
+        <source>Ping timeout</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
-        <source>/rnd: Flip a virtual coin and reply with &apos;heads&apos; or &apos;tails&apos;</source>
+        <source>heads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
-        <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
+        <source>tails</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
-        <source>/watch &lt;id&gt;: Watch a demo stored on the server with the given ID</source>
+        <source>This server does not support replays!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
-        <source>/help: Show chat command help</source>
+        <source>/info &lt;player&gt;: Show info about player</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
-        <source>/callvote [arguments]: Start a vote</source>
+        <source>/me &lt;message&gt;: Chat action, e.g. &apos;/me eats pizza&apos; becomes &apos;* Player eats pizza&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
-        <source>/vote &lt;yes/no&gt;: Vote &apos;yes&apos; or &apos;no&apos; for active vote</source>
+        <source>/rnd: Flip a virtual coin and reply with &apos;heads&apos; or &apos;tails&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="17"/>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
+        <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="18"/>
-        <source>/delegate &lt;player&gt;: Surrender room control to player</source>
+        <source>/watch &lt;id&gt;: Watch a demo stored on the server with the given ID</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
-        <source>/maxteams &lt;N&gt;: Limit maximum number of teams to N</source>
+        <source>/help: Show chat command help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
-        <source>/global &lt;message&gt;: Send global chat message which can be seen by everyone on the server</source>
+        <source>/callvote [arguments]: Start a vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="21"/>
-        <source>/registered_only: Toggle &apos;registered only&apos; state. If enabled, only registered players can join server</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
-        <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
+        <source>/vote &lt;yes/no&gt;: Vote &apos;yes&apos; or &apos;no&apos; for active vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
-        <source>/save &lt;parameter&gt;</source>
+        <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
-        <source>/stats: Query server stats</source>
+        <source>/maxteams &lt;N&gt;: Limit maximum number of teams to N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
-        <source>/force &lt;yes/no&gt;: Force vote result for active vote</source>
+        <source>/global &lt;message&gt;: Send global chat message which can be seen by everyone on the server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
-        <source>/fix: Force this room to stay open when it is empty</source>
+        <source>/registered_only: Toggle &apos;registered only&apos; state. If enabled, only registered players can join server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
-        <source>/unfix: Undo the /fix command</source>
+        <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
+        <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
+        <source>/force &lt;yes/no&gt;: Force vote result for active vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="30"/>
-        <source>/delete &lt;parameter&gt;</source>
+        <source>/fix: Force this room to stay open when it is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="31"/>
+        <source>/unfix: Undo the /fix command</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
         <source>List of room chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
-        <source>Commands for server admins only:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
-        <source>Unknown command:</source>
+        <source>Commands for server admins only:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
+        <source>room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
+        <source>lobby</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="48"/>
+        <source>(playing)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
+        <source>(spectating)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="50"/>
+        <source>Player is not online.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="51"/>
+        <source>The game can&apos;t be started with less than two clans!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="52"/>
+        <source>Empty config entry.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="53"/>
+        <source>Access denied.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="54"/>
+        <source>You&apos;re not the room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="55"/>
+        <source>Corrupted hedgehogs info!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="56"/>
+        <source>Too many teams!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="57"/>
+        <source>Too many hedgehogs!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="58"/>
+        <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="59"/>
+        <source>Joining not possible: Round is in progress.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="60"/>
+        <source>This room currently does not allow adding new teams.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="61"/>
+        <source>Error: The team you tried to remove does not exist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="62"/>
+        <source>You can&apos;t remove a team you don&apos;t own.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="63"/>
+        <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="64"/>
+        <source>A room with the same name already exists.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="65"/>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="66"/>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="67"/>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="68"/>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="69"/>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="70"/>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="72"/>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="73"/>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
+        <source>/callvote kick: You need to specify a nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="76"/>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
+        <source>/callvote kick: No such user!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="78"/>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="79"/>
+        <source>/callvote map: No such map!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
+        <source>/callvote pause: No game in progress!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
+        <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="82"/>
+        <source>/force: Please use &apos;yes&apos; or &apos;no&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="83"/>
+        <source>/vote: Please use &apos;yes&apos; or &apos;no&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="84"/>
+        <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="85"/>
+        <source>No such room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="86"/>
+        <source>Room version incompatible to your Hedgewars version!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="87"/>
+        <source>Access denied. This room currently doesn&apos;t allow joining.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="88"/>
+        <source>Access denied. This room is for registered users only.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="89"/>
+        <source>You are banned from this room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="90"/>
+        <source>Nickname already provided.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="91"/>
+        <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="92"/>
+        <source>Protocol already known.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="93"/>
+        <source>Bad number.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="94"/>
+        <source>There&apos;s no voting going on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="95"/>
+        <source>You already have voted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="96"/>
+        <source>Your vote has been counted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="97"/>
+        <source>Voting closed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="98"/>
+        <source>Pause toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="100"/>
+        <source>Voting expired.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
+        <source>hedgehogs per team: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="106"/>
+        <source>You&apos;re the new room master!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="39"/>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
+        <source>Warning! Chat flood protection activated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="35"/>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
-        <source>room</source>
+        <source>Excess flood</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
-        <source>lobby</source>
+        <source>Game messages flood detected - 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
-        <source>(playing)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
-        <source>(spectating)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
-        <source>Player is not online.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
-        <source>The game can&apos;t be started with less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
-        <source>Empty config entry.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
-        <source>Access denied.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="48"/>
-        <source>You&apos;re not the room master!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
-        <source>Corrupted hedgehogs info!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="50"/>
-        <source>Too many teams!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="51"/>
-        <source>Too many hedgehogs!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="52"/>
-        <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="53"/>
-        <source>Joining not possible: Round is in progress.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="54"/>
-        <source>This room currently does not allow adding new teams.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="55"/>
-        <source>Error: The team you tried to remove does not exist.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="56"/>
-        <source>You can&apos;t remove a team you don&apos;t own.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="57"/>
-        <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="58"/>
-        <source>A room with the same name already exists.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="61"/>
-        <source>/callvote kick: You need to specify a nickname.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="62"/>
-        <source>/callvote kick: No such user!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="63"/>
-        <source>/callvote map: No such map!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="64"/>
-        <source>/callvote pause: No game in progress!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="65"/>
-        <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="66"/>
-        <source>/force: Please use &apos;yes&apos; or &apos;no&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="67"/>
-        <source>/vote: Please use &apos;yes&apos; or &apos;no&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="68"/>
-        <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="69"/>
-        <source>No such room.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="70"/>
-        <source>Room version incompatible to your Hedgewars version!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="71"/>
-        <source>Access denied. This room currently doesn&apos;t allow joining.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="72"/>
-        <source>Access denied. This room is for registered users only.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="73"/>
-        <source>You are banned from this room.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
-        <source>Nickname already provided.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
-        <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="76"/>
-        <source>Protocol already known.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
-        <source>Bad number.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="78"/>
-        <source>There&apos;s no voting going on.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="79"/>
-        <source>You already have voted.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
-        <source>Your vote has been counted.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
-        <source>Voting closed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="82"/>
-        <source>Pause toggled.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="84"/>
-        <source>Voting expired.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="89"/>
-        <source>hedgehogs per team: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
-        <source>Warning! Chat flood protection activated</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="35"/>
-        <source>Excess flood</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
-        <source>Game messages flood detected - 1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
         <source>Warning! Joins flood protection activated</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_ms.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ms.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -648,45 +648,45 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1814"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1822"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/>
         <source>Cannot save record to file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2128"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2136"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2129"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2137"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2264"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2272"/>
         <source>Unknown network error (possibly missing SSL library).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2268"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2276"/>
         <source>This feature requires an Internet connection, but you don&apos;t appear to be online (error code: %1).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2273"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/>
         <source>Internal error: Reply object is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -999,34 +999,34 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="538"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/>
         <source>You got kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="559"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/>
         <source>Server authentication error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="871"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/>
         <source>%1 *** %2 has left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="878"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="898"/>
         <source>%1 *** %2 has left (message: &quot;%3&quot;)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="883"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="886"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="906"/>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="724"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="856"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/>
         <source>%1 *** %2 has joined the room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1046,7 +1046,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="781"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/>
         <source>Room destroyed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1532,7 +1532,7 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="76"/>
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="166"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="167"/>
         <source>Health graph</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1552,28 +1552,28 @@
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="266"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="267"/>
         <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">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="274"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="275"/>
         <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="281"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="282"/>
         <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="359"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="356"/>
         <source>(%1 kill)</source>
         <extracomment>Number of kills in stats screen, written after the team name</extracomment>
         <translation type="unfinished">
@@ -1581,7 +1581,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="362"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/>
         <source>(%1 %2)</source>
         <extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment>
         <translation type="unfinished">
@@ -1589,26 +1589,31 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="375"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="373"/>
         <source>&lt;b&gt;%1&lt;/b&gt; thought it&apos;s good to shoot their own hedgehogs for &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="383"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="381"/>
         <source>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of their own hedgehogs.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="391"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="389"/>
         <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>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="406"/>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -1755,7 +1760,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="146"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="147"/>
         <source>Start fighting (requires at least 2 teams)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2491,13 +2496,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="709"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="707"/>
         <source>%1 (%2%) - %3</source>
         <extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="712"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="710"/>
         <source>encoding</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2905,7 +2910,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="295"/>
         <source>Playing teams</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3287,12 +3292,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2289"/>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2290"/>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
         <translation type="unfinished"></translation>
@@ -3325,24 +3330,24 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2168"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2176"/>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/>
         <source>Hedgewars - Success</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2169"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2177"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2174"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2182"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="253"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/>
         <source>Netgame - Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3352,7 +3357,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="254"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="258"/>
         <source>Please enter room name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3403,18 +3408,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="589"/>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="618"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="587"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="616"/>
         <source>Videos - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="590"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="588"/>
         <source>Do you really want to delete the video &apos;%1&apos;?</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="619"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="617"/>
         <source>Do you really want to remove %1 file(s)?</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3870,7 +3875,7 @@
 <context>
     <name>TeamSelWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="300"/>
         <source>At least two teams are required to play!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4645,447 +4650,527 @@
 <context>
     <name>server</name>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="83"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="99"/>
         <source>New voting started</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="85"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="101"/>
         <source>kick</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="86"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
         <source>map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="87"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="103"/>
         <source>pause</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="88"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="104"/>
         <source>new seed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="59"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="71"/>
         <source>/maxteams: specify number from 2 to 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="60"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
         <source>Available callvote commands: kick &lt;nickname&gt;, map &lt;name&gt;, pause, newseed, hedgehogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="90"/>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="2"/>
-        <source>No checker rights</source>
+        <source>Nickname is already in use</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
-        <source>Authentication failed</source>
+        <source>This server only allows registered users to join.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="4"/>
-        <source>60 seconds cooldown after kick</source>
+        <source>No checker rights</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="5"/>
-        <source>Kicked</source>
+        <source>Authentication failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
-        <source>kicked</source>
+        <source>60 seconds cooldown after kick</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
-        <source>Reconnected too fast</source>
+        <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="8"/>
-        <source>Ping timeout</source>
+        <source>kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
-        <source>/info &lt;player&gt;: Show info about player</source>
+        <source>Reconnected too fast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
-        <source>/me &lt;message&gt;: Chat action, e.g. &apos;/me eats pizza&apos; becomes &apos;* Player eats pizza&apos;</source>
+        <source>Ping timeout</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
-        <source>/rnd: Flip a virtual coin and reply with &apos;heads&apos; or &apos;tails&apos;</source>
+        <source>heads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
-        <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
+        <source>tails</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
-        <source>/watch &lt;id&gt;: Watch a demo stored on the server with the given ID</source>
+        <source>This server does not support replays!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
-        <source>/help: Show chat command help</source>
+        <source>/info &lt;player&gt;: Show info about player</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
-        <source>/callvote [arguments]: Start a vote</source>
+        <source>/me &lt;message&gt;: Chat action, e.g. &apos;/me eats pizza&apos; becomes &apos;* Player eats pizza&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
-        <source>/vote &lt;yes/no&gt;: Vote &apos;yes&apos; or &apos;no&apos; for active vote</source>
+        <source>/rnd: Flip a virtual coin and reply with &apos;heads&apos; or &apos;tails&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="17"/>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
+        <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="18"/>
-        <source>/delegate &lt;player&gt;: Surrender room control to player</source>
+        <source>/watch &lt;id&gt;: Watch a demo stored on the server with the given ID</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
-        <source>/maxteams &lt;N&gt;: Limit maximum number of teams to N</source>
+        <source>/help: Show chat command help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
-        <source>/global &lt;message&gt;: Send global chat message which can be seen by everyone on the server</source>
+        <source>/callvote [arguments]: Start a vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="21"/>
-        <source>/registered_only: Toggle &apos;registered only&apos; state. If enabled, only registered players can join server</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
-        <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
+        <source>/vote &lt;yes/no&gt;: Vote &apos;yes&apos; or &apos;no&apos; for active vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
-        <source>/save &lt;parameter&gt;</source>
+        <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
-        <source>/stats: Query server stats</source>
+        <source>/maxteams &lt;N&gt;: Limit maximum number of teams to N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
-        <source>/force &lt;yes/no&gt;: Force vote result for active vote</source>
+        <source>/global &lt;message&gt;: Send global chat message which can be seen by everyone on the server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
-        <source>/fix: Force this room to stay open when it is empty</source>
+        <source>/registered_only: Toggle &apos;registered only&apos; state. If enabled, only registered players can join server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
-        <source>/unfix: Undo the /fix command</source>
+        <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
+        <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
+        <source>/force &lt;yes/no&gt;: Force vote result for active vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="30"/>
-        <source>/delete &lt;parameter&gt;</source>
+        <source>/fix: Force this room to stay open when it is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="31"/>
+        <source>/unfix: Undo the /fix command</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
         <source>List of room chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
-        <source>Commands for server admins only:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
-        <source>Unknown command:</source>
+        <source>Commands for server admins only:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
+        <source>room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
+        <source>lobby</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="48"/>
+        <source>(playing)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
+        <source>(spectating)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="50"/>
+        <source>Player is not online.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="51"/>
+        <source>The game can&apos;t be started with less than two clans!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="52"/>
+        <source>Empty config entry.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="53"/>
+        <source>Access denied.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="54"/>
+        <source>You&apos;re not the room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="55"/>
+        <source>Corrupted hedgehogs info!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="56"/>
+        <source>Too many teams!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="57"/>
+        <source>Too many hedgehogs!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="58"/>
+        <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="59"/>
+        <source>Joining not possible: Round is in progress.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="60"/>
+        <source>This room currently does not allow adding new teams.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="61"/>
+        <source>Error: The team you tried to remove does not exist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="62"/>
+        <source>You can&apos;t remove a team you don&apos;t own.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="63"/>
+        <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="64"/>
+        <source>A room with the same name already exists.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="65"/>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="66"/>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="67"/>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="68"/>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="69"/>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="70"/>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="72"/>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="73"/>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
+        <source>/callvote kick: You need to specify a nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="76"/>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
+        <source>/callvote kick: No such user!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="78"/>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="79"/>
+        <source>/callvote map: No such map!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
+        <source>/callvote pause: No game in progress!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
+        <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="82"/>
+        <source>/force: Please use &apos;yes&apos; or &apos;no&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="83"/>
+        <source>/vote: Please use &apos;yes&apos; or &apos;no&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="84"/>
+        <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="85"/>
+        <source>No such room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="86"/>
+        <source>Room version incompatible to your Hedgewars version!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="87"/>
+        <source>Access denied. This room currently doesn&apos;t allow joining.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="88"/>
+        <source>Access denied. This room is for registered users only.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="89"/>
+        <source>You are banned from this room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="90"/>
+        <source>Nickname already provided.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="91"/>
+        <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="92"/>
+        <source>Protocol already known.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="93"/>
+        <source>Bad number.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="94"/>
+        <source>There&apos;s no voting going on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="95"/>
+        <source>You already have voted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="96"/>
+        <source>Your vote has been counted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="97"/>
+        <source>Voting closed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="98"/>
+        <source>Pause toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="100"/>
+        <source>Voting expired.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
+        <source>hedgehogs per team: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="106"/>
+        <source>You&apos;re the new room master!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="39"/>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
+        <source>Warning! Chat flood protection activated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="35"/>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
-        <source>room</source>
+        <source>Excess flood</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
-        <source>lobby</source>
+        <source>Game messages flood detected - 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
-        <source>(playing)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
-        <source>(spectating)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
-        <source>Player is not online.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
-        <source>The game can&apos;t be started with less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
-        <source>Empty config entry.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
-        <source>Access denied.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="48"/>
-        <source>You&apos;re not the room master!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
-        <source>Corrupted hedgehogs info!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="50"/>
-        <source>Too many teams!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="51"/>
-        <source>Too many hedgehogs!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="52"/>
-        <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="53"/>
-        <source>Joining not possible: Round is in progress.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="54"/>
-        <source>This room currently does not allow adding new teams.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="55"/>
-        <source>Error: The team you tried to remove does not exist.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="56"/>
-        <source>You can&apos;t remove a team you don&apos;t own.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="57"/>
-        <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="58"/>
-        <source>A room with the same name already exists.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="61"/>
-        <source>/callvote kick: You need to specify a nickname.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="62"/>
-        <source>/callvote kick: No such user!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="63"/>
-        <source>/callvote map: No such map!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="64"/>
-        <source>/callvote pause: No game in progress!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="65"/>
-        <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="66"/>
-        <source>/force: Please use &apos;yes&apos; or &apos;no&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="67"/>
-        <source>/vote: Please use &apos;yes&apos; or &apos;no&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="68"/>
-        <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="69"/>
-        <source>No such room.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="70"/>
-        <source>Room version incompatible to your Hedgewars version!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="71"/>
-        <source>Access denied. This room currently doesn&apos;t allow joining.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="72"/>
-        <source>Access denied. This room is for registered users only.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="73"/>
-        <source>You are banned from this room.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
-        <source>Nickname already provided.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
-        <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="76"/>
-        <source>Protocol already known.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
-        <source>Bad number.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="78"/>
-        <source>There&apos;s no voting going on.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="79"/>
-        <source>You already have voted.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
-        <source>Your vote has been counted.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
-        <source>Voting closed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="82"/>
-        <source>Pause toggled.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="84"/>
-        <source>Voting expired.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="89"/>
-        <source>hedgehogs per team: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
-        <source>Warning! Chat flood protection activated</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="35"/>
-        <source>Excess flood</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
-        <source>Game messages flood detected - 1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
         <source>Warning! Joins flood protection activated</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_nl.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1322,6 +1322,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -3999,10 +4003,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4023,10 +4023,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4043,18 +4039,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4067,14 +4051,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4106,5 +4082,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pl.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1521,6 +1521,10 @@
             <numerusform>&lt;b&gt;%1&lt;/b&gt; zabili &lt;b&gt;%2&lt;/b&gt; swoich jeży.</numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4733,7 +4737,7 @@
     </message>
     <message>
         <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation>/greeting &lt;wiadomość&gt;: Ustaw wiadomość powitalną, która zostanie pokazana graczom dołączającym do pokoju</translation>
+        <translation type="vanished">/greeting &lt;wiadomość&gt;: Ustaw wiadomość powitalną, która zostanie pokazana graczom dołączającym do pokoju</translation>
     </message>
     <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
@@ -4757,7 +4761,7 @@
     </message>
     <message>
         <source>/save &lt;parameter&gt;</source>
-        <translation>/save &lt;parametr&gt;</translation>
+        <translation type="vanished">/save &lt;parametr&gt;</translation>
     </message>
     <message>
         <source>/stats: Query server stats</source>
@@ -4777,15 +4781,15 @@
     </message>
     <message>
         <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation>/saveroom &lt;nazwa pliku&gt;: Zapisz konfigurację pokoju do pliku</translation>
+        <translation type="vanished">/saveroom &lt;nazwa pliku&gt;: Zapisz konfigurację pokoju do pliku</translation>
     </message>
     <message>
         <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation>/loadroom &lt;nazwa pliku&gt;: Wczytaj  konfigurację pokoju z pliku</translation>
+        <translation type="vanished">/loadroom &lt;nazwa pliku&gt;: Wczytaj  konfigurację pokoju z pliku</translation>
     </message>
     <message>
         <source>/delete &lt;parameter&gt;</source>
-        <translation>/delete &lt;parametr&gt;</translation>
+        <translation type="vanished">/delete &lt;parametr&gt;</translation>
     </message>
     <message>
         <source>List of lobby chat commands:</source>
@@ -4801,11 +4805,11 @@
     </message>
     <message>
         <source>Unknown command:</source>
-        <translation>Nieznana komenda:</translation>
+        <translation type="vanished">Nieznana komenda:</translation>
     </message>
     <message>
         <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation>Powiedz /help do czatu, by dostać listę komend</translation>
+        <translation type="vanished">Powiedz /help do czatu, by dostać listę komend</translation>
     </message>
     <message>
         <source>room</source>
@@ -4839,5 +4843,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1424,6 +1424,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4419,10 +4423,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4443,10 +4443,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4463,18 +4459,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4487,14 +4471,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4526,5 +4502,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1432,6 +1432,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4509,10 +4513,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4533,10 +4533,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4553,18 +4549,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4577,14 +4561,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4616,5 +4592,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ro.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ro.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1364,6 +1364,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4145,10 +4149,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4169,10 +4169,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4189,18 +4185,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4213,14 +4197,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4252,5 +4228,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ru.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1481,6 +1481,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4460,10 +4464,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4484,10 +4484,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4504,18 +4500,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4528,14 +4512,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4567,5 +4543,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_sk.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1420,6 +1420,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4405,10 +4409,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4429,10 +4429,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4449,18 +4445,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4473,14 +4457,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4512,5 +4488,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_sv.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1371,6 +1371,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4225,10 +4229,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4249,10 +4249,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4269,18 +4265,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4293,14 +4277,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4332,5 +4308,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1418,6 +1418,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4510,10 +4514,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4534,10 +4534,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4554,18 +4550,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4578,14 +4562,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4617,5 +4593,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_uk.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1444,6 +1444,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4505,10 +4509,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4529,10 +4529,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4549,18 +4545,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4573,14 +4557,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4612,5 +4588,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -652,45 +652,45 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2128"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2136"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2129"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2137"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2264"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2272"/>
         <source>Unknown network error (possibly missing SSL library).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2268"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2276"/>
         <source>This feature requires an Internet connection, but you don&apos;t appear to be online (error code: %1).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2273"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/>
         <source>Internal error: Reply object is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1814"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1822"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/>
         <source>Cannot save record to file %1</source>
         <translation>无法录入文件 %1</translation>
     </message>
@@ -1022,29 +1022,29 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="559"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/>
         <source>Server authentication error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="871"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/>
         <source>%1 *** %2 has left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="878"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="898"/>
         <source>%1 *** %2 has left (message: &quot;%3&quot;)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="883"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="886"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="906"/>
         <source>%1 *** %2 has left (%3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="724"/>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="856"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/>
         <source>%1 *** %2 has joined the room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1053,12 +1053,12 @@
         <translation type="vanished">退出原因:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="781"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/>
         <source>Room destroyed</source>
         <translation>房间损坏</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="538"/>
+        <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/>
         <source>You got kicked</source>
         <translation>被踢出</translation>
     </message>
@@ -1551,7 +1551,7 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="76"/>
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="166"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="167"/>
         <source>Health graph</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1571,28 +1571,28 @@
         <translation type="unfinished">保存</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="266"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="267"/>
         <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">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="274"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="275"/>
         <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="281"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="282"/>
         <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="359"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="356"/>
         <source>(%1 kill)</source>
         <extracomment>Number of kills in stats screen, written after the team name</extracomment>
         <translation type="unfinished">
@@ -1600,7 +1600,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="362"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/>
         <source>(%1 %2)</source>
         <extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment>
         <translation type="unfinished">
@@ -1608,26 +1608,31 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="375"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="373"/>
         <source>&lt;b&gt;%1&lt;/b&gt; thought it&apos;s good to shoot their own hedgehogs for &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="383"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="381"/>
         <source>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of their own hedgehogs.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="391"/>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="389"/>
         <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>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="406"/>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -1769,7 +1774,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="146"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="147"/>
         <source>Start fighting (requires at least 2 teams)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2522,13 +2527,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="709"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="707"/>
         <source>%1 (%2%) - %3</source>
         <extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="712"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="710"/>
         <source>encoding</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2919,7 +2924,7 @@
         <translation>城堡模式</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="295"/>
         <source>Playing teams</source>
         <translation>玩家队伍</translation>
     </message>
@@ -3359,12 +3364,12 @@
         <translation type="vanished">服务器连接丢失</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2289"/>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2290"/>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
         <translation type="unfinished"></translation>
@@ -3397,24 +3402,24 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2168"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2176"/>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/>
         <source>Hedgewars - Success</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2169"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2177"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2174"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2182"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="253"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/>
         <source>Netgame - Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3424,7 +3429,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="254"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="258"/>
         <source>Please enter room name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3475,18 +3480,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="589"/>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="618"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="587"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="616"/>
         <source>Videos - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="590"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="588"/>
         <source>Do you really want to delete the video &apos;%1&apos;?</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="619"/>
+        <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="617"/>
         <source>Do you really want to remove %1 file(s)?</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3925,7 +3930,7 @@
 <context>
     <name>TeamSelWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="300"/>
         <source>At least two teams are required to play!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4708,447 +4713,527 @@
 <context>
     <name>server</name>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="83"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="99"/>
         <source>New voting started</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="85"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="101"/>
         <source>kick</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="86"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="102"/>
         <source>map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="87"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="103"/>
         <source>pause</source>
         <translation type="unfinished">暂停</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="88"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="104"/>
         <source>new seed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="59"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="71"/>
         <source>/maxteams: specify number from 2 to 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="60"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
         <source>Available callvote commands: kick &lt;nickname&gt;, map &lt;name&gt;, pause, newseed, hedgehogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="90"/>
-        <source>Nickname is already in use</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="2"/>
-        <source>No checker rights</source>
+        <source>Nickname is already in use</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
-        <source>Authentication failed</source>
+        <source>This server only allows registered users to join.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="4"/>
-        <source>60 seconds cooldown after kick</source>
+        <source>No checker rights</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="5"/>
-        <source>Kicked</source>
+        <source>Authentication failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
-        <source>kicked</source>
+        <source>60 seconds cooldown after kick</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
-        <source>Reconnected too fast</source>
+        <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="8"/>
-        <source>Ping timeout</source>
+        <source>kicked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
-        <source>/info &lt;player&gt;: Show info about player</source>
+        <source>Reconnected too fast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
-        <source>/me &lt;message&gt;: Chat action, e.g. &apos;/me eats pizza&apos; becomes &apos;* Player eats pizza&apos;</source>
+        <source>Ping timeout</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
-        <source>/rnd: Flip a virtual coin and reply with &apos;heads&apos; or &apos;tails&apos;</source>
+        <source>heads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
-        <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
+        <source>tails</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
-        <source>/watch &lt;id&gt;: Watch a demo stored on the server with the given ID</source>
+        <source>This server does not support replays!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
-        <source>/help: Show chat command help</source>
+        <source>/info &lt;player&gt;: Show info about player</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
-        <source>/callvote [arguments]: Start a vote</source>
+        <source>/me &lt;message&gt;: Chat action, e.g. &apos;/me eats pizza&apos; becomes &apos;* Player eats pizza&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
-        <source>/vote &lt;yes/no&gt;: Vote &apos;yes&apos; or &apos;no&apos; for active vote</source>
+        <source>/rnd: Flip a virtual coin and reply with &apos;heads&apos; or &apos;tails&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="17"/>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
+        <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="18"/>
-        <source>/delegate &lt;player&gt;: Surrender room control to player</source>
+        <source>/watch &lt;id&gt;: Watch a demo stored on the server with the given ID</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
-        <source>/maxteams &lt;N&gt;: Limit maximum number of teams to N</source>
+        <source>/help: Show chat command help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
-        <source>/global &lt;message&gt;: Send global chat message which can be seen by everyone on the server</source>
+        <source>/callvote [arguments]: Start a vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="21"/>
-        <source>/registered_only: Toggle &apos;registered only&apos; state. If enabled, only registered players can join server</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
-        <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
+        <source>/vote &lt;yes/no&gt;: Vote &apos;yes&apos; or &apos;no&apos; for active vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
-        <source>/save &lt;parameter&gt;</source>
+        <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
-        <source>/stats: Query server stats</source>
+        <source>/maxteams &lt;N&gt;: Limit maximum number of teams to N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
-        <source>/force &lt;yes/no&gt;: Force vote result for active vote</source>
+        <source>/global &lt;message&gt;: Send global chat message which can be seen by everyone on the server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
-        <source>/fix: Force this room to stay open when it is empty</source>
+        <source>/registered_only: Toggle &apos;registered only&apos; state. If enabled, only registered players can join server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
-        <source>/unfix: Undo the /fix command</source>
+        <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
+        <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
+        <source>/force &lt;yes/no&gt;: Force vote result for active vote</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="30"/>
-        <source>/delete &lt;parameter&gt;</source>
+        <source>/fix: Force this room to stay open when it is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="31"/>
+        <source>/unfix: Undo the /fix command</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
         <source>List of room chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
-        <source>Commands for server admins only:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
-        <source>Unknown command:</source>
+        <source>Commands for server admins only:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
+        <source>room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
+        <source>lobby</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="48"/>
+        <source>(playing)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
+        <source>(spectating)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="50"/>
+        <source>Player is not online.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="51"/>
+        <source>The game can&apos;t be started with less than two clans!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="52"/>
+        <source>Empty config entry.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="53"/>
+        <source>Access denied.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="54"/>
+        <source>You&apos;re not the room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="55"/>
+        <source>Corrupted hedgehogs info!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="56"/>
+        <source>Too many teams!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="57"/>
+        <source>Too many hedgehogs!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="58"/>
+        <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="59"/>
+        <source>Joining not possible: Round is in progress.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="60"/>
+        <source>This room currently does not allow adding new teams.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="61"/>
+        <source>Error: The team you tried to remove does not exist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="62"/>
+        <source>You can&apos;t remove a team you don&apos;t own.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="63"/>
+        <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="64"/>
+        <source>A room with the same name already exists.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="65"/>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="66"/>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="67"/>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="68"/>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="69"/>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="70"/>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="72"/>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="73"/>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
+        <source>/callvote kick: You need to specify a nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="76"/>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
+        <source>/callvote kick: No such user!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="78"/>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="79"/>
+        <source>/callvote map: No such map!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
+        <source>/callvote pause: No game in progress!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
+        <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="82"/>
+        <source>/force: Please use &apos;yes&apos; or &apos;no&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="83"/>
+        <source>/vote: Please use &apos;yes&apos; or &apos;no&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="84"/>
+        <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="85"/>
+        <source>No such room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="86"/>
+        <source>Room version incompatible to your Hedgewars version!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="87"/>
+        <source>Access denied. This room currently doesn&apos;t allow joining.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="88"/>
+        <source>Access denied. This room is for registered users only.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="89"/>
+        <source>You are banned from this room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="90"/>
+        <source>Nickname already provided.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="91"/>
+        <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="92"/>
+        <source>Protocol already known.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="93"/>
+        <source>Bad number.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="94"/>
+        <source>There&apos;s no voting going on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="95"/>
+        <source>You already have voted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="96"/>
+        <source>Your vote has been counted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="97"/>
+        <source>Voting closed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="98"/>
+        <source>Pause toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="100"/>
+        <source>Voting expired.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="105"/>
+        <source>hedgehogs per team: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="106"/>
+        <source>You&apos;re the new room master!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="39"/>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
+        <source>Warning! Chat flood protection activated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="32"/>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="35"/>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
-        <source>room</source>
+        <source>Excess flood</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
-        <source>lobby</source>
+        <source>Game messages flood detected - 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
-        <source>(playing)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
-        <source>(spectating)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
-        <source>Player is not online.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
-        <source>The game can&apos;t be started with less than two clans!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
-        <source>Empty config entry.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
-        <source>Access denied.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="48"/>
-        <source>You&apos;re not the room master!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
-        <source>Corrupted hedgehogs info!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="50"/>
-        <source>Too many teams!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="51"/>
-        <source>Too many hedgehogs!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="52"/>
-        <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="53"/>
-        <source>Joining not possible: Round is in progress.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="54"/>
-        <source>This room currently does not allow adding new teams.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="55"/>
-        <source>Error: The team you tried to remove does not exist.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="56"/>
-        <source>You can&apos;t remove a team you don&apos;t own.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="57"/>
-        <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="58"/>
-        <source>A room with the same name already exists.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="61"/>
-        <source>/callvote kick: You need to specify a nickname.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="62"/>
-        <source>/callvote kick: No such user!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="63"/>
-        <source>/callvote map: No such map!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="64"/>
-        <source>/callvote pause: No game in progress!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="65"/>
-        <source>/callvote hedgehogs: Specify number from 1 to 8.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="66"/>
-        <source>/force: Please use &apos;yes&apos; or &apos;no&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="67"/>
-        <source>/vote: Please use &apos;yes&apos; or &apos;no&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="68"/>
-        <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="69"/>
-        <source>No such room.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="70"/>
-        <source>Room version incompatible to your Hedgewars version!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="71"/>
-        <source>Access denied. This room currently doesn&apos;t allow joining.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="72"/>
-        <source>Access denied. This room is for registered users only.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="73"/>
-        <source>You are banned from this room.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="74"/>
-        <source>Nickname already provided.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="75"/>
-        <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="76"/>
-        <source>Protocol already known.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="77"/>
-        <source>Bad number.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="78"/>
-        <source>There&apos;s no voting going on.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="79"/>
-        <source>You already have voted.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="80"/>
-        <source>Your vote has been counted.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="81"/>
-        <source>Voting closed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="82"/>
-        <source>Pause toggled.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="84"/>
-        <source>Voting expired.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="89"/>
-        <source>hedgehogs per team: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
-        <source>Warning! Chat flood protection activated</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="35"/>
-        <source>Excess flood</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
-        <source>Game messages flood detected - 1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
         <source>Warning! Joins flood protection activated</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts	Thu Oct 04 21:17:21 2018 +0200
@@ -1415,6 +1415,10 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PageInGame</name>
@@ -4473,10 +4477,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/greeting &lt;message&gt;: Set greeting message to be shown to players who join the room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/delegate &lt;player&gt;: Surrender room control to player</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4497,10 +4497,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/save &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>/stats: Query server stats</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4517,18 +4513,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>/saveroom &lt;file name&gt;: Save room configuration into a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/loadroom &lt;file name&gt;: Load room configuration from a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>/delete &lt;parameter&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>List of lobby chat commands:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4541,14 +4525,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unknown command:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Say &apos;/help&apos; in chat for a list of commands</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>room</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4580,5 +4556,97 @@
         <source>Kicked</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>This server only allows registered users to join.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>heads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>tails</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This server does not support replays!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/save &lt;config ID&gt; &lt;config name&gt;: Add current room configuration as votable choice for /callvote map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/delete &lt;config ID&gt;: Delete a votable room configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/saveroom &lt;file name&gt;: Save all votable room configurations (and the greeting) of this room into a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/loadroom &lt;file name&gt;: Load votable room configurations (and greeting) from a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&apos;Registered only&apos; state toggled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Super power activated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unknown command or invalid parameters. Say &apos;/help&apos; in chat for a list of commands.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick yourself!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You can&apos;t kick the only other player!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The player is not in your room.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This player is protected from being kicked.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re not the room master or a server admin!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re already the room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message cleared.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Greeting message set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote kick: This is only allowed in rooms without a room master.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>/callvote map: No maps available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>You&apos;re the new room master!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- a/share/hedgewars/Data/Locale/it.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/it.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
     ["-1 to anyone for a suicide"] = "-1 a chiunque per essersi suicidato", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -1569,8 +1569,8 @@
     ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "Una tribù era pacifica, andava a caccia e si allenanava, godendo dei piccoli piaceri della vita...", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1652,8 +1652,8 @@
 --      ["Place weapon crates"] = "", -- HedgeEditor
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
+    ["Planes Used"] = "Aerei usati", -- User_Mission_-_RCPlane_Challenge
     ["Planes Used:"] = "Aerei usati:", -- User_Mission_-_RCPlane_Challenge
-    ["Planes Used"] = "Aerei usati", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
     ["The Torment"] = "La tormenta", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/ko.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/ko.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/lt.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/lt.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/pl.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/pl.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
     ["%.1f seconds were remaining."] = "%.1f sekund pozostało.", -- Basic_Training_-_Bazooka
     ["+1 Grenade"] = "+1 granat", -- Basic_Training_-_Flying_Saucer
     ["+1 mine!"] = "+1 mina!", -- Tumbler
+    ["+1 point"] = "+1 punkt", -- Mutant
     ["-1 point"] = "-1 punkt", -- Mutant
-    ["+1 point"] = "+1 punkt", -- Mutant
     ["-1 to anyone for a suicide"] = "-1 dla każdego za samobójstwo", -- Mutant
     ["+1 to the Bottom Feeder for killing anyone"] = "+1 dla Pasożyta za zabicie kogokolwiek", -- Mutant
     ["+1 to the Mutant for killing anyone"] = "+1 dla Mutanta za zabicie kogokolwiek", -- Mutant
@@ -1570,8 +1570,8 @@
     ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "Nasze plemię było pokojowe, spędzając swój czas na polowaniu i treningu, ciesząc się z małych przyjemności w życiu...", -- A_Classic_Fairytale:first_blood
     ["Oneye"] = "Jednooki", -- portal
     ["Only Hog Solo can be trusted with the crate."] = "Skrzynia może być powierzona tylko Hogowi Solo.", -- A_Space_Adventure:fruit02
+    ["Only one hog per team allowed! Excess hogs will be removed"] = "Dozwolony tylko jeden jeż na drużynę! Nadmiarowe jeże będą usunięte", -- Mutant
     ["Only one hog per team allowed! Excess hogs will be removed."] = "Dozwolony tylko jeden jeż na drużynę! Nadmiarowe jeże będą usunięte.", -- Mutant
-    ["Only one hog per team allowed! Excess hogs will be removed"] = "Dozwolony tylko jeden jeż na drużynę! Nadmiarowe jeże będą usunięte", -- Mutant
     ["Only the best pilots can master the following stunts."] = "Tylko najlepsi piloci mogą opanować następujące wyczyny.", -- Basic_Training_-_Flying_Saucer
     ["Only two clans allowed! Excess hedgehogs will be removed."] = "Tylko dwa klany dozwolone! Nadmiarowe jeże będą usunięte.", -- CTF_Blizzard
     ["On the Ice Planet, where ice rules ..."] = "Na Lodowej Planecie, gdzie rządzi lód...", -- A_Space_Adventure:ice01
@@ -1849,8 +1849,8 @@
     ["Score points by killing other hedgehogs (see below)."] = "Zdobądź punkty, zabijając inne jeże (zobacz niżej).", -- Mutant
     ["Score points by killing other hedgehogs."] = "Zdobądź punkty zabijając inne jeże.", -- Mutant
     ["Scores: "] = "Wyniki: ", -- Capture_the_Flag
+    ["Scores"] = "Wyniki", -- Mutant
     ["Scores:"] = "Wyniki:", -- Mutant
-    ["Scores"] = "Wyniki", -- Mutant
     ["Scoring: "] = "Wynki: ", -- Mutant
     ["Script parameter examples:"] = "Przykłady parametrów skryptu:", -- Gravity
 --      ["%s (%d)"] = "", -- Continental_supplies
@@ -2171,6 +2171,7 @@
     ["Team Identity Mode"] = "Tryb Tożsamości Drużyny", -- HedgeEditor
     ["TEAM IDENTITY MODE"] = "TRYB TOŻSAMOŚCI DRUŻYNY", -- HedgeEditor
     ["Team of Hearts"] = "Drużyna Serc", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
     ["Team Scores:"] = "Wyniki drużyn:", -- Control
     ["Team scores:"] = "Wyniki drużyn:", -- Space_Invasion
     ["Teamwork 2"] = "Praca zespołowa 2", -- User_Mission_-_Teamwork_2
@@ -2333,6 +2334,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
     ["The targets will guide you through the training."] = "Cele poprowadzą cię przez trening.", -- Basic_Training_-_Rope
     ["The team continued their quest of finding the rest of the tribe."] = "Drużyna kontynuowała swoje zadanie odnalezienia reszty plemienia.", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
     ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "Czas, który ci pozostanie po dotarciu do niebieskiego jeża, zosanie dodany do następnej tury.", -- A_Space_Adventure:moon02
     ["The Torment"] = "Udręka", -- A_Classic_Fairytale:first_blood
     ["The truth about Professor Hogevil"] = "Prawda o Profesorze Jeżozło", -- A_Space_Adventure:moon02
@@ -2403,6 +2406,7 @@
     ["Throw a grenade to destroy the target!"] = "Rzuć granatem, by zniszczyć cel!", -- Basic_Training_-_Grenade
     ["Throw some grenades to destroy the targets!"] = "Rzuć trochę granatów, by zniszczyć cele!", -- Basic_Training_-_Grenade
     ["Thug #%d"] = "Zbir #%d", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
     ["Timbers"] = "Drewna",
     ["Time: %.1fs"] = "Czas: %.1fs", -- Racer, TechRacer
     ["Time: %.3fs by %s"] = "Czas: %.3fs (%s)", -- TrophyRace
--- a/share/hedgewars/Data/Locale/pt_BR.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/pt_BR.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/pt_PT.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/pt_PT.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/ru.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/ru.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
       ["-1 to anyone for a suicide"] = "-1 за самоубийство", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
       ["Generator"] = "Генератор", -- Construction_Mode
@@ -1053,8 +1053,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1568,8 +1568,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1844,8 +1844,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2166,6 +2166,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
       ["Team of Hearts"] = "Команда сердец", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2327,6 +2328,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2397,6 +2400,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/sk.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/sk.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2170,6 +2170,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2332,6 +2333,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2402,6 +2405,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/stub.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/stub.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -8,8 +8,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -2030,6 +2030,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
 --      ["Teamwork"] = "", -- User_Mission_-_Teamwork
 --      ["Team Zook"] = "", -- Target_Practice_-_Bazooka_easy, Target_Practice_-_Bazooka_hard
@@ -2177,6 +2178,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2242,6 +2245,7 @@
 --      ["Throw a baseball at your foes|and send them flying!"] = "", -- Knockball
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/sv.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/sv.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -1,6 +1,6 @@
 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
 --      ["10 weapon schemes"] = "", -- Continental_supplies
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1653,8 +1653,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1847,8 +1847,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2169,6 +2169,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2331,6 +2332,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2401,6 +2404,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/tr.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/tr.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1570,8 +1570,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1654,8 +1654,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1849,8 +1849,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2172,6 +2172,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2334,6 +2335,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2404,6 +2407,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/uk.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/uk.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -10,8 +10,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -712,8 +712,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1053,8 +1053,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1568,8 +1568,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1652,8 +1652,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
         ["Play with me!"] = "Зіграй зі мною!", -- A_Classic_Fairytale:shadow
@@ -1846,8 +1846,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2168,6 +2168,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2330,6 +2331,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2400,6 +2403,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Locale/zh_CN.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Locale/zh_CN.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -11,8 +11,8 @@
 --      ["%.1fs"] = "", -- Racer, TechRacer
 --      ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer
 --      ["+1 mine!"] = "", -- Tumbler
+--      ["+1 point"] = "", -- Mutant
 --      ["-1 point"] = "", -- Mutant
---      ["+1 point"] = "", -- Mutant
 --      ["-1 to anyone for a suicide"] = "", -- Mutant
 --      ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant
 --      ["+1 to the Mutant for killing anyone"] = "", -- Mutant
@@ -713,8 +713,8 @@
 --      ["Gear information hidden"] = "", -- HedgeEditor
 --      ["Gear information shown"] = "", -- HedgeEditor
 --      ["Gear Placement Tool"] = "", -- HedgeEditor
+--      ["General information"] = "", -- Continental_supplies
 --      ["General information:"] = "", -- Continental_supplies
---      ["General information"] = "", -- Continental_supplies
 --      ["General Lemon"] = "", -- A_Space_Adventure:fruit01
 --      ["Generator"] = "", -- Construction_Mode
 --      ["Generator: Generates energy."] = "", -- Construction_Mode
@@ -1054,8 +1054,8 @@
 --      ["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 don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement
+--      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02
 --      ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02
 --      ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02
@@ -1569,8 +1569,8 @@
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oneye"] = "", -- portal
 --      ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02
+--      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant
---      ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant
 --      ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer
 --      ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard
 --      ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01
@@ -1655,8 +1655,8 @@
 --      ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag
 --      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos
 --      ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
@@ -1849,8 +1849,8 @@
 --      ["Score points by killing other hedgehogs."] = "", -- Mutant
 --      ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant
 --      ["Scores: "] = "", -- Capture_the_Flag
+--      ["Scores"] = "", -- Mutant
 --      ["Scores:"] = "", -- Mutant
---      ["Scores"] = "", -- Mutant
 --      ["Scoring: "] = "", -- Mutant
 --      ["Script parameter examples:"] = "", -- Gravity
 --      ["%s (+%d)"] = "", -- Battalion
@@ -2171,6 +2171,7 @@
 --      ["Team Identity Mode"] = "", -- HedgeEditor
 --      ["TEAM IDENTITY MODE"] = "", -- HedgeEditor
 --      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+--      ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion
 --      ["Team Scores:"] = "", -- Control
 --      ["Team scores:"] = "", -- Space_Invasion
 --      ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2
@@ -2333,6 +2334,8 @@
 --      ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope
 --      ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen
+--      ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion
+--      ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion
 --      ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02
@@ -2403,6 +2406,7 @@
 --      ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade
 --      ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade
 --      ["Thug #%d"] = "", -- A_Space_Adventure:death01
+--      ["Tie-breaking round %d"] = "", -- Space_Invasion
 --      ["Timbers"] = "", -- 
 --      ["Time: %.1fs"] = "", -- Racer, TechRacer
 --      ["Time: %.3fs by %s"] = "", -- TrophyRace
--- a/share/hedgewars/Data/Maps/CTF_Blizzard/map.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Maps/CTF_Blizzard/map.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -580,6 +580,10 @@
 	fSpawnX[1] = 3123
 	fSpawnY[1] = 1747
 
+	if ClansCount < 2 then
+		return
+	end
+
 	for i = 0, 1 do
 		fGear[i] = SpawnFakeAmmoCrate(fSpawnX[i],fSpawnY[i],false,false)
 		fCirc[i] = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true)
--- a/share/hedgewars/Data/Maps/TrophyRace/map.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Maps/TrophyRace/map.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -82,7 +82,9 @@
     for i=0, ClansCount-1 do
         clantimes[i] = 0
     end
-    SendAchievementsStatsOff()
+    if ClansCount >= 2 then
+        SendAchievementsStatsOff()
+    end
 end
 
 function onAmmoStoreInit()
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert02.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert02.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -5,6 +5,7 @@
 
 HedgewarsScriptLoad("/Scripts/Locale.lua")
 HedgewarsScriptLoad("/Scripts/Animate.lua")
+HedgewarsScriptLoad("/Scripts/Achievements.lua")
 HedgewarsScriptLoad("/Missions/Campaign/A_Space_Adventure/global_functions.lua")
 
 ----------------- VARIABLES --------------------
@@ -17,6 +18,10 @@
 local goals = {
 	[dialog01] = {missionName, loc("Getting ready"), loc("Use the rope to quickly get to the surface!") .. "|" .. loc("Mines time: 1 second"), 1, 4500},
 }
+-- For an achievement/award (see below)
+local cratesCollected = 0
+local totalCrates = 0
+local damageTaken = false
 -- health crates
 healthX = 565
 health1Y = 1400
@@ -121,12 +126,25 @@
 function onGearAdd(gear)
 	if GetGearType(gear) == gtRope then
 		HideMission()
+	elseif GetGearType(gear) == gtCase then
+		totalCrates = totalCrates + 1
 	end
 end
 
 function onGearDelete(gear)
 	if gear == hero.gear then
 		hero.dead = true
+		damageTaken = true
+	end
+	-- Crate collected
+	if GetGearType(gear) == gtCase and band(GetGearMessage(gear), gmDestroy) ~= 0 then
+		cratesCollected = cratesCollected + 1
+	end
+end
+
+function onGearDamage(gear)
+	if gear == hero.gear then
+		damageTaken = true
 	end
 end
 
@@ -177,6 +195,10 @@
 			SendStat(siCustomAchievement, loc("This is a new personal best, congratulations!"))
 		end
 	end
+	-- Achievement awarded for escaping with all crates collected and no damage taken
+	if (not damageTaken) and (cratesCollected >= totalCrates) then
+		awardAchievement(loc("Better Safe Than Sorry"))
+	end
 	sendSimpleTeamRankings({teamA.name})
 	SaveCampaignVar("Mission7Won", "true")
 	checkAllMissionsCompleted()
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/final.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/final.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -160,6 +160,8 @@
 end
 
 function heroBoomReaction(gear)
+	SetSoundMask(sndMissed, true)
+	SetSoundMask(sndYesSir, true)
 	if GetHealth(gear) and GetHealth(gear) > 0 then
 		HogSay(gear, loc("Kaboom! Hahahaha! Take this, stupid meteorite!"), SAY_SHOUT, 2)
 	end
--- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice02.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice02.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -13,15 +13,16 @@
 local missionName = loc("Hard flying")
 local challengeStarted = false
 local currentWaypoint = 1
-local radius = 75
-local totalTime = 15000
+local radius = 75 -- Ring radius. Will become smaller and smaller
+local totalTime = 15000 -- Total available time. Initial value is start time; is added to later when player wins extra time
 local totalSaucers = 3
 local gameEnded = false
+local heroTurn = false
 local RED = 0xff0000ff
-local GREEN = 0x38d61cff
+local GREEN = 0x00ff00ff
 local challengeObjectives = loc("To win the game you have to pass into the rings in time.")..
 	"|"..loc("You'll get extra time in case you need it when you pass a ring.").."|"..
-	loc("Every 2 rings, the ring color will be green and you'll get an extra flying saucer.").."|"..
+	loc("Green double rings also give you a new flying saucer.").."|"..
 	loc("Use the attack key twice to change the flying saucer while floating in mid-air.")
 local timeRecord
 -- dialogs
@@ -45,7 +46,6 @@
 teamB.name = loc("Allies")
 teamB.color = -6
 -- way points
-local current waypoint = 1
 local waypoints = {
 	[1] = {x=1450, y=140},
 	[2] = {x=990, y=580},
@@ -69,7 +69,7 @@
 function onGameInit()
 	GameFlags = gfInvulnerable + gfOneClanMode
 	Seed = 1
-	TurnTime = 15000
+	TurnTime = totalTime
 	Ready = 25000
 	CaseFreq = 0
 	MinesNum = 0
@@ -132,6 +132,7 @@
 	elseif not hero.dead and CurrentHedgehog == hero.gear and challengeStarted then
 		SetWeapon(amJetpack)
 	end
+	heroTurn = CurrentHedgehog == hero.gear
 end
 
 function onGameTick()
@@ -152,6 +153,7 @@
 			local totalTimePrinted  = totalTime / 1000
 			local saucersLeft = GetAmmoCount(hero.gear, amJetpack)
 			local saucersUsed = totalSaucers - saucersLeft
+			SetTeamLabel(teamA.name, string.format(loc("%.3f s"), totalTimePrinted))
 			SendStat(siGameResult, loc("Hooray! You are a champion!"))
 			SendStat(siCustomAchievement, string.format(loc("You completed the mission in %.3f seconds."), totalTimePrinted))
 			if timeRecord ~= nil and totalTime >= timeRecord then
@@ -175,9 +177,15 @@
 			SendStat(siPlayerKills, totalTime, GetHogTeamName(hero.gear))
 			SaveCampaignVar("Mission6Won", "true")
 			checkAllMissionsCompleted()
+			SetTurnTimeLeft(MAX_TURN_TIME)
 			EndGame()
 		end
 	end
+	if heroTurn and challengeStarted and not gameEnded and not hero.dead and ReadyTimeLeft == 0 then
+		local time = totalTime - TurnTimeLeft
+		local timePrinted  = time / 1000
+		SetTeamLabel(teamA.name, string.format(loc("%.1f s"), timePrinted))
+	end
 end
 
 function onGearDelete(gear)
@@ -246,15 +254,18 @@
 	if currentWaypoint > 1 then
 		local wp = waypoints[currentWaypoint-1]
 		DeleteVisualGear(wp.gear)
+		DeleteVisualGear(wp.gear2)
 	end
 	if currentWaypoint < 16 then
 		local wp = waypoints[currentWaypoint]
 		wp.gear = AddVisualGear(1,1,vgtCircle,1,true)
-		-- add bonus time and "fuel"
+		-- 1st, 3rd, 5th, 7th, 9th, ... ring
 		if currentWaypoint % 2 == 0 then
+			-- Render single red ring
+			SetVisualGearValues(wp.gear, wp.x,wp.y, 20, 200, 0, 0, 100, radius, 3, RED)
+			-- Give 1 flying saucer and, if needed, extra time
+			AddAmmo(hero.gear, amJetpack, GetAmmoCount(hero.gear, amJetpack)+1)
 			PlaySound(sndShotgunReload)
-			SetVisualGearValues(wp.gear, wp.x,wp.y, 20, 200, 0, 0, 100, radius, 3, RED)
-			AddAmmo(hero.gear, amJetpack, GetAmmoCount(hero.gear, amJetpack)+1)
 			totalSaucers = totalSaucers + 1
 			local vgear = AddVisualGear(GetX(hero.gear), GetY(hero.gear), vgtAmmo, 0, true)
 			if vgear ~= nil then
@@ -270,12 +281,17 @@
 				message = loc("Got 1 more saucer")
 			end
 			AnimCaption(hero.gear, message, 4000)
+		-- 2nd, 4th, 6th, 8th, 10th, ... ring
 		else
+			-- Render double green ring
 			SetVisualGearValues(wp.gear, wp.x,wp.y, 20, 200, 0, 0, 100, radius, 3, GREEN)
+			wp.gear2 = AddVisualGear(1,1,vgtCircle,1,true)
+			SetVisualGearValues(wp.gear2, wp.x,wp.y, 20, 200, 0, 0, 100, radius - 6, 2, GREEN)
+			-- Give extra time, if needed
 			if TurnTimeLeft <= 16000 then
-				SetTurnTimeLeft(TurnTimeLeft + 6000)
-				totalTime = totalTime + 6000
 				if currentWaypoint ~= 1 then
+					SetTurnTimeLeft(TurnTimeLeft + 6000)
+					totalTime = totalTime + 6000
 					PlaySound(sndExtraTime)
 					AnimCaption(hero.gear, loc("6 more seconds added to the clock"), 4000)
 				end
@@ -306,7 +322,7 @@
 	SendStat(siGameResult, loc("Oh man! Learn how to fly!"))
 	SendStat(siCustomAchievement, loc("To win the game you have to pass into the rings in time."))
 	SendStat(siCustomAchievement, loc("You'll get extra time in case you need it when you pass a ring."))
-	SendStat(siCustomAchievement, loc("Every 2 rings you'll get extra flying saucers."))
+	SendStat(siCustomAchievement, loc("Green double rings also give you a new flying saucer."))
 	SendStat(siCustomAchievement, loc("Use the attack key twice to change the flying saucer while being in air."))
 	sendSimpleTeamRankings({teamA.name})
 	EndGame()
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Movement.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Movement.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -162,7 +162,8 @@
 	PlaceSprite(1175, 1772, sprAmGirder, 0, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(1226, 1738, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(1275, 1705, sprAmGirder, 0, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
-	PlaceSprite(1325, 1683, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
+	PlaceSprite(1325, 1700, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
+	PlaceSprite(1342, 1638, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(1368, 1560, sprAmGirder, 3, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(1390, 1665, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(1481, 1716, sprAmGirder, 4, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
@@ -192,7 +193,7 @@
 	PlaceSprite(1545, 1811, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(1577, 1761, sprAmGirder, 0, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(1610, 1811, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
-	PlaceSprite(1440, 1531, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
+	PlaceSprite(1440, 1511, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(2082, 1337, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(2187, 1273, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
 	PlaceSprite(2097, 1246, sprAmGirder, 4, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal)
@@ -237,7 +238,7 @@
 	crates[4] = SpawnHealthCrate(889, 1829)			-- Back Jumping
 	crates[5] = SpawnHealthCrate(1486, 1694)		-- Walking on Ice
 	crates[6] = SpawnHealthCrate(2033, 1470)		-- Walking on Ice completed
-	crates[7] = SpawnHealthCrate(1297, 1683)		-- Back Jumping 2
+	crates[7] = SpawnHealthCrate(1198, 1750)		-- Back Jumping 2
 	crates[8] = SpawnSupplyCrate(1851, 1402, amSwitch, 100)	-- Switch Hedgehog
 	crates[9] = SpawnHealthCrate(564, 1772)			-- Health
 	crates[10] = SpawnHealthCrate(2290, 1622)		-- Turning Around
@@ -247,6 +248,7 @@
 	ShowMission(loc("Basic Movement Training"), loc("Training complete!"),loc("Congratulations! You have completed the obstacle course!"), 0, 0)
 	SendStat(siGameResult, loc("You have completed the Basic Movement Training!"))
 	SendStat(siCustomAchievement, loc("Congratulations!"))
+	SendStat(siCustomAchievement, loc("Return to the training menu by pressing the “Go back” button."))
 	SendStat(siPlayerKills, "0", loc("Training Team"))
 	PlaySound(sndVictory, CurrentHedgehog)
 	-- Disable controls, end game
@@ -310,10 +312,8 @@
 		loc("High Jump: [Backspace]").."|"..loc("Back Jump: [Backspace] ×2"), 2, 6600)
 	elseif gear == crates[7] then
 		ShowMission(loc("Basic Movement Training"), loc("Back Jumping (2/2)"),
-		loc("To get over the next obstacle, you need to perform your back jump precisely.").."|"..
-		loc("Hint: Hit “High Jump” again when you're close to the highest point of a high jump.").."|"..
-		loc("Hint: Don't stand too close at the wall before you jump!").."|"..
-		loc("Hint: Use the flower for orientation.").."|"..
+		loc("To get over the next obstacles, keep some distance from the wall before you back jump.").."|"..
+		loc("Hint: To jump higher, wait a bit before you hit “High Jump” a second time.").."|"..
 		loc("High Jump: [Backspace]").."|"..loc("Back Jump: [Backspace] ×2"), 2, 15000)
 	elseif gear == crates[5] then
 		ShowMission(loc("Basic Movement Training"), loc("Walking on Ice"),
--- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -153,9 +153,11 @@
 end
 
 function onGameStart()
-    SendHealthStatsOff()
+    if ClansCount >= 2 then
+        SendHealthStatsOff()
+        SendAchievementsStatsOff()
+    end
     SendRankingStatsOff()
-    SendAchievementsStatsOff()
     trackTeams()
     teamScan()
     runOnHogs(saveStuff)
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -697,10 +697,12 @@
 end
 
 function onGameStart()
-	SendGameResultOff()
-	SendRankingStatsOff()
-        SendHealthStatsOff()
-	SendAchievementsStatsOff()
+	if ClansCount >= 2 then
+		SendGameResultOff()
+		SendRankingStatsOff()
+        	SendHealthStatsOff()
+		SendAchievementsStatsOff()
+	end
 
         SetSoundMask(sndIncoming, true)
         SetSoundMask(sndMissed, true)
--- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -1091,10 +1091,12 @@
 end
 
 function onGameStart()
-	SendGameResultOff()
-	SendRankingStatsOff()
-	SendAchievementsStatsOff()
-	SendHealthStatsOff()
+	if ClansCount >= 2 then
+		SendGameResultOff()
+		SendRankingStatsOff()
+		SendAchievementsStatsOff()
+		SendHealthStatsOff()
+	end
 
 	ShowMission	(
 				loc("SPACE INVASION"),
--- a/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -899,10 +899,12 @@
 end
 
 function onGameStart()
-	SendGameResultOff()
-	SendRankingStatsOff()
-	SendAchievementsStatsOff()
-	SendHealthStatsOff()
+	if ClansCount >= 2 then
+		SendGameResultOff()
+		SendRankingStatsOff()
+		SendAchievementsStatsOff()
+		SendHealthStatsOff()
+	end
 
 	trackTeams()
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/OfficialChallengeHashes.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -0,0 +1,31 @@
+official_racer_maps = {
+    ["Border,60526986531,838018718"] = "Racer Challenge #1"
+    , ["Border,71022545335,-490229244"] = "Racer Challenge #2"
+    , ["Border,40469748943,806689586"] = "Racer Challenge #3"
+    , ["85940488650,-134869715"] = "Racer Challenge #4"
+    , ["62080348735,-661895109"] = "Racer Challenge #5"
+    , ["56818170733,479034891"] = "Racer Challenge #6"
+    , ["Border,25372705797,1770509913"] = "Racer Challenge #7"
+    , ["Border,10917540013,1902370941"] = "Racer Challenge #8"
+    , ["Border,43890274319,185940363"] = "Racer Challenge #9"
+    , ["Border,27870148394,751885839"] = "Racer Challenge #10"
+    , ["Border,22647869226,178845011"] = "Racer Challenge #11"
+    , ["Border,46954401793,706743197"] = "Racer Challenge #12"
+    , ["Border,60760377667,157242054"] = "Racer Challenge #13"
+    , ["Border,51825989393,-1585582638"] = "Racer Challenge #14"
+    , ["81841189250,256715557"] = "Racer Challenge #15"
+    , ["Border,44246064625,-528106034"] = "Racer Challenge #16"
+    , ["60906776802,-1389184823"] = "Racer Challenge #17"
+    , ["Border,70774747774,-534640804"] = "Racer Challenge #18"
+    , ["Border,50512019610,-1839546856"] = "Racer Challenge #19"
+    , ["60715683005,-281312897"] = "Racer Challenge #20"
+-- tech racer
+    , ["Border,19661006772,-975391975"] = "Tech Racer #1"
+    , ["Border,19661306766,-975391975"] = "Tech Racer #2"
+    , ["Border,19661606760,-975391975"] = "Tech Racer #3"
+    , ["Border,19661906754,-975391975"] = "Tech Racer #4"
+    , ["Border,19662206748,-975391975"] = "Tech Racer #5"
+    , ["Border,19662506742,-975391975"] = "Tech Racer #6"
+    , ["Border,19662806736,-975391975"] = "Tech Racer #7"
+    , ["Border,19663106730,-975391975"] = "Tech Racer #8"
+}
--- a/share/hedgewars/Data/Scripts/OfficialChallenges.lua	Wed Sep 05 20:09:32 2018 +0200
+++ b/share/hedgewars/Data/Scripts/OfficialChallenges.lua	Thu Oct 04 21:17:21 2018 +0200
@@ -1,34 +1,4 @@
-local maps = {
-    ["Border,60526986531,M838018718Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #1"
-    , ["Border,71022545335,M-490229244Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #2"
-    , ["Border,40469748943,M806689586Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #3"
-    , ["85940488650,M-134869715Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #4"
-    , ["62080348735,M-661895109Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #5"
-    , ["56818170733,M479034891Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #6"
-    , ["Border,25372705797,M1770509913Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #7"
-    , ["Border,10917540013,M1902370941Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #8"
-    , ["Border,43890274319,M185940363Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #9"
-    , ["Border,27870148394,M751885839Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #10"
-    , ["Border,22647869226,M178845011Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #11"
-    , ["Border,46954401793,M706743197Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #12"
-    , ["Border,60760377667,M157242054Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #13"
-    , ["Border,51825989393,M-1585582638Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #14"
-    , ["81841189250,M256715557Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #15"
-    , ["Border,44246064625,M-528106034Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #16"
-    , ["60906776802,M-1389184823Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #17"
-    , ["Border,70774747774,M-534640804Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #18"
-    , ["Border,50512019610,M-1839546856Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #19"
-    , ["60715683005,M-281312897Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #20"
--- tech racer
-    , ["Border,19661006772,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #1"
-    , ["Border,19661306766,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #2"
-    , ["Border,19661606760,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #3"
-    , ["Border,19661906754,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #4"
-    , ["Border,19662206748,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #5"
-    , ["Border,19662506742,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #6"
-    , ["Border,19662806736,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #7"
-    , ["Border,19663106730,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #8"
-    }
+HedgewarsScriptLoad("/Scripts/OfficialChallengeHashes.lua")
 
 -- modified Adler hash
 local hashA = 0
@@ -58,6 +28,6 @@
         end
 
         --WriteLnToConsole(mapString)
-        return(maps[mapString])
+        return(official_racer_maps[mapString])
     end
 end
--- a/tools/pas2c/Pas2C.hs	Wed Sep 05 20:09:32 2018 +0200
+++ b/tools/pas2c/Pas2C.hs	Thu Oct 04 21:17:21 2018 +0200
@@ -1,6 +1,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 module Pas2C where
 
+import Prelude hiding ((<>))
 import Text.PrettyPrint.HughesPJ
 import Data.Maybe
 import Data.Char