merge
authorsheepluva
Sun, 07 Apr 2013 22:53:40 +0200
changeset 8887 539380a498e4
parent 8792 af4ab297b2b7 (current diff)
parent 8884 08fe08651130 (diff)
child 8889 74abe69d8569
merge
QTfrontend/hwform.cpp
QTfrontend/ui/widget/chatwidget.cpp
hedgewars/pas2c.h
hedgewars/pas2cSystem.pas
tools/PascalBasics.hs
tools/PascalParser.hs
tools/PascalPreprocessor.hs
tools/PascalUnitSyntaxTree.hs
tools/pas2c.hs
tools/unitCycles.hs
--- a/QTfrontend/HWApplication.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/HWApplication.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -18,6 +18,7 @@
 
 #include "HWApplication.h"
 #include <QFileOpenEvent>
+#include <QEvent>
 
 #include "hwform.h"
 #include "MessageDialog.h"
@@ -34,7 +35,7 @@
 }
 #endif
 
-HWApplication::HWApplication(int &argc,  char **argv):
+HWApplication::HWApplication(int &argc, char **argv) :
     QApplication(argc, argv)
 {
 #if !defined(Q_WS_WIN)
@@ -84,7 +85,7 @@
         } else if (scheme == "hwplay") {
             int port = openEvent->url().port(NETGAME_DEFAULT_PORT);
             if (address == "")
-                address = "netserver.hedgewars.org";
+                address = NETGAME_DEFAULT_SERVER;
             form->NetConnectQuick(address, (quint16) port);
             return true;
         } else {
--- a/QTfrontend/HWApplication.h	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/HWApplication.h	Sun Apr 07 22:53:40 2013 +0200
@@ -20,10 +20,9 @@
 #define HWAPP_H
 
 #include <QApplication>
-#include <QString>
-#include <QEvent>
 
 class HWForm;
+class QEvent;
 
 /**
  * @brief Main class of the Qt application.
--- a/QTfrontend/gameuiconfig.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/gameuiconfig.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -217,12 +217,12 @@
 void GameUIConfig::resizeToConfigValues()
 {
     // fill 2/3 of the screen desktop
-    const QRect deskSize = QApplication::desktop()->screenGeometry(-1);
+    const QRect deskSize = HWApplication::desktop()->screenGeometry(-1);
     Form->resize(value("frontend/width", qMin(qMax(deskSize.width()*2/3,800),deskSize.width())).toUInt(),
                  value("frontend/height", qMin(qMax(deskSize.height()*2/3,600),deskSize.height())).toUInt());
 
     // move the window to the center of the screen
-    QPoint center = QApplication::desktop()->availableGeometry(-1).center();
+    QPoint center = HWApplication::desktop()->availableGeometry(-1).center();
     center.setX(center.x() - (Form->width()/2));
     center.setY(center.y() - (Form->height()/2));
     Form->move(center);
--- a/QTfrontend/hwconsts.h	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/hwconsts.h	Sun Apr 07 22:53:40 2013 +0200
@@ -67,6 +67,7 @@
 #define SEASON_HWBDAY 4
 #define SEASON_EASTER 8
 
+#define NETGAME_DEFAULT_SERVER "netserver.hedgewars.org"
 #define NETGAME_DEFAULT_PORT 46631
 #define HEDGEHOGS_PER_TEAM 8
 
--- a/QTfrontend/hwform.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/hwform.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -361,7 +361,7 @@
 {
     if(hwnet && (hwnet->clientState() != HWNewNet::Disconnected))
     {
-        xfire_setvalue(XFIRE_SERVER, !hwnet->getHost().compare(QString("netserver.hedgewars.org:%1").arg(NETGAME_DEFAULT_PORT)) ? "Official server" : hwnet->getHost().toAscii());
+        xfire_setvalue(XFIRE_SERVER, !hwnet->getHost().compare(QString("%1:%2").arg(NETGAME_DEFAULT_SERVER).arg(NETGAME_DEFAULT_PORT)) ? "Official server" : hwnet->getHost().toAscii());
         switch(hwnet->clientState())
         {
             case HWNewNet::Connecting: // Connecting
@@ -1014,7 +1014,7 @@
 
 void HWForm::NetConnectOfficialServer()
 {
-    NetConnectServer("netserver.hedgewars.org", NETGAME_DEFAULT_PORT);
+    NetConnectServer(NETGAME_DEFAULT_SERVER, NETGAME_DEFAULT_PORT);
 }
 
 void HWForm::NetPassword(const QString & nick)
@@ -1351,7 +1351,7 @@
     //nick and pass stuff
     QString nickname = config->value("net/nick", "").toString();
 
-    hwnet->m_private_game = !(hostName == "netserver.hedgewars.org" && port == NETGAME_DEFAULT_PORT);
+    hwnet->m_private_game = !(hostName == NETGAME_DEFAULT_SERVER && port == NETGAME_DEFAULT_PORT);
     if (hwnet->m_private_game == false)
         if (AskForNickAndPwd() != 0)
             return;
@@ -2016,8 +2016,22 @@
 
 void HWForm::showFeedbackDialog()
 {
-    FeedbackDialog dialog(this);
-    dialog.exec();
+    QNetworkRequest newRequest(QUrl("http://www.hedgewars.org"));
+
+    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+    QNetworkReply *reply = manager->get(newRequest);
+    connect(reply, SIGNAL(finished()), this, SLOT(showFeedbackDialogNetChecked()));
+}
+
+void HWForm::showFeedbackDialogNetChecked()
+{
+    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
+
+    if (reply && (reply->error() == QNetworkReply::NoError)) {
+        FeedbackDialog dialog(this);
+        dialog.exec();
+    } else
+        MessageDialog::ShowErrorMessage(tr("This page requires an internet connection."), this);
 }
 
 void HWForm::startGame()
--- a/QTfrontend/hwform.h	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/hwform.h	Sun Apr 07 22:53:40 2013 +0200
@@ -129,6 +129,7 @@
         void UpdateCampaignPageProgress(int index);
         void InitCampaignPage();
         void showFeedbackDialog();
+        void showFeedbackDialogNetChecked();
 
         void NetGameChangeStatus(bool isMaster);
         void NetGameMaster();
--- a/QTfrontend/main.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/main.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -20,7 +20,6 @@
 
 #include <QTranslator>
 #include <QLocale>
-#include <QMessageBox>
 #include <QPlastiqueStyle>
 #include <QRegExp>
 #include <QMap>
@@ -36,6 +35,7 @@
 
 #include "DataManager.h"
 #include "FileEngine.h"
+#include "MessageDialog.h"
 
 #ifdef _WIN32
 #include <Shlobj.h>
@@ -99,12 +99,7 @@
     if (!tmpdir.exists())
         if (!tmpdir.mkpath(dir))
         {
-            QMessageBox directoryMsg(QApplication::activeWindow());
-            directoryMsg.setIcon(QMessageBox::Warning);
-            directoryMsg.setWindowTitle(QMessageBox::tr("Main - Error"));
-            directoryMsg.setText(QMessageBox::tr("Cannot create directory %1").arg(dir));
-            directoryMsg.setWindowModality(Qt::WindowModal);
-            directoryMsg.exec();
+            MessageDialog::ShowErrorMessage(HWApplication::tr("Cannot create directory %1").arg(dir));
             return false;
         }
     return true;
@@ -144,7 +139,7 @@
     QPixmap pixmap(":res/splash.png");
     splash = new QLabel(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
     splash->setAttribute(Qt::WA_TranslucentBackground);
-    const QRect deskSize = QApplication::desktop()->screenGeometry(-1);
+    const QRect deskSize = HWApplication::desktop()->screenGeometry(-1);
     QPoint splashCenter = QPoint( (deskSize.width() - pixmap.width())/2,
                                   (deskSize.height() - pixmap.height())/2 );
     splash->move(splashCenter);
@@ -253,16 +248,9 @@
 
     datadir->cd(bindir->absolutePath());
     datadir->cd(*cDataDir);
-    if(!datadir->cd("Data"))
+    if (!datadir->cd("Data"))
     {
-        QMessageBox missingMsg(QApplication::activeWindow());
-        missingMsg.setIcon(QMessageBox::Critical);
-        missingMsg.setWindowTitle(QMessageBox::tr("Main - Error"));
-        missingMsg.setText(QMessageBox::tr("Failed to open data directory:\n%1\n\n"
-                                           "Please check your installation!").
-                                            arg(datadir->absolutePath()+"/Data"));
-        missingMsg.setWindowModality(Qt::WindowModal);
-        missingMsg.exec();
+        MessageDialog::ShowFatalMessage(HWApplication::tr("Failed to open data directory:\n%1\n\nPlease check your installation!").arg(datadir->absolutePath()+"/Data"));
         return 1;
     }
 
@@ -279,12 +267,13 @@
     {
         QSettings settings("physfs://hedgewars.ini", QSettings::IniFormat);
         QString cc = settings.value("misc/locale", QString()).toString();
-        if(cc.isEmpty())
-            cc = QLocale::system().name();
+        if (cc.isEmpty())
+            cc = HWApplication::keyboardInputLocale().name();
+            // QLocale::system().name() returns only "C"...
 
         // load locale file into translator
-        if(!Translator.load(QString("physfs://Locale/hedgewars_%1").arg(cc)))
-            qWarning("Failed to install translation");
+        if (!Translator.load(QString("physfs://Locale/hedgewars_%1").arg(cc)))
+            qWarning("Failed to install translation (%s)", qPrintable(cc));
         app.installTranslator(&Translator);
     }
 
--- a/QTfrontend/net/tcpBase.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/net/tcpBase.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -19,13 +19,12 @@
 
 #include "tcpBase.h"
 
-#include <QMessageBox>
 #include <QList>
-#include <QApplication>
 #include <QImage>
 #include <QThread>
 
 #include "hwconsts.h"
+#include "MessageDialog.h"
 
 #ifdef HWLIBRARY
 extern "C" void Game(char**arguments);
@@ -89,13 +88,7 @@
         IPCServer->setMaxPendingConnections(1);
         if (!IPCServer->listen(QHostAddress::LocalHost))
         {
-            QMessageBox deniedMsg(QApplication::activeWindow());
-            deniedMsg.setIcon(QMessageBox::Critical);
-            deniedMsg.setWindowTitle(QMessageBox::tr("TCP - Error"));
-            deniedMsg.setText(QMessageBox::tr("Unable to start the server: %1.").arg(IPCServer->errorString()));
-            deniedMsg.setWindowModality(Qt::WindowModal);
-            deniedMsg.exec();
-
+            MessageDialog::ShowFatalMessage(tr("Unable to start server at %1.").arg(IPCServer->errorString()));
             exit(0); // FIXME - should be graceful exit here (lower Critical -> Warning above when implemented)
         }
     }
@@ -172,14 +165,7 @@
 
 void TCPBase::StartProcessError(QProcess::ProcessError error)
 {
-    QMessageBox deniedMsg(QApplication::activeWindow());
-    deniedMsg.setIcon(QMessageBox::Critical);
-    deniedMsg.setWindowTitle(QMessageBox::tr("TCP - Error"));
-    deniedMsg.setText(QMessageBox::tr("Unable to run engine at ") + bindir->absolutePath() + "/hwengine\n" +
-                      QMessageBox::tr("Error code: %1").arg(error));
-    deniedMsg.setWindowModality(Qt::WindowModal);
-    deniedMsg.exec();
-
+    MessageDialog::ShowFatalMessage(tr("Unable to run engine at %1\nError code: %2").arg(bindir->absolutePath() + "/hwengine").arg(error));
     ClientDisconnect();
 }
 
--- a/QTfrontend/ui/dialog/input_password.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/ui/dialog/input_password.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -29,18 +29,14 @@
 {
     setWindowTitle(tr("Login"));
 
-    QString titleLabelText = "To connect to the server, please log in.\n\nIf you don't have an account on www.hedgewars.org,\njust enter your nickname.";
-    QString nickLabelText = "Nickname:";
-    QString passLabelText = "Password:";
-
     QGridLayout * layout = new QGridLayout(this);
 
     QLabel * titleLabel = new QLabel(this);
-    titleLabel->setText(titleLabelText);
+    titleLabel->setText(tr("To connect to the server, please log in.\n\nIf you don't have an account on www.hedgewars.org,\njust enter your nickname."));
     layout->addWidget(titleLabel, 0, 0);
 
     QLabel * nickLabel = new QLabel(this);
-    nickLabel->setText(nickLabelText);
+    nickLabel->setText(tr("Nickname:"));
     layout->addWidget(nickLabel, 1, 0);
 
     leNickname = new QLineEdit(this);
@@ -48,7 +44,7 @@
     layout->addWidget(leNickname, 2, 0);
 
     QLabel * passLabel = new QLabel(this);
-    passLabel->setText(passLabelText);
+    passLabel->setText(tr("Password:"));
     layout->addWidget(passLabel, 3, 0);
 
     lePassword = new QLineEdit(this);
--- a/QTfrontend/ui/mouseoverfilter.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/ui/mouseoverfilter.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -35,7 +35,6 @@
     }
     else if (event->type() == QEvent::FocusIn)
     {
-        QWidget * widget = dynamic_cast<QWidget*>(dist);
         abstractpage = qobject_cast<AbstractPage*>(ui->Pages->currentWidget());
 
         // play a sound when mouse hovers certain ui elements
--- a/QTfrontend/ui/page/pagedata.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/ui/page/pagedata.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -60,7 +60,10 @@
 
     web->setOpenLinks(false);
 //    fetchList();
-
+    web->setHtml(QString(
+        "<center><h2>Hedgewars Downloadable Content</h2><br><br>"
+        "<i>%1</i></center>")
+        .arg(tr("Loading, please wait.")));
     m_contentDownloaded = false;
 }
 
@@ -106,8 +109,7 @@
 {
     QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
 
-    if(reply)
-    {
+    if (reply && (reply->error() == QNetworkReply::NoError)) {
         QString html = QString::fromUtf8(reply->readAll());
         int begin = html.indexOf("<!-- BEGIN -->");
         int end = html.indexOf("<!-- END -->");
@@ -117,7 +119,11 @@
             html.remove(0, begin);
         }
         web->setHtml(html);
-    }
+    } else
+        web->setHtml(QString(
+            "<center><h2>Hedgewars Downloadable Content</h2><br><br>"
+            "<p><i><h4>%1</i></h4></p></center>")
+            .arg(tr("This page requires an internet connection.")));
 }
 
 void PageDataDownload::fileDownloaded()
--- a/QTfrontend/ui/page/pageoptions.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/ui/page/pageoptions.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -592,6 +592,11 @@
                 CBLanguage->addItem(QLocale::languageToString(loc.language()) + " (" + QLocale::countryToString(loc.country()) + ")", loc.name());
             }
 
+            QLabel *restartNoticeLabel = new QLabel(groupMisc);
+            restartNoticeLabel->setText(QLabel::tr("This setting will be effective at next restart."));
+            groupMisc->layout()->addWidget(restartNoticeLabel, 1, 1);
+
+
             // Divider
 
             groupMisc->addDivider(); // row 1
@@ -600,14 +605,14 @@
 
             CBNameWithDate = new QCheckBox(groupMisc);
             CBNameWithDate->setText(QCheckBox::tr("Append date and time to record file name"));
-            groupMisc->layout()->addWidget(CBNameWithDate, 2, 0, 1, 2);
+            groupMisc->layout()->addWidget(CBNameWithDate, 3, 0, 1, 2);
 
             // Associate file extensions
 
             BtnAssociateFiles = new QPushButton(groupMisc);
             BtnAssociateFiles->setText(QPushButton::tr("Associate file extensions"));
             BtnAssociateFiles->setVisible(!custom_data && !custom_config);
-            groupMisc->layout()->addWidget(BtnAssociateFiles, 3, 0, 1, 2);
+            groupMisc->layout()->addWidget(BtnAssociateFiles, 4, 0, 1, 2);
         }
 
 #ifdef __APPLE__
--- a/QTfrontend/ui/widget/chatwidget.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/ui/widget/chatwidget.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -37,7 +37,7 @@
 #include "hwconsts.h"
 #include "gameuiconfig.h"
 #include "playerslistmodel.h"
-
+#include "HWApplication.h"
 #include "chatwidget.h"
 
 
@@ -449,6 +449,7 @@
     {
         line = QString("<span class=\"highlight\">%1</span>").arg(line);
         SDLInteraction::instance().playSoundFile(m_hilightSound);
+        HWApplication::alert(this, 800);
     }
 
     chatStrings.append(line);
--- a/QTfrontend/ui/widget/feedbackdialog.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/ui/widget/feedbackdialog.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -74,16 +74,22 @@
     QHBoxLayout * systemLayout = new QHBoxLayout();
 
     info = new QLabel();
-    info->setText(
+    info->setText(QString(
         "<style type=\"text/css\">"
         "a { color: #fc0; }"
         "b { color: #0df; }"
         "</style>"
-        "<div align=\"center\"><h1>Please give us feedback!</h1>"
-        "<h3>We are always happy about suggestions, ideas, or bug reports.<h3>"
-        "<h4>Your email address is optional, but we may want to contact you.<h4>"
-        "</div>"
+        "<div align=\"center\"><h1>%1</h1>"
+        "<h3>%2<h3>"
+        "<h4>%3 <a href=\"http://code.google.com/p/hedgewars/wiki/KnownBugs\">known bugs</a><h4>"
+        "<h4>%4<h4>"
+        "</div>")
+        .arg(tr("Send us feedback!"))
+        .arg(tr("We are always happy about suggestions, ideas, or bug reports."))
+        .arg(tr("If you found a bug, you can see if it's already been reported here: "))
+        .arg(tr("Your email address is optional, but necessary if you want us to get back at you."))
     );
+    info->setOpenExternalLinks(true);
     pageLayout->addWidget(info);
 
     QVBoxLayout * summaryEmailLayout = new QVBoxLayout();
@@ -238,12 +244,14 @@
     MEMORYSTATUSEX status;
     status.dwLength = sizeof(status);
     GlobalMemoryStatusEx(&status);
-    total_ram += QString::number(status.ullTotalPhys) + "\n";
+    total_ram += QString::number(status.ullTotalPhys/1024/1024) + " MB\n";
 
-    switch(QSysInfo::WinVersion())
+    switch(QSysInfo::windowsVersion())
     {
+        case QSysInfo::WV_NT: os_version += "Windows NT\n"; break;
         case QSysInfo::WV_2000: os_version += "Windows 2000\n"; break;
         case QSysInfo::WV_XP: os_version += "Windows XP\n"; break;
+        case QSysInfo::WV_2003: os_version += "Windows Server 2003\n"; break;
         case QSysInfo::WV_VISTA: os_version += "Windows Vista\n"; break;
         case QSysInfo::WV_WINDOWS7: os_version += "Windows 7\n"; break;
         //case QSysInfo::WV_WINDOWS8: os_version += "Windows 8\n"; break; //QT 5+
@@ -260,8 +268,8 @@
 #else
          available_pages = 0,
 #endif*/
-         page_size = sysconf(_SC_PAGE_SIZE);
-    total_ram += QString::number(pages * page_size) + "\n";
+    page_size = sysconf(_SC_PAGE_SIZE);
+    total_ram += QString::number(pages*page_size/1024/1024) + " MB\n";
     os_version += "GNU/Linux or BSD\n";
 #endif
 
--- a/QTfrontend/util/MessageDialog.cpp	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/util/MessageDialog.cpp	Sun Apr 07 22:53:40 2013 +0200
@@ -17,23 +17,39 @@
  */
 
 #include "MessageDialog.h"
+#include "HWApplication.h"
+
+int MessageDialog::ShowFatalMessage(const QString & msg, QWidget * parent)
+{
+    return ShowMessage(QMessageBox::tr("Hedgewars - Error"),
+                       msg,
+                       QMessageBox::Critical,
+                       parent);
+}
 
 int MessageDialog::ShowErrorMessage(const QString & msg, QWidget * parent)
 {
-    return ShowMessage(msg, QMessageBox::tr("Hedgewars - Warning"), QMessageBox::Warning, parent);
+    return ShowMessage(QMessageBox::tr("Hedgewars - Warning"),
+                       msg,
+                       QMessageBox::Warning,
+                       parent);
 }
 
 int MessageDialog::ShowInfoMessage(const QString & msg, QWidget * parent)
 {
-    return ShowMessage(msg, QMessageBox::tr("Hedgewars - Information"), QMessageBox::Information, parent);
+    return ShowMessage(QMessageBox::tr("Hedgewars - Information"),
+                       msg,
+                       QMessageBox::Information,
+                       parent);
 }
 
-int MessageDialog::ShowMessage(const QString & msg, const QString & title, QMessageBox::Icon icon, QWidget * parent)
+int MessageDialog::ShowMessage(const QString & title, const QString & msg, QMessageBox::Icon icon, QWidget * parent)
 {
-    QMessageBox msgMsg(parent);
+    QMessageBox msgMsg(parent ? parent : HWApplication::activeWindow());
+    msgMsg.setWindowTitle(title != NULL ? title : "Hedgewars");
+    msgMsg.setText(msg);
     msgMsg.setIcon(icon);
-    msgMsg.setWindowTitle(title.isEmpty() ? QMessageBox::tr("Hedgewars") : title);
-    msgMsg.setText(msg);
     msgMsg.setWindowModality(Qt::WindowModal);
+
     return msgMsg.exec();
 }
--- a/QTfrontend/util/MessageDialog.h	Tue Mar 26 18:52:42 2013 +0100
+++ b/QTfrontend/util/MessageDialog.h	Sun Apr 07 22:53:40 2013 +0200
@@ -19,7 +19,6 @@
 #ifndef MESSAGEDIALOG_H
 #define MESSAGEDIALOG_H
 
-#include <QString>
 #include <QMessageBox>
 
 class QWidget;
@@ -27,9 +26,18 @@
 class MessageDialog
 {
     public:
+        static int ShowFatalMessage(const QString & msg, QWidget * parent = 0);
         static int ShowErrorMessage(const QString & msg, QWidget * parent = 0);
         static int ShowInfoMessage(const QString & msg, QWidget * parent = 0);
-        static int ShowMessage(const QString & msg, const QString & title = QString(), QMessageBox::Icon icon = QMessageBox::NoIcon, QWidget * parent = 0);
+        /**
+         * @brief Displays a message.
+         * @param title message title or <code>NULL</code> if no/default title
+         * @param msg message to display
+         * @param icon (optional) icon to be displayed next to the message
+         * @param parent parent Widget
+         * @return a QMessageBox::StandardButton value indicating which button was clicked
+         */
+        static int ShowMessage(const QString & title, const QString & msg, QMessageBox::Icon icon = QMessageBox::NoIcon, QWidget * parent = 0);
 };
 
 #endif
--- a/hedgewars/ArgParsers.inc	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/ArgParsers.inc	Sun Apr 07 22:53:40 2013 +0200
@@ -191,8 +191,8 @@
         {--locale}               2 : cLocaleFName      := getStringParameter (arg, paramIndex, parseParameter);
         {--fullscreen-width}     3 : cFullscreenWidth  := getLongIntParameter(arg, paramIndex, parseParameter);
         {--fullscreen-height}    4 : cFullscreenHeight := getLongIntParameter(arg, paramIndex, parseParameter);
-        {--width}                5 : cWindowedWidth    := getLongIntParameter(arg, paramIndex, parseParameter);
-        {--height}               6 : cWindowedHeight   := getLongIntParameter(arg, paramIndex, parseParameter);
+        {--width}                5 : cWindowedWidth    := max(2 * (getLongIntParameter(arg, paramIndex, parseParameter) div 2), cMinScreenWidth);
+        {--height}               6 : cWindowedHeight   := max(2 * (getLongIntParameter(arg, paramIndex, parseParameter) div 2), cMinScreenHeight);
         {--frame-interval}       7 : cTimerInterval    := getLongIntParameter(arg, paramIndex, parseParameter);
         {--volume}               8 : SetVolume          ( getLongIntParameter(arg, paramIndex, parseParameter) );
         {--nomusic}              9 : SetMusic           ( false );
--- a/hedgewars/CMakeLists.txt	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/CMakeLists.txt	Sun Apr 07 22:53:40 2013 +0200
@@ -167,8 +167,9 @@
 
 find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP")
 if(PNG_FOUND)
-    list(REMOVE_AT PNG_INCLUDE_DIR 1) #removing the zlib include path
-    list(APPEND pascal_flags "-dPNG_SCREENSHOTS -Fl${PNG_INCLUDE_DIR}")
+    list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path
+    get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH)
+    list(APPEND pascal_flags "-dPNG_SCREENSHOTS" "-Fl${PNG_LIBRARY_DIR}")
 endif()
 
 
--- a/hedgewars/GSHandlers.inc	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/GSHandlers.inc	Sun Apr 07 22:53:40 2013 +0200
@@ -53,7 +53,7 @@
         sX:= dX / steps;
         sY:= dY / steps;
         end
-        
+
     else
         begin
         sX:= dX;
@@ -75,7 +75,7 @@
 end;
 
 procedure makeHogsWorry(x, y: hwFloat; r: LongInt);
-var 
+var
     gi: PGear;
     d: LongInt;
 begin
@@ -89,7 +89,7 @@
                 begin
                 if (CurrentHedgehog^.Gear = gi) then
                     PlaySoundV(sndOops, gi^.Hedgehog^.Team^.voicepack)
-                    
+
                 else
                     begin
                     if ((gi^.State and gstMoving) = 0) and (gi^.Hedgehog^.Effects[heFrozen] = 0) then
@@ -97,15 +97,15 @@
                         gi^.dX.isNegative:= X<gi^.X;
                         gi^.State := gi^.State or gstLoser;
                         end;
-                        
+
                     if d > r div 2 then
-                        PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack) 
+                        PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack)
                     else
                         PlaySoundV(sndUhOh, gi^.Hedgehog^.Team^.voicepack);
                     end;
                 end;
             end;
-            
+
         gi := gi^.NextGear
         end;
 end;
@@ -116,10 +116,10 @@
     DeleteCI(HH^.Gear);
     if FollowGear = HH^.Gear then
         FollowGear:= nil;
-        
+
     if lastGearByUID = HH^.Gear then
         lastGearByUID := nil;
-    
+
     HH^.Gear^.Message:= HH^.Gear^.Message or gmRemoveFromList;
     with HH^.Gear^ do
         begin
@@ -165,7 +165,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFallingGear(Gear: PGear);
-var 
+var
     isFalling: boolean;
     //tmp: QWord;
     tdX, tdY: hwFloat;
@@ -173,23 +173,11 @@
     land: word;
 begin
     // clip velocity at 2 - over 1 per pixel, but really shouldn't cause many actual problems.
-{$IFNDEF WEB}
     if Gear^.dX.Round > 2 then
         Gear^.dX.QWordValue:= 8589934592;
     if Gear^.dY.Round > 2 then
         Gear^.dY.QWordValue:= 8589934592;
-{$ELSE}
-    if Gear^.dX.Round > 2 then
-        begin
-        Gear^.dX.Round:= 2;
-        Gear^.dX.Frac:= 0
-        end;
-    if Gear^.dY.QWordValue > 2 then
-        begin
-        Gear^.dY.Round:= 2;
-        Gear^.dY.Frac:= 0
-        end;
-{$ENDIF}
+
     Gear^.State := Gear^.State and (not gstCollision);
     collV := 0;
     collH := 0;
@@ -220,16 +208,16 @@
         else if (Gear^.AdvBounce=1) and (TestCollisionYwithGear(Gear, 1) <> 0) then
             collV := 1;
         end
-    else 
+    else
         begin // Gear^.dY.isNegative is false
         land:= TestCollisionYwithGear(Gear, 1);
         if land <> 0 then
             begin
             collV := 1;
             isFalling := false;
-            if land and lfIce <> 0 then 
+            if land and lfIce <> 0 then
                 Gear^.dX := Gear^.dX * (_0_9 + Gear^.Friction * _0_1)
-            else 
+            else
                 Gear^.dX := Gear^.dX * Gear^.Friction;
 
             Gear^.dY := - Gear^.dY * Gear^.Elasticity;
@@ -252,7 +240,7 @@
         Gear^.State := Gear^.State or gstCollision
         end
     else if (Gear^.AdvBounce=1) and TestCollisionXwithGear(Gear, -hwSign(Gear^.dX)) then
-        collH := -hwSign(Gear^.dX); 
+        collH := -hwSign(Gear^.dX);
     //if Gear^.AdvBounce and (collV <>0) and (collH <> 0) and (hwSqr(tdX) + hwSqr(tdY) > _0_08) then
     if (Gear^.AdvBounce=1) and (collV <>0) and (collH <> 0) and ((collV=-1)
     or ((tdX.QWordValue + tdY.QWordValue) > _0_2.QWordValue)) then
@@ -285,18 +273,18 @@
     else
         Gear^.State := Gear^.State or gstMoving;
 
-    if (Gear^.nImpactSounds > 0) and 
+    if (Gear^.nImpactSounds > 0) and
         (Gear^.State and gstCollision <> 0) and
         (((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and
         (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or
-            ((Gear^.Radius >= 3) and 
+            ((Gear^.Radius >= 3) and
                 ((Gear^.dX.QWordValue > _0_1.QWordValue) or (Gear^.dY.QWordValue > _0_1.QWordValue)))) then
         PlaySound(TSound(ord(Gear^.ImpactSound) + LongInt(GetRandom(Gear^.nImpactSounds))), true);
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepBomb(Gear: PGear);
-var 
+var
     i, x, y: LongInt;
     dX, dY, gdX: hwFloat;
     vg: PVisualGear;
@@ -307,7 +295,7 @@
 
     dec(Gear^.Timer);
     if Gear^.Timer = 1000 then // might need adjustments
-        case Gear^.Kind of 
+        case Gear^.Kind of
             gtGrenade: makeHogsWorry(Gear^.X, Gear^.Y, 50);
             gtClusterBomb: makeHogsWorry(Gear^.X, Gear^.Y, 20);
             gtWatermelon: makeHogsWorry(Gear^.X, Gear^.Y, 75);
@@ -331,10 +319,10 @@
 
     if Gear^.Timer = 0 then
         begin
-        case Gear^.Kind of 
+        case Gear^.Kind of
             gtGrenade: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound);
             gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 40, Gear^.Hedgehog, EXPLAutoSound);
-            gtClusterBomb: 
+            gtClusterBomb:
                 begin
                 x := hwRound(Gear^.X);
                 y := hwRound(Gear^.Y);
@@ -347,7 +335,7 @@
                     FollowGear := AddGear(x, y, gtCluster, 0, dX, dY, 25)
                     end
                 end;
-            gtWatermelon: 
+            gtWatermelon:
                 begin
                 x := hwRound(Gear^.X);
                 y := hwRound(Gear^.Y);
@@ -361,7 +349,7 @@
                     FollowGear^.DirAngle := i * 60
                     end
                 end;
-            gtHellishBomb: 
+            gtHellishBomb:
                 begin
                 x := hwRound(Gear^.X);
                 y := hwRound(Gear^.Y);
@@ -377,7 +365,7 @@
                         AddGear(x, y, gtFlame, 0, dX, -dY, 0)
                         end
                     else
-                        begin 
+                        begin
                         AddGear(x, y, gtFlame, 0, dX, dY, 0);
                         AddGear(x, y, gtFlame, gstTmpFlag, dX, -dY, 0)
                         end;
@@ -417,7 +405,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepMolotov(Gear: PGear);
-var 
+var
     s: Longword;
     i, gX, gY: LongInt;
     dX, dY: hwFloat;
@@ -437,7 +425,7 @@
             i:= 130
         else
             i:= 50;
-            
+
         smoke:= AddVisualGear(hwRound(Gear^.X)-round(cos((Gear^.DirAngle+i) * pi / 180)*20), hwRound(Gear^.Y)-round(sin((Gear^.DirAngle+i) * pi / 180)*20), vgtSmoke);
         if smoke <> nil then
             smoke^.Scale:= 0.75;
@@ -697,10 +685,10 @@
                     end;
                 p:= @(p^[s^.pitch shr 2])
                 end;
-            
-            // Why is this here.  For one thing, there's no test on +1 being safe. 
+
+            // Why is this here.  For one thing, there's no test on +1 being safe.
             //Land[py, px+1]:= lfBasic;
-            
+
             if allpx then
                 UpdateLandTexture(xx, Pred(s^.h), yy, Pred(s^.w), true)
             else
@@ -765,7 +753,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepBeeWork(Gear: PGear);
-var 
+var
     t: hwFloat;
     gX,gY,i: LongInt;
     uw, nuw: boolean;
@@ -880,7 +868,7 @@
         Gear^.Hedgehog^.Gear^.Message:= Gear^.Hedgehog^.Gear^.Message and (not gmAttack);
         Gear^.Hedgehog^.Gear^.State:= Gear^.Hedgehog^.Gear^.State and (not gstAttacking);
         AttackBar:= 0;
-        
+
         Gear^.SoundChannel := LoopSound(sndBee);
         Gear^.Timer := 5000;
         // save initial speed in otherwise unused Friction variable
@@ -902,7 +890,7 @@
 end;
 
 procedure doStepShotgunShot(Gear: PGear);
-var 
+var
     i: LongWord;
     shell: PVisualGear;
 begin
@@ -978,7 +966,7 @@
 
         // Bullet trail
         VGear := AddVisualGear(hwRound(ox), hwRound(oy), vgtLineTrail);
-        
+
         if VGear <> nil then
             begin
             VGear^.X:= hwFloat2Float(ox);
@@ -1001,7 +989,7 @@
 end;
 
 procedure doStepBulletWork(Gear: PGear);
-var 
+var
     i, x, y: LongWord;
     oX, oY: hwFloat;
     VGear: PVisualGear;
@@ -1016,7 +1004,7 @@
         Gear^.Y := Gear^.Y + Gear^.dY;
         x := hwRound(Gear^.X);
         y := hwRound(Gear^.Y);
-        
+
         if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) and (Land[y, x] <> 0) then
             inc(Gear^.Damage);
         // let's interrupt before a collision to give portals a chance to catch the bullet
@@ -1038,7 +1026,7 @@
         else
             AmmoShove(Gear, Gear^.Timer, 20);
         CheckGearDrowning(Gear);
-        dec(i) 
+        dec(i)
     until (i = 0) or (Gear^.Damage > Gear^.Health) or ((Gear^.State and gstDrowning) <> 0);
 
     if Gear^.Damage > 0 then
@@ -1066,7 +1054,7 @@
                 cLaserSighting := false;
             if (Ammoz[Gear^.AmmoType].Ammo.NumPerTurn <= CurrentHedgehog^.MultiShootAttacks) and ((GameFlags and gfArtillery) = 0) then
                 cArtillery := false;
-        
+
         // Bullet Hit
             if (hwRound(Gear^.X) and LAND_WIDTH_MASK = 0) and (hwRound(Gear^.Y) and LAND_HEIGHT_MASK = 0) then
                 begin
@@ -1076,7 +1064,7 @@
                     VGear^.Angle := DxDy2Angle(-Gear^.dX, Gear^.dY);
                     end;
                 end;
-       
+
             spawnBulletTrail(Gear);
             Gear^.doStep := @doStepShotIdle
             end;
@@ -1092,7 +1080,7 @@
 end;
 
 procedure doStepSniperRifleShot(Gear: PGear);
-var 
+var
     HHGear: PGear;
     shell: PVisualGear;
 begin
@@ -1123,7 +1111,7 @@
         Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5;
         PlaySound(sndGun);
         // add 3 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles
-        Gear^.X := Gear^.X + Gear^.dX * 3;  
+        Gear^.X := Gear^.X + Gear^.dX * 3;
         Gear^.Y := Gear^.Y + Gear^.dY * 3;
         Gear^.doStep := @doStepBulletWork;
         end
@@ -1152,7 +1140,7 @@
 begin
 dec(Gear^.Timer);
 case Gear^.Kind of
-    gtATStartGame: 
+    gtATStartGame:
         begin
         AllInactive := false;
         if Gear^.Timer = 0 then
@@ -1160,7 +1148,7 @@
             AddCaption(trmsg[sidStartFight], cWhiteColor, capgrpGameState);
             end
         end;
-    gtATFinishGame: 
+    gtATFinishGame:
         begin
         AllInactive := false;
         if Gear^.Timer = 1000 then
@@ -1183,7 +1171,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepPickHammerWork(Gear: PGear);
-var 
+var
     i, ei, x, y: LongInt;
     HHGear: PGear;
 begin
@@ -1274,7 +1262,7 @@
 end;
 
 procedure doStepPickHammer(Gear: PGear);
-var 
+var
     i, y: LongInt;
     ar: TRangeArray;
     HHGear: PGear;
@@ -1301,11 +1289,11 @@
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
-var 
+var
     BTPrevAngle, BTSteps: LongInt;
 
 procedure doStepBlowTorchWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
     b: boolean;
     prevX: LongInt;
@@ -1314,7 +1302,7 @@
     dec(Gear^.Timer);
     if ((GameFlags and gfInfAttack) <> 0) and (TurnTimeLeft > 0) then
         dec(TurnTimeLeft);
-    
+
     HHGear := Gear^.Hedgehog^.Gear;
 
     HedgehogChAngle(HHGear);
@@ -1395,7 +1383,7 @@
 end;
 
 procedure doStepBlowTorch(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     BTPrevAngle := High(LongInt);
@@ -1443,7 +1431,7 @@
             inc(Gear^.Damage, hwRound(Gear^.dY * -_70))
         else if Gear^.dX.isNegative and (Gear^.dX < -_0_2) and TestCollisionXwithGear(Gear, -1) then
             inc(Gear^.Damage, hwRound(Gear^.dX * -_70));
-        
+
         if ((GameTicks and $FF) = 0) and (Gear^.Damage > random(30)) then
             begin
             vg:= AddVisualGear(hwRound(Gear^.X) - 4  + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke);
@@ -1505,9 +1493,9 @@
 procedure doStepSMine(Gear: PGear);
 begin
     // TODO: do real calculation?
-    if TestCollisionXwithGear(Gear, 2) 
-    or (TestCollisionYwithGear(Gear, -2) <> 0) 
-    or TestCollisionXwithGear(Gear, -2) 
+    if TestCollisionXwithGear(Gear, 2)
+    or (TestCollisionYwithGear(Gear, -2) <> 0)
+    or TestCollisionXwithGear(Gear, -2)
     or (TestCollisionYwithGear(Gear, 2) <> 0) then
         begin
         if (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then
@@ -1582,14 +1570,14 @@
 Try tweaking friction some more
 *)
 procedure doStepRollingBarrel(Gear: PGear);
-var 
+var
     i: LongInt;
     particle: PVisualGear;
 begin
     if (Gear^.dY.QWordValue = 0) and (Gear^.dY.QWordValue = 0) and (TestCollisionYwithGear(Gear, 1) = 0) then
         SetLittle(Gear^.dY);
     Gear^.State := Gear^.State or gstAnimation;
-    
+
     if ((Gear^.dX.QWordValue <> 0)
     or (Gear^.dY.QWordValue <> 0))  then
         begin
@@ -1608,10 +1596,10 @@
             end
         else if not Gear^.dX.isNegative and (Gear^.dX > _0_2) and TestCollisionXwithGear(Gear, 1) then
                 inc(Gear^.Damage, hwRound(Gear^.dX * _70))
-                
+
         else if Gear^.dY.isNegative and (Gear^.dY < -_0_2) and (TestCollisionYwithGear(Gear, -1) <> 0) then
                 inc(Gear^.Damage, hwRound(Gear^.dY * -_70))
-                
+
         else if Gear^.dX.isNegative and (Gear^.dX < -_0_2) and TestCollisionXwithGear(Gear, -1) then
                 inc(Gear^.Damage, hwRound(Gear^.dX * -_70));
 
@@ -1660,7 +1648,7 @@
 end;
 
 procedure doStepCase(Gear: PGear);
-var 
+var
     i, x, y: LongInt;
     k: TGearType;
     exBoom: boolean;
@@ -1701,7 +1689,7 @@
             exBoom := true;
         end
     else
-        begin 
+        begin
         if (Gear^.Pos <> posCaseHealth) and (GameTicks and $1FFF = 0) then // stir 'em up periodically
             begin
             gi := GearsList;
@@ -1738,12 +1726,12 @@
                 sparkles^.dX:= 0;
                 sparkles^.dY:= 0;
                 sparkles^.Angle:= 270;
-                if Gear^.Tag = 1 then 
+                if Gear^.Tag = 1 then
                     sparkles^.Tint:= $3744D7FF
                 else sparkles^.Tint:= $FAB22CFF
                 end;
             end;
-        if Gear^.Timer < 1000 then 
+        if Gear^.Timer < 1000 then
             begin
             AllInactive:= false;
             exit
@@ -1802,7 +1790,7 @@
             if Gear^.dY > _0_2 then
                 for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
                     AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
-                    
+
             Gear^.dY := - Gear^.dY * Gear^.Elasticity;
             if Gear^.dY > - _0_001 then
                 Gear^.dY := _0
@@ -1856,7 +1844,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepShover(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -1872,7 +1860,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepWhip(Gear: PGear);
-var 
+var
     HHGear: PGear;
     i: LongInt;
 begin
@@ -1894,7 +1882,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFlame(Gear: PGear);
-var 
+var
     gX,gY,i: LongInt;
     sticky: Boolean;
     vgt: PVisualGear;
@@ -1921,10 +1909,10 @@
 
         if Gear^.dX.QWordValue > _0_01.QWordValue then
             Gear^.dX := Gear^.dX * _0_995;
-            
+
         Gear^.dY := Gear^.dY + cGravity;
         // if sticky then Gear^.dY := Gear^.dY + cGravity;
-        
+
         if Gear^.dY.QWordValue > _0_2.QWordValue then
             Gear^.dY := Gear^.dY * _0_995;
 
@@ -1985,13 +1973,13 @@
                     Gear^.Radius := 1;
                     end
                 else if ((GameTicks and $3) = 3) then
-                    doMakeExplosion(gX, gY, 8, Gear^.Hedgehog, 0);//, EXPLNoDamage); 
+                    doMakeExplosion(gX, gY, 8, Gear^.Hedgehog, 0);//, EXPLNoDamage);
                 //DrawExplosion(gX, gY, 4);
-                
+
                 if ((GameTicks and $7) = 0) and (Random(2) = 0) then
                     for i:= Random(2) downto 0 do
                         AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke);
-                        
+
                 if Gear^.Health > 0 then
                     dec(Gear^.Health);
                 Gear^.Timer := 450 - Gear^.Tag * 8
@@ -2034,7 +2022,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFirePunchWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2071,7 +2059,7 @@
 end;
 
 procedure doStepFirePunch(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2094,7 +2082,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 procedure doStepParachuteWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -2123,13 +2111,13 @@
 
     if (Gear^.Message and gmLeft) <> 0 then
         HHGear^.X := HHGear^.X - cMaxWindSpeed * 80
-        
+
     else if (Gear^.Message and gmRight) <> 0 then
         HHGear^.X := HHGear^.X + cMaxWindSpeed * 80;
-        
+
     if (Gear^.Message and gmUp) <> 0 then
         HHGear^.Y := HHGear^.Y - cGravity * 40
-        
+
     else if (Gear^.Message and gmDown) <> 0 then
         HHGear^.Y := HHGear^.Y + cGravity * 40;
 
@@ -2142,7 +2130,7 @@
 end;
 
 procedure doStepParachute(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -2169,7 +2157,7 @@
     if (Gear^.Health > 0)and(not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then
         begin
         dec(Gear^.Health);
-            case Gear^.State of 
+            case Gear^.State of
                 0: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
                 1: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine,    0, cBombsSpeed * Gear^.Tag, _0, 0);
                 2: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtNapalmBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
@@ -2212,7 +2200,7 @@
 
     // calcs for Napalm Strike, so that it will hit the target (without wind at least :P)
     if (Gear^.State = 2) then
-        Gear^.dX := Gear^.dX - cBombsSpeed * Gear^.Tag * 900 
+        Gear^.dX := Gear^.dX - cBombsSpeed * Gear^.Tag * 900
     // calcs for regular falling gears
     else if (int2hwFloat(Gear^.Target.Y) - Gear^.Y > _0) then
             Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(Gear^.Target.Y) - Gear^.Y) * 2 /
@@ -2246,7 +2234,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 procedure doStepGirder(Gear: PGear);
-var 
+var
     HHGear: PGear;
     x, y, tx, ty: hwFloat;
 begin
@@ -2268,7 +2256,7 @@
         isCursorVisible := true;
         DeleteGear(Gear)
         end
-    else 
+    else
         begin
         PlaySound(sndPlaced);
         DeleteGear(Gear);
@@ -2281,7 +2269,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepTeleportAfter(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -2315,7 +2303,7 @@
 end;
 
 procedure doStepTeleport(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2356,7 +2344,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepSwitcherWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
     hedgehog: PHedgehog;
     State: Longword;
@@ -2391,12 +2379,12 @@
 
         repeat
             CurrentTeam^.CurrHedgehog := Succ(CurrentTeam^.CurrHedgehog) mod (CurrentTeam^.HedgehogsNumber);
-        until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and 
-              (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and 
+        until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and
+              (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and
               (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen]=0);
 
         SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]);
-        AmmoMenuInvalidated:= true; 
+        AmmoMenuInvalidated:= true;
 
         HHGear := CurrentHedgehog^.Gear;
         HHGear^.State := State;
@@ -2410,7 +2398,7 @@
 end;
 
 procedure doStepSwitcher(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     Gear^.doStep := @doStepSwitcherWork;
@@ -2426,7 +2414,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepMortar(Gear: PGear);
-var 
+var
     dX, dY, gdX, gdY: hwFloat;
     i: LongInt;
     dxn, dyn: boolean;
@@ -2461,7 +2449,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepKamikazeWork(Gear: PGear);
-var 
+var
     i: LongWord;
     HHGear: PGear;
     sparkles: PVisualGear;
@@ -2496,7 +2484,7 @@
 
     i := 2;
     repeat
-        
+
         Gear^.X := Gear^.X + HHGear^.dX;
         Gear^.Y := Gear^.Y + HHGear^.dY;
         HHGear^.X := Gear^.X;
@@ -2579,7 +2567,7 @@
 end;
 
 procedure doStepKamikaze(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2600,7 +2588,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 const cakeh =   27;
-var 
+var
     CakePoints: array[0..Pred(cakeh)] of record
         x, y: hwFloat;
     end;
@@ -2620,7 +2608,7 @@
 end;
 
 procedure doStepCakeDown(Gear: PGear);
-var 
+var
     gi: PGear;
     dmg, dmgBase: LongInt;
     fX, fY, tdX, tdY: hwFloat;
@@ -2706,7 +2694,7 @@
 end;
 
 procedure doStepCakeUp(Gear: PGear);
-var 
+var
     i: Longword;
 begin
     AllInactive := false;
@@ -2746,7 +2734,7 @@
 end;
 
 procedure doStepCake(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     AllInactive := false;
@@ -2850,7 +2838,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepWaterUp(Gear: PGear);
-var 
+var
     i: LongWord;
 begin
     if (Gear^.Tag = 0)
@@ -2884,28 +2872,28 @@
 forward;
 
 procedure doStepDrillDrilling(Gear: PGear);
-var 
+var
     t: PGearArray;
-    ox, oy: hwFloat;
-    tempColl: Word; 
+    tempColl: Word;
 begin
     AllInactive := false;
-
-    if (Gear^.Timer > 0) and ((Gear^.Timer mod 10) = 0) then
-    begin
-        ox := Gear^.X;
-        oy := Gear^.Y;
-        Gear^.X := Gear^.X + Gear^.dX;
-        Gear^.Y := Gear^.Y + Gear^.dY;
-        DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 2, 6);
-        if (Gear^.Timer mod 30) = 0 then
-            AddVisualGear(hwRound(Gear^.X + _20 * Gear^.dX), hwRound(Gear^.Y + _20 * Gear^.dY), vgtDust);
-        if (CheckGearDrowning(Gear)) then
-            begin
-            StopSoundChan(Gear^.SoundChannel);
-            exit
-        end
+    if (Gear^.Timer > 0) and (Gear^.Timer mod 10 <> 0) then
+        begin
+        dec(Gear^.Timer);
+        exit;
+        end;
+
+    DrawTunnel(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, 2, 6);
+    Gear^.X := Gear^.X + Gear^.dX;
+    Gear^.Y := Gear^.Y + Gear^.dY;
+    if (Gear^.Timer mod 30) = 0 then
+        AddVisualGear(hwRound(Gear^.X + _20 * Gear^.dX), hwRound(Gear^.Y + _20 * Gear^.dY), vgtDust);
+    if (CheckGearDrowning(Gear)) then
+        begin
+        StopSoundChan(Gear^.SoundChannel);
+        exit
     end;
+
     tempColl:= Gear^.CollisionMask;
     Gear^.CollisionMask:= $007F;
     if (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) <> 0) or TestCollisionXWithGear(Gear, hwSign(Gear^.dX)) or (GameTicks > Gear^.FlightTime) then
@@ -2913,7 +2901,7 @@
     else t := nil;
     Gear^.CollisionMask:= tempColl;
     //fixes drill not exploding when touching HH bug
-    
+
     if (Gear^.Timer = 0) or ((t <> nil) and (t^.Count <> 0))
     or ( ((Gear^.State and gsttmpFlag) = 0) and (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) = 0) and (not TestCollisionXWithGear(Gear, hwSign(Gear^.dX))))
 // CheckLandValue returns true if the type isn't matched
@@ -2928,7 +2916,7 @@
         DeleteGear(Gear);
         exit
         end
-        
+
     else if (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) = 0) and (not TestCollisionXWithGear(Gear, hwSign(Gear^.dX))) then
         begin
         StopSoundChan(Gear^.SoundChannel);
@@ -2940,7 +2928,7 @@
 end;
 
 procedure doStepDrill(Gear: PGear);
-var 
+var
     t: PGearArray;
     oldDx, oldDy: hwFloat;
     t2: hwFloat;
@@ -2964,7 +2952,7 @@
         Gear^.dX := oldDx;
         Gear^.dY := oldDy;
 
-        if GameTicks > Gear^.FlightTime then 
+        if GameTicks > Gear^.FlightTime then
             t := CheckGearsCollision(Gear)
         else
             t := nil;
@@ -2975,7 +2963,7 @@
             Gear^.dX := Gear^.dX * t2;
             Gear^.dY := Gear^.dY * t2;
             end
-            
+
         else if (t <> nil) then
             begin
             //explode right on contact with HH
@@ -2989,14 +2977,14 @@
 
         Gear^.SoundChannel := LoopSound(sndDrillRocket);
         Gear^.doStep := @doStepDrillDrilling;
-        
+
         if (Gear^.State and gsttmpFlag) <> 0 then
             gear^.RenderTimer:= true;
         if Gear^.Timer > 0 then dec(Gear^.Timer)
         end
     else if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Tag <> 0) then
         begin
-        if Gear^.Timer > 0 then 
+        if Gear^.Timer > 0 then
             dec(Gear^.Timer)
         else
             begin
@@ -3008,7 +2996,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepBallgunWork(Gear: PGear);
-var 
+var
     HHGear, ball: PGear;
     rx, ry: hwFloat;
     gX, gY: LongInt;
@@ -3038,7 +3026,7 @@
 end;
 
 procedure doStepBallgun(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -3051,7 +3039,7 @@
 procedure doStepRCPlaneWork(Gear: PGear);
 
 const cAngleSpeed =   3;
-var 
+var
     HHGear: PGear;
     i: LongInt;
     dX, dY: hwFloat;
@@ -3160,7 +3148,7 @@
             begin
             if TagTurnTimeLeft = 0 then
                 TagTurnTimeLeft:= TurnTimeLeft;
-                
+
             TurnTimeLeft:= 14 * 125;
             end;
 
@@ -3170,7 +3158,7 @@
 end;
 
 procedure doStepRCPlane(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -3178,7 +3166,7 @@
     HHGear^.State := HHGear^.State or gstNotKickable;
     Gear^.Angle := HHGear^.Angle;
     Gear^.Tag := hwSign(HHGear^.dX);
-    
+
     if HHGear^.dX.isNegative then
         Gear^.Angle := 4096 - Gear^.Angle;
     Gear^.doStep := @doStepRCPlaneWork
@@ -3186,7 +3174,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepJetpackWork(Gear: PGear);
-var 
+var
     HHGear: PGear;
     fuel, i: LongInt;
     move: hwFloat;
@@ -3265,9 +3253,9 @@
 
     if Gear^.Health < 0 then
         Gear^.Health := 0;
-        
+
     i:= Gear^.Health div 20;
-    
+
     if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
         begin
         Gear^.Damage:= i;
@@ -3276,9 +3264,9 @@
         Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(i) + '%', cWhiteColor, fntSmall)
         end;
 
-    if HHGear^.Message and (gmAttack or gmUp or gmPrecise or gmLeft or gmRight) <> 0 then 
+    if HHGear^.Message and (gmAttack or gmUp or gmPrecise or gmLeft or gmRight) <> 0 then
         Gear^.State := Gear^.State and (not gsttmpFlag);
-        
+
     HHGear^.Message := HHGear^.Message and (not (gmUp or gmPrecise or gmLeft or gmRight));
     HHGear^.State := HHGear^.State or gstMoving;
 
@@ -3288,7 +3276,7 @@
     if not isUnderWater and hasBorder and ((HHGear^.X < _0)
     or (hwRound(HHGear^.X) > LAND_WIDTH)) then
         HHGear^.dY.isNegative:= false;
-        
+
     if ((Gear^.State and gsttmpFlag) = 0)
     or (HHGear^.dY < _0) then
         doStepHedgehogMoving(HHGear);
@@ -3320,7 +3308,7 @@
 end;
 
 procedure doStepJetpack(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     Gear^.Pos:= 0;
@@ -3333,7 +3321,7 @@
         begin
         State := State and (not gstAttacking);
         Message := Message and (not (gmAttack or gmUp or gmPrecise or gmLeft or gmRight));
-        
+
         if (dY < _0_1) and (dY > -_0_1) then
             begin
             Gear^.State := Gear^.State or gsttmpFlag;
@@ -3356,13 +3344,13 @@
 end;
 
 procedure doStepBirdyFly(Gear: PGear);
-var 
+var
     HHGear: PGear;
     fuel, i: LongInt;
     move: hwFloat;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
-    if HHGear = nil then 
+    if HHGear = nil then
         begin
         DeleteGear(Gear);
         exit
@@ -3386,11 +3374,11 @@
         if (not HHGear^.dY.isNegative)
         or (HHGear^.Y > -_256) then
             HHGear^.dY := HHGear^.dY - move;
-            
+
         dec(Gear^.Health, fuel);
         Gear^.MsgParam := Gear^.MsgParam or gmUp;
         end;
-        
+
     if (HHGear^.Message and gmLeft) <> 0 then move.isNegative := true;
     if (HHGear^.Message and (gmLeft or gmRight)) <> 0 then
         begin
@@ -3401,7 +3389,7 @@
 
     if Gear^.Health < 0 then
         Gear^.Health := 0;
-        
+
     if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then
         for i:= ((500-Gear^.Health) div 250) downto 0 do
             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather);
@@ -3419,7 +3407,7 @@
 
     if HHGear^.Message and (gmUp or gmPrecise or gmLeft or gmRight) <> 0 then
         Gear^.State := Gear^.State and (not gsttmpFlag);
-        
+
     HHGear^.Message := HHGear^.Message and (not (gmUp or gmPrecise or gmLeft or gmRight));
     HHGear^.State := HHGear^.State or gstMoving;
 
@@ -3462,7 +3450,7 @@
 end;
 
 procedure doStepBirdyDescend(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     if Gear^.Timer > 0 then
@@ -3503,12 +3491,12 @@
 end;
 
 procedure doStepBirdy(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     gear^.State :=  gear^.State or gstAnimation and (not gstTmpFlag);
     Gear^.doStep := @doStepBirdyAppear;
-    
+
     if CurrentHedgehog = nil then
         begin
         DeleteGear(Gear);
@@ -3533,7 +3521,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepEggWork(Gear: PGear);
-var 
+var
     vg: PVisualGear;
     i: LongInt;
 begin
@@ -3574,18 +3562,18 @@
                 if (CurAmmoType = amPortalGun) then
                     begin
                     CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and (not gmSwitch);
-                
+
                     CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^);
                     if CurWeapon^.Pos <> 0 then
                         CurWeapon^.Pos := 0
-                        
+
                     else
                     CurWeapon^.Pos := 1;
                     end;
 end;
 
 procedure doStepPortal(Gear: PGear);
-var 
+var
     iterator, conPortal: PGear;
     s, r, nx, ny, ox, oy, poffs, noffs, pspeed, nspeed,
     resetx, resety, resetdx, resetdy: hwFloat;
@@ -3886,7 +3874,7 @@
             resetx.QWordValue:= 4294967296 * 35;
             resetdx.isNegative:= false;
             resetdx.QWordValue:= 4294967296 * 1152;
-    
+
             resetdy:=hwAbs(iterator^.dX*4);
             resetdy:= resetdy + hwPow(resetdy,3)/_6 + _3 * hwPow(resetdy,5) / _40 + _5 * hwPow(resetdy,7) / resety + resetx * hwPow(resetdy,9) / resetdx;
             iterator^.Angle:= hwRound(resetdy*_2048 / _PI);
@@ -3907,7 +3895,7 @@
         and (CurAmmoGear^.Kind =gtRope) then
                CurAmmoGear^.PortalCounter:= 1;
 
-        if not isbullet and (iterator^.State and gstInvisible = 0) 
+        if not isbullet and (iterator^.State and gstInvisible = 0)
         and (iterator^.Kind <> gtFlake) then
             FollowGear := iterator;
 
@@ -3953,7 +3941,7 @@
 end;
 
 procedure doStepMovingPortal_real(Gear: PGear);
-var 
+var
     x, y, tx, ty: LongInt;
     s: hwFloat;
 begin
@@ -3967,7 +3955,7 @@
         begin
         Gear^.State := Gear^.State or gstCollision;
         Gear^.State := Gear^.State and (not gstMoving);
-        
+
         if (Land[y, x] and lfBouncy <> 0)
         or (not CalcSlopeTangent(Gear, x, y, tx, ty, 255))
         or (DistanceI(tx,ty) < _12) then // reject shots at too irregular terrain
@@ -3995,7 +3983,7 @@
         else
             loadNewPortalBall(Gear, true);
     end
-    
+
     else if (y > cWaterLine)
     or (y < -max(LAND_WIDTH,4096))
     or (x > 2*max(LAND_WIDTH,4096))
@@ -4007,13 +3995,13 @@
 begin
     doPortalColorSwitch();
     doStepPerPixel(Gear, @doStepMovingPortal_real, true);
-    if (Gear^.Timer < 1) 
+    if (Gear^.Timer < 1)
     or (Gear^.Hedgehog^.Team <> CurrentHedgehog^.Team) then
         deleteGear(Gear);
 end;
 
 procedure doStepPortalShot(newPortal: PGear);
-var 
+var
     iterator: PGear;
     s: hwFloat;
     CurWeapon: PAmmo;
@@ -4093,15 +4081,15 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepPiano(Gear: PGear);
-var 
+var
     r0, r1: LongInt;
     odY: hwFloat;
 begin
     AllInactive := false;
-    if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and 
+    if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and
         ((CurrentHedgehog^.Gear^.Message and gmSlot) <> 0) then
             begin
-                case CurrentHedgehog^.Gear^.MsgParam of 
+                case CurrentHedgehog^.Gear^.MsgParam of
                 0: PlaySound(sndPiano0);
                 1: PlaySound(sndPiano1);
                 2: PlaySound(sndPiano2);
@@ -4181,7 +4169,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepSineGunShotWork(Gear: PGear);
-var 
+var
     x, y, rX, rY, t, tmp, initHealth: LongInt;
     oX, oY, ldX, ldY, sdX, sdY, sine, lx, ly, amp: hwFloat;
     justCollided: boolean;
@@ -4276,7 +4264,7 @@
                     end;
 
                 if random(100) = 0 then
-                    AddVisualGear(x, y, vgtSmokeTrace); 
+                    AddVisualGear(x, y, vgtSmokeTrace);
                 end
                 else dec(Gear^.Health, 5); // if underwater get additional damage
             end;
@@ -4314,7 +4302,7 @@
 var
     HHGear: PGear;
 begin
-    PlaySound(sndSineGun); 
+    PlaySound(sndSineGun);
 
     // push the shooting Hedgehog back
     HHGear := CurrentHedgehog^.Gear;
@@ -4334,7 +4322,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepFlamethrowerWork(Gear: PGear);
-var 
+var
     HHGear, flame: PGear;
     rx, ry, speed: hwFloat;
     i, gX, gY: LongInt;
@@ -4344,7 +4332,7 @@
     HedgehogChAngle(HHGear);
     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
-    
+
     if (GameTicks and $FF) = 0 then
         begin
         if (HHGear^.Message and gmRight) <> 0 then
@@ -4358,11 +4346,11 @@
             begin
             if HHGear^.dX.isNegative and (Gear^.Tag > 5) then
                 dec(Gear^.Tag)
-            else if Gear^.Tag < 20 then 
+            else if Gear^.Tag < 20 then
                 inc(Gear^.Tag);
             end
         end;
-    
+
     dec(Gear^.Timer);
     if Gear^.Timer = 0 then
         begin
@@ -4372,12 +4360,12 @@
             rx := rndSign(getRandomf * _0_1);
             ry := rndSign(getRandomf * _0_1);
             speed := _0_5 * (_10 / Gear^.Tag);
-    
+
             flame:= AddGear(gx, gy, gtFlame, gstTmpFlag,
                     SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
                     AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
             flame^.CollisionMask:= lfNotCurrentMask;
-            
+
             if (Gear^.Health mod 30) = 0 then
                 begin
                 flame:= AddGear(gx, gy, gtFlame, 0,
@@ -4408,7 +4396,7 @@
 end;
 
 procedure doStepFlamethrower(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -4419,7 +4407,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepLandGunWork(Gear: PGear);
-var 
+var
     HHGear, land: PGear;
     rx, ry, speed: hwFloat;
     i, gX, gY: LongInt;
@@ -4429,7 +4417,7 @@
     HedgehogChAngle(HHGear);
     gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle);
     gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle);
-    
+
     if (GameTicks and $FF) = 0 then
         begin
         if (HHGear^.Message and gmRight) <> 0 then
@@ -4447,7 +4435,7 @@
                 inc(Gear^.Tag);
             end
         end;
-    
+
     dec(Gear^.Timer);
     if Gear^.Timer = 0 then
         begin
@@ -4457,11 +4445,11 @@
         ry := rndSign(getRandomf * _0_1);
         speed := (_3 / Gear^.Tag);
 
-        land:= AddGear(gx, gy, gtFlake, gstTmpFlag, 
-                SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, 
+        land:= AddGear(gx, gy, gtFlake, gstTmpFlag,
+                SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx,
                 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0);
         land^.CollisionMask:= lfNotCurrentMask;
-            
+
         Gear^.Timer:= Gear^.Tag
         end;
 
@@ -4485,7 +4473,7 @@
 end;
 
 procedure doStepLandGun(Gear: PGear);
-var 
+var
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
@@ -4554,7 +4542,7 @@
 end;
 
 procedure doStepHammerHitWork(Gear: PGear);
-var 
+var
     i, j, ei: LongInt;
     HitGear: PGear;
 begin
@@ -4610,7 +4598,7 @@
 end;
 
 procedure doStepHammerHit(Gear: PGear);
-var 
+var
     i, y: LongInt;
     ar: TRangeArray;
     HHGear: PGear;
@@ -4660,7 +4648,7 @@
         begin
         if (GameTicks and $F) <> 0 then
         exit;
-        end 
+        end
     else if (GameTicks and $1FF) <> 0 then
         exit;
 
@@ -4697,8 +4685,8 @@
                 inc(graves[i]^.Health);
             end;
         end; -}
-        end 
-    else 
+        end
+    else
         begin
         // now really resurrect the hogs with the hp saved in the graves
         for i:= 0 to graves.size - 1 do
@@ -4757,9 +4745,9 @@
             RecountTeamHealth(hh^.Team);
             inc(graves.ar^[Gear^.Tag]^.Health);
             inc(Gear^.Tag)
-            end 
-        end 
-    else 
+            end
+        end
+    else
         begin
         StopSoundChan(Gear^.SoundChannel);
         Gear^.Timer := 250;
@@ -4779,7 +4767,7 @@
     begin
         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, Gear^.Hedgehog, EXPLAutoSound);
         gX := hwRound(Gear^.X);
-        gY := hwRound(Gear^.Y); 
+        gY := hwRound(Gear^.Y);
         for i:= 0 to 10 do
         begin
             dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandomf + _1);
@@ -4807,7 +4795,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepStructure(Gear: PGear);
-var 
+var
     x, y: LongInt;
     HH: PHedgehog;
     t: PGear;
@@ -4824,7 +4812,7 @@
 
     dec(Gear^.Health, Gear^.Damage);
     Gear^.Damage:= 0;
-        
+
     if Gear^.Pos = 1 then
         begin
         AddGearCI(Gear);
@@ -4835,7 +4823,7 @@
             HideHog(HH);
         Gear^.Pos:= 2
         end;
-        
+
     if Gear^.Pos = 2 then
         begin
         if ((GameTicks mod 100) = 0) and (Gear^.Timer < 1000) then
@@ -4851,7 +4839,7 @@
         if Gear^.Tag <= TotalRounds then
             Gear^.Pos:= 3;
         end;
-        
+
     if Gear^.Pos = 3 then
         if Gear^.Timer < 1000 then
             begin
@@ -4869,7 +4857,7 @@
                 RestoreHog(HH);
             Gear^.Pos:= 4;
             end;
-        
+
     if Gear^.Pos = 4 then
         if ((GameTicks mod 1000) = 0) and ((GameFlags and gfInvulnerable) = 0) then
             begin
@@ -4881,12 +4869,12 @@
                 t:= t^.NextGear;
                 end;
             end;
-        
+
     if Gear^.Health <= 0 then
         begin
         if HH^.GearHidden <> nil then
             RestoreHog(HH);
-        
+
         x := hwRound(Gear^.X);
         y := hwRound(Gear^.Y);
 
@@ -4899,7 +4887,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 (*
- TARDIS needs 
+ TARDIS needs
  Warp in.  Pos = 1
  Pause.    Pos = 2
  Hide gear  (TARDIS hedgehog was nil)
@@ -4925,7 +4913,7 @@
             begin
             AfterAttack;
             if Gear = CurAmmoGear then CurAmmoGear := nil;
-            if (HH^.Gear^.Damage = 0) and  (HH^.Gear^.Health > 0) and 
+            if (HH^.Gear^.Damage = 0) and  (HH^.Gear^.Health > 0) and
             ((Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then
                 HideHog(HH)
             end
@@ -4945,7 +4933,7 @@
 if (Gear^.Pos = 1) and (GameTicks and $1F = 0) and (Gear^.Power < 255) then
     begin
     inc(Gear^.Power);
-    if (Gear^.Power = 172) and (HH^.Gear <> nil) and 
+    if (Gear^.Power = 172) and (HH^.Gear <> nil) and
         (HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and
         ((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then
             with HH^.Gear^ do
@@ -4986,7 +4974,7 @@
         begin
         if HH^.GearHidden <> nil then
             FindPlace(HH^.GearHidden, false, 0, LAND_WIDTH,true);
-            
+
         if HH^.GearHidden <> nil then
             begin
             Gear^.X:= HH^.GearHidden^.X;
@@ -5062,7 +5050,7 @@
 WIP. The ice gun will have the following effects.  It has been proposed by sheepluva that it take the appearance of a large freezer
 spewing ice cubes.  The cubes will be visual gears only.  The scatter from them and the impact snow dust should help hide imprecisions in things like the GearsNear effect.
 For now we assume a "ray" like a deagle projected out from the gun.
-All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks.  This is a simplifying assumption for "gun was applying freezing effect to the same target".  
+All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks.  This is a simplifying assumption for "gun was applying freezing effect to the same target".
   * When fired at water a layer of ice textured land is added above the water.
   * When fired at non-ice land (land and lfLandMask and not lfIce) the land is overlaid with a thin layer of ice textured land around that point (say, 1 or 2px into land, 1px above). For attractiveness, a slope would probably be needed.
   * When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen.  As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head.  If the effect is interrupted before reaching the top, the freezing state is cleared.
@@ -5072,7 +5060,7 @@
 
 
 procedure updateFuel(Gear: PGear);
-var 
+var
   t:LongInt;
 begin
     t:= Gear^.Health div 10;
@@ -5105,16 +5093,15 @@
     iter := GearsList;
     while iter <> nil do
         begin
-        if (iter^.Kind = gtHedgehog) and 
-        (iter^.Hedgehog^.Effects[heFrozen] and $FF = 0) then 
+        if (iter^.Kind = gtHedgehog) and
+        (iter^.Hedgehog^.Effects[heFrozen] and $FF = 0) then
         iter^.Hedgehog^.Effects[heFrozen]:= 0;
         iter:= iter^.NextGear
-        end 
+        end
 *)
   end;
 end;
 
-
 procedure doStepIceGun(Gear: PGear);
 const iceWaitCollision:Longint = 0;
 const iceCollideWithGround:Longint = 1;
@@ -5146,41 +5133,38 @@
         HedgehogChAngle(HHGear);
         ndX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _4;
         ndY:= -AngleCos(HHGear^.Angle) * _4;
-        if (ndX <> dX) or (ndY <> dY) or 
-           ((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and 
+        if (ndX <> dX) or (ndY <> dY) or
+           ((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and
              (Target.Y and LAND_HEIGHT_MASK = 0) and ((Land[Target.Y, Target.X] = 0))) then
             begin
-                updateTarget(Gear, ndX, ndY);
-                IceState := iceWaitCollision;
+            updateTarget(Gear, ndX, ndY);
+            Timer := iceWaitCollision;
             end
         else
             begin
             X:= X + dX;
             Y:= Y + dY;
             gX:= hwRound(X);
-            gY:= hwRound(Y);    
-            if Target.X = NoPointX then 
-            begin
-                t:= hwRound(hwSqr(X-HHGear^.X)+hwSqr(Y-HHGear^.Y));
-            end;
+            gY:= hwRound(Y);
+            if Target.X = NoPointX then t:= hwRound(hwSqr(X-HHGear^.X)+hwSqr(Y-HHGear^.Y));
 
             if Target.X <> NoPointX then
-            begin
+                begin
                 CheckCollisionWithLand(Gear);
                 if (State and gstCollision) <> 0 then
-                begin        
-                if IceState = iceWaitCollision then
                     begin
-                    IceState := iceCollideWithGround;
-                    IceTime := GameTicks;                    
-                    end                    
-                end
+                    if Timer = iceWaitCollision then
+                        begin
+                        Timer := iceCollideWithGround;
+                        Power := GameTicks;
+                        end
+                    end
                 else if (target.y >= cWaterLine) then
                     begin
-                    if IceState = iceWaitCollision then
+                    if Timer = iceWaitCollision then
                         begin
-                        IceState := iceCollideWithWater;
-                        IceTime := GameTicks;  
+                        Timer := iceCollideWithWater;
+                        Power := GameTicks;
                         end;
                     end;
 
@@ -5190,25 +5174,25 @@
                     Y:= HHGear^.Y
                     end;
 
-                if (IceState = iceCollideWithGround) and ((GameTicks - IceTime) > groundFreezingTime) then
-                    begin 
+                if (Timer = iceCollideWithGround) and ((GameTicks - Power) > groundFreezingTime) then
+                    begin
                     FillRoundInLand(target.x, target.y, iceRadius, icePixel);
                     landRect.x := min(max(target.x - iceRadius, 0), LAND_WIDTH - 1);
                     landRect.y := min(max(target.y - iceRadius, 0), LAND_HEIGHT - 1);
                     landRect.w := min(2*iceRadius, LAND_WIDTH - landRect.x - 1);
                     landRect.h := min(2*iceRadius, LAND_HEIGHT - landRect.y - 1);
                     UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true);
-                            
+
                     // FillRoundInLandWithIce(Target.X, Target.Y, iceRadius);
                     SetAllHHToActive;
-                    IceState := iceWaitCollision;
+                    Timer := iceWaitCollision;
                     end;
 
-                if (IceState = iceCollideWithWater) and ((GameTicks - IceTime) > groundFreezingTime) then
-                    begin                    
+                if (Timer = iceCollideWithWater) and ((GameTicks - Power) > groundFreezingTime) then
+                    begin
                     DrawIceBreak(Target.X, cWaterLine - iceHeight, iceRadius, iceHeight);
-                    SetAllHHToActive; 
-                    IceState := iceWaitCollision;
+                    SetAllHHToActive;
+                    Timer := iceWaitCollision;
                     end;
 
 // freeze nearby hogs
@@ -5216,7 +5200,7 @@
                 if hogs.size > 0 then
                     for i:= 0 to hogs.size - 1 do
                         if hogs.ar^[i] <> HHGear then
-                            if GameTicks mod 5 = 0 then 
+                            if GameTicks mod 5 = 0 then
                                 begin
                                 hogs.ar^[i]^.Active:= true;
                                 if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] < 256 then
@@ -5225,16 +5209,16 @@
                                     hogs.ar^[i]^.Hedgehog^.Effects[heFrozen]:= 200000;//cHedgehogTurnTime + cReadyDelay
                                 end;
                 inc(Pos)
-            end
+                end
             else if (t > 400) and ((gY > cWaterLine) or
                     (((gX and LAND_WIDTH_MASK = 0) and (gY and LAND_HEIGHT_MASK = 0))
                         and (Land[gY, gX] <> 0))) then
-            begin
+                begin
                 Target.X:= gX;
                 Target.Y:= gY;
                 X:= HHGear^.X;
                 Y:= HHGear^.Y
-            end;
+                end;
             {if (gX > max(LAND_WIDTH,4096)*2) or
                     (gX < -max(LAND_WIDTH,4096)) or
                     (gY < -max(LAND_HEIGHT,4096)) or
@@ -5318,7 +5302,7 @@
         DeleteGear(Gear)
         end;
     // ssssss he essssscaped
-    if (Gear^.Timer > 250) and ((HHGear = nil) or 
+    if (Gear^.Timer > 250) and ((HHGear = nil) or
             (((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) >  180) and
             (Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) > _180))) then
         begin
@@ -5329,7 +5313,7 @@
     end;
 
 // Search out a new target, as target seek time has expired, target is dead, target is out of range, or we did not have a target
-if (HHGear = nil) or (Gear^.Timer = 0) or 
+if (HHGear = nil) or (Gear^.Timer = 0) or
    (((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) >  Gear^.Angle) and
         (Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) > int2hwFloat(Gear^.Angle)))
     then
@@ -5446,7 +5430,7 @@
  This didn't end up getting used, but, who knows, might be reasonable for javellin or something
 // Make the knife initial angle based on the hog attack angle, or is that too hard?
 procedure doStepKnife(Gear: PGear);
-var t, 
+var t,
     gx, gy, ga,  // gear x,y,angle
     lx, ly, la, // land x,y,angle
     ox, oy, // x,y offset
@@ -5470,7 +5454,7 @@
         begin
         if CheckLandValue(gx, gy, lfLandMask) then
             begin
-            t:= Angle + hwRound((hwAbs(dX)+hwAbs(dY)) * _10); 
+            t:= Angle + hwRound((hwAbs(dX)+hwAbs(dY)) * _10);
 
             if t < 0 then inc(t, 4096)
             else if 4095 < t then dec(t, 4096);
@@ -5507,7 +5491,7 @@
                 4:  begin
                     ox:= 29; oy:=  8;
                      w:= 19;  h:= 19;
-                    tx:=  0; ty:= 17 
+                    tx:=  0; ty:= 17
                     end;
                 5:  begin
                     ox:= 29; oy:=  32;
@@ -5517,7 +5501,7 @@
                 6:  begin
                     ox:= 51; oy:=   3;
                      w:= 11;  h:=  23;
-                    tx:=  0; ty:=  22 
+                    tx:=  0; ty:=  22
                     end;
                 7:  begin
                     ox:= 51; oy:=  34;
@@ -5525,7 +5509,7 @@
                     tx:=  0; ty:=  23
                     end
                 end;
-                
+
             surf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask);
             copyToXYFromRect(SpritesData[sprKnife].Surface, surf, ox, oy, w, h, 0, 0);
             // try to make the knife hit point first
@@ -5547,7 +5531,7 @@
                 AddFileLog('la: '+inttostr(la)+' ga: '+inttostr(ga)+' Angle: '+inttostr(Angle))
                 end;
             case Angle div 1024 of
-                0:  begin 
+                0:  begin
                     flipSurface(surf, true);
                     flipSurface(surf, true);
                     BlitImageAndGenerateCollisionInfo(gx-(w-tx), gy-(h-ty), w, surf)
--- a/hedgewars/LuaPas.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/LuaPas.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -15,9 +15,7 @@
 {.$DEFINE LUA_GETHOOK}
 
 type
-{$IFNDEF PAS2C}    
     size_t   = Cardinal;
-{$ENDIF}
     Psize_t  = ^size_t;
     PPointer = ^Pointer;
 
--- a/hedgewars/SDLh.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/SDLh.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -946,12 +946,11 @@
 procedure SDL_StartTextInput; cdecl; external SDLLibName;
 
 function  SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: TSDL_eventaction; minType, maxType: LongWord): LongInt; cdecl; external SDLLibName;
-function  SDL_CreateThread(fn: Pointer; name: PChar; data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
 {$ELSE}
-function  SDL_CreateThread(fn: Pointer; data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
 function  SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: TSDL_eventaction; mask: LongWord): LongInt; cdecl; external SDLLibName;
 {$ENDIF}
 
+
 function  SDL_GetMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName;
 function  SDL_GetKeyName(key: LongWord): PChar; cdecl; external SDLLibName;
 function  SDL_GetScancodeName(key: LongWord): PChar; cdecl; external SDLLibName;
@@ -969,7 +968,13 @@
 procedure SDL_WM_SetCaption(title: PChar; icon: PChar); cdecl; external SDLLibName;
 function  SDL_WM_ToggleFullScreen(surface: PSDL_Surface): LongInt; cdecl; external SDLLibName;
 
+
+// remember to mark the threaded functions as 'cdecl; export;'
+// (or have fun debugging nil arguments)
+function  SDL_CreateThread(fn: Pointer; {$IFDEF SDL13}name: PChar;{$ENDIF} data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
 procedure SDL_WaitThread(thread: PSDL_Thread; status: PLongInt); cdecl; external SDLLibName;
+procedure SDL_KillThread(thread: PSDL_Thread); cdecl; external SDLLibName;
+
 function  SDL_CreateMutex: PSDL_mutex; cdecl; external SDLLibName;
 procedure SDL_DestroyMutex(mutex: PSDL_mutex); cdecl; external SDLLibName;
 function  SDL_LockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName name 'SDL_mutexP';
--- a/hedgewars/hwengine.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/hwengine.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -122,11 +122,7 @@
     if flagMakeCapture then
         begin
         flagMakeCapture:= false;
-        {$IFDEF PAS2C}
-        s:= '/Screenshots/hw';
-        {$ELSE}
         s:= '/Screenshots/hw_' + FormatDateTime('YYYY-MM-DD_HH-mm-ss', Now()) + inttostr(GameTicks);
-        {$ENDIF}
 
         // flash
         playSound(sndShutter);
@@ -169,7 +165,7 @@
                     if GameState = gsChat then
                         begin
                     // sdl on iphone supports only ashii keyboards and the unicode field is deprecated in sdl 1.3
-                        KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym, event.key.keysym.sym)//TODO correct for keymodifiers
+                        KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym), event.key.keysym.sym); //TODO correct for keymodifiers
                         end
                     else
                         ProcessKey(event.key);
--- a/hedgewars/options.inc	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/options.inc	Sun Apr 07 22:53:40 2013 +0200
@@ -29,10 +29,8 @@
 
 {$DEFINE USE_LUA_SCRIPT}
 
-
 {$IFDEF ANDROID}
     {$DEFINE MOBILE}
-    {$DEFINE USE_SDLTHREADS}
     {$DEFINE USE_CONTEXT_RESTORE}
     {$DEFINE Java_Prefix:= 'Java_org_hedgewars_hedgeroid_EngineProtocol_PascalExports_'}
 {$ENDIF}
@@ -66,14 +64,12 @@
     {$DEFINE SDL13}
 {$ENDIF}
 
-{$IFDEF PAS2C}
-    {$DEFINE NOCONSOLE}
-    {$DEFINE USE_SDLTHREADS}
-{$ENDIF}
 
+//TODO: cruft to be removed
 {$DEFINE _S:=}
 {$DEFINE _P:=}
 
+
 //{$DEFINE TRACEAIACTIONS}
 //{$DEFINE COUNTTICKS}
 
--- a/hedgewars/pas2c.h	Tue Mar 26 18:52:42 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-#pragma once
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <wchar.h>
-
-typedef union string255_
-    {
-        struct {
-            char s[256];
-        };
-        struct {
-            char len;
-            char str[255];
-        };
-    } string255;
-typedef struct string192_
-    {
-        char s[193];
-    } string192;
-typedef struct string31_
-    {
-        char s[32];
-    } string31;
-typedef struct string15_
-    {
-        char s[16];
-    } string15;
-
-typedef string255 shortstring;
-typedef string255 ansistring;
-    
-typedef uint8_t Byte;
-typedef int8_t ShortInt;
-typedef uint16_t Word;
-typedef int16_t SmallInt;
-typedef uint32_t LongWord;
-typedef int32_t LongInt;
-typedef uint64_t QWord;
-typedef int64_t Int64;
-typedef LongWord Cardinal;
-
-typedef LongInt Integer;
-typedef float extended;
-typedef float real;
-typedef float single;
-
-typedef bool boolean;
-typedef int LongBool;
-
-typedef void * pointer;
-typedef Byte * PByte;
-typedef char * PChar;
-typedef LongInt * PLongInt;
-typedef LongWord * PLongWord;
-typedef Integer * PInteger;
-typedef int PtrInt;
-typedef wchar_t widechar;
-
-#define new(a) __new((void **)&a, sizeof(*(a)))
-void __new(void ** p, int size);
-#define dispose(a) __dispose(a, sizeof(*(a)))
-void __dispose(pointer p, int size);
-
-void * GetMem(int size);
-void FreeMem(void * p, int size);
-
-#define FillChar(a, b, c) __FillChar(&(a), b, c)
-
-void __FillChar(pointer p, int size, char fill);
-string255 _strconcat(string255 a, string255 b);
-string255 _strappend(string255 s, char c);
-string255 _strprepend(char c, string255 s);
-string255 _chrconcat(char a, char b);
-bool _strcompare(string255 a, string255 b);
-bool _strcomparec(string255 a, char b);
-bool _strncompare(string255 a, string255 b);
-char * _pchar(string255 s);
-string255 pchar2str(char * s);
-
-int Length(string255 a);
-string255 copy(string255 a, int s, int l);
-string255 delete(string255 a, int s, int l);
-string255 trim(string255 a);
-
-#define STRINIT(a) {.len = sizeof(a) - 1, .str = a}
-
-
-int length_ar(void * a);
-
-typedef int file;
-typedef int TextFile;
-extern int FileMode;
-extern int IOResult;
-extern int stdout;
-extern int stderr;
-
-#define assign(a, b) assign_(&(a), b)
-void assign_(int * f, string255 fileName);
-void reset_1(int f, int size);
-void reset_2(int f, int size);
-#define BlockRead(a, b, c, d) BlockRead_(a, &(b), c, &(d))
-void BlockRead_(int f, void * p, int size, int * sizeRead);
-#define BlockWrite(a, b, c) BlockWrite_(a, &(b), c)
-void BlockWrite_(int f, void * p, int size);
-void close(int f);
-
-void write(int f, string255 s);
-void writeLn(int f, string255 s);
-
-bool DirectoryExists(string255 dir);
-bool FileExists(string255 filename);
-
-bool odd(int i);
-
-
-typedef int TThreadId;
-void ThreadSwitch();
-#define InterlockedIncrement(a) __InterlockedIncrement(&(a))
-#define InterlockedDecrement(a) __InterlockedDecrement(&(a))
-void __InterlockedIncrement(int * a);
-void __InterlockedDecrement(int * a);
-
-bool Assigned(void * a);
-
-void randomize();
-int random(int max);
-int abs(int i);
-double sqr(double n);
-double sqrt(double n);
-int trunc(double n);
-int round(double n);
-
-string255 ParamStr(int n);
-int ParamCount();
-
-#define val(a, b, c) _val(a, (LongInt*)&(b), (LongInt*)&(c))
-void _val(string255 str, LongInt * a, LongInt * c);
-
-extern double pi;
-
-string255 EnumToStr(int a);
-string255 ExtractFileName(string255 f);
--- a/hedgewars/pas2cSystem.pas	Tue Mar 26 18:52:42 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-system;
-
-type 
-    Integer = integer;
-    LongInt = integer;
-    LongWord = integer;
-    Cardinal = integer;
-    PtrInt = integer;
-    Word = integer;
-    Byte = integer;
-    SmallInt = integer;
-    ShortInt = integer;
-    QWord = integer;
-    GLint = integer;
-    GLuint = integer;
-    int = integer;
-    size_t = integer;
-
-    pointer = pointer;
-
-    float = float;
-    single = float;
-    double = float;
-    real = float;
-    extended = float;
-    GLfloat = float;
-
-    boolean = boolean;
-    LongBool = boolean;
-
-    string = string;
-    shortstring = string;
-    ansistring = string;
-    widechar = string;
-
-    char = char;
-    PChar = ^char;
-    PPChar = ^Pchar;
-    
-    PByte = ^Byte;
-    PWord = ^Word;
-    PLongInt = ^LongInt;
-    PLongWord = ^LongWord;
-    PInteger = ^Integer;
-    
-    Handle = integer;
-
-    png_structp = pointer;
-    png_size_t = integer;
-
-var 
-    false, true: boolean;
-    
-    write, writeLn, read, readLn: procedure;
-    
-    StrLen, ord, Succ, Pred : function : integer;
-    inc, dec, Low, High, Lo, Hi : function : integer;
-    odd, even : function : boolean;
-
-    Now : function : integer;
-
-    new, dispose, FillChar, Move : procedure;
-
-    trunc, round : function : integer;
-    abs, sqr : function : integer;
-
-    StrPas, FormatDateTime, copy, delete, str, pos, trim, LowerCase : function : shortstring;
-    Length, StrToInt : function : integer;
-    SetLength, val : procedure;
-    _pchar : function : PChar;
-    pchar2str : function : string;
-    memcpy : procedure;
-
-    assign, rewrite, reset, flush, BlockWrite, BlockRead, close : procedure;
-    IOResult : integer;
-    exit, break, halt, continue : procedure;
-    TextFile, file : Handle;
-    FileMode : integer;
-    FileExists, DirectoryExists, eof : function : boolean;
-    ExtractFileName : function : string;
-    exitcode : integer;
-    stdout, stderr : Handle;
-    
-    ParamCount : function : integer;
-    ParamStr : function : string;
-
-    sqrt, arctan2, cos, sin, power : function : float;
-    pi : float;
-
-    TypeInfo, GetEnumName : function : shortstring;
-
-    UTF8ToUnicode, WrapText: function : shortstring;
-
-    sizeof : function : integer;
-
-    GetMem : function : pointer;
-    FreeMem : procedure;
-   
-    glGetString : function : pchar;
- 
-    glBegin, glBindTexture, glBlendFunc, glClear, glClearColor,
-    glColor4ub, glColorMask, glColorPointer, glDeleteTextures,
-    glDisable, glDisableClientState, glDrawArrays, glEnable,
-    glEnableClientState, glEnd, glGenTextures, glGetIntegerv,
-    glHint, glLineWidth, glLoadIdentity, glMatrixMode, glPopMatrix,
-    glPushMatrix, glReadPixels, glRotatef, glScalef, glTexCoord2f,
-    glTexCoordPointer, glTexImage2D, glTexParameterf,
-    glTexParameteri, glTranslatef, glVertex2d, glVertexPointer,
-    glViewport, glext_LoadExtension, glDeleteRenderbuffersEXT,
-    glDeleteFramebuffersEXT, glGenFramebuffersEXT,
-    glGenRenderbuffersEXT, glBindFramebufferEXT, 
-    glBindRenderbufferEXT, glRenderbufferStorageEXT,
-    glFramebufferRenderbufferEXT, glFramebufferTexture2DEXT : procedure;
-
-    GL_BGRA, GL_BLEND, GL_CLAMP_TO_EDGE, GL_COLOR_ARRAY,
-    GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_DEPTH_COMPONENT,
-    GL_DITHER, GL_EXTENSIONS, GL_FALSE, GL_FASTEST, GL_LINEAR,
-    GL_LINE_LOOP, GL_LINES, GL_LINE_SMOOTH, GL_LINE_STRIP,
-    GL_MAX_TEXTURE_SIZE, GL_MODELVIEW, GL_ONE_MINUS_SRC_ALPHA,
-    GL_PERSPECTIVE_CORRECTION_HINT, GL_PROJECTION, GL_QUADS,
-    GL_RENDERER, GL_RGBA, GL_RGBA8, GL_SRC_ALPHA, GL_TEXTURE_2D,
-    GL_TEXTURE_COORD_ARRAY, GL_TEXTURE_MAG_FILTER,
-    GL_TEXTURE_MIN_FILTER, GL_TEXTURE_PRIORITY, GL_TEXTURE_WRAP_S,
-    GL_TEXTURE_WRAP_T, GL_TRIANGLE_FAN, GL_TRUE, GL_VENDOR,
-    GL_VERSION, GL_VERTEX_ARRAY, GLenum,  GL_FRAMEBUFFER_EXT,
-    GL_RENDERBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
-    GL_COLOR_ATTACHMENT0_EXT, GL_FLOAT, GL_UNSIGNED_BYTE : integer;
-
-    TThreadId : function : integer;
-    BeginThread, ThreadSwitch : procedure;
-    InterlockedIncrement, InterlockedDecrement : procedure;
-    
-    random : function : integer;
-    randomize : procedure;
-    
-    Assigned : function : boolean;
-    
-    _strconcat, _strappend, _strprepend, _chrconcat : function : string;
-    _strcompare, _strncompare, _strcomparec : function : boolean;
-
-    png_structp, png_set_write_fn, png_get_io_ptr,
-    png_get_libpng_ver, png_create_write_struct,
-    png_create_info_struct, png_destroy_write_struct,
-    png_write_row, png_set_ihdr, png_write_info,
-    png_write_end : procedure;
-
-    EnumToStr : function : string;
-
--- a/hedgewars/uAI.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uAI.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -30,31 +30,21 @@
 
 implementation
 uses uConsts, SDLh, uAIMisc, uAIAmmoTests, uAIActions,
-    uAmmos, SysUtils{$IFNDEF USE_SDLTHREADS} {$IFDEF UNIX}, cthreads{$ENDIF} {$ENDIF}, uTypes,
+    uAmmos, SysUtils, uTypes,
     uVariables, uCommands, uUtils, uDebug, uAILandMarks;
 
 var BestActions: TActions;
     CanUseAmmo: array [TAmmoType] of boolean;
     StopThinking: boolean;
-{$IFDEF USE_SDLTHREADS} 
     ThinkThread: PSDL_Thread = nil;
-{$ELSE}
-    ThinkThread: TThreadID;
-{$ENDIF}
-    hasThread: LongInt;
     StartTicks: Longword;
 
 procedure FreeActionsList;
 begin
     AddFileLog('FreeActionsList called');
-    if hasThread <> 0 then
-    begin
-        AddFileLog('Waiting AI thread to finish');
-        StopThinking:= true;
-        repeat
-            SDL_Delay(10)
-        until hasThread = 0
-    end;
+    if (ThinkThread <> nil) then
+        SDL_WaitThread(ThinkThread, nil);
+    ThinkThread:=nil;
 
     with CurrentHedgehog^ do
         if Gear <> nil then
@@ -66,7 +56,6 @@
 end;
 
 
-
 const cBranchStackSize = 12;
 type TStackEntry = record
                    WastedTicks: Longword;
@@ -123,15 +112,11 @@
         with Me^.Hedgehog^ do
             a:= CurAmmoType;
         aa:= a;
-{$IFDEF USE_SDLTHREADS}
-        SDL_delay(0);    //ThreadSwitch was only a hint
-{$ELSE}
-        ThreadSwitch();
-{$ENDIF}       
+        SDL_delay(0); // hint to let the context switch run
         repeat
-        if (CanUseAmmo[a]) 
-            and ((not rareChecks) or ((AmmoTests[a].flags and amtest_Rare) = 0)) 
-            and ((i = 0) or ((AmmoTests[a].flags and amtest_NoTarget) = 0)) 
+        if (CanUseAmmo[a])
+            and ((not rareChecks) or ((AmmoTests[a].flags and amtest_Rare) = 0))
+            and ((i = 0) or ((AmmoTests[a].flags and amtest_NoTarget) = 0))
             then
             begin
 {$HINTS OFF}
@@ -150,10 +135,10 @@
                         AddAction(BestActions, aia_LookRight, 0, 200, 0, 0)
                     else if (ap.Angle < 0) then
                         AddAction(BestActions, aia_LookLeft, 0, 200, 0, 0);
-                    
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_Timerable) <> 0 then
                         AddAction(BestActions, aia_Timer, ap.Time div 1000, 400, 0, 0);
-                        
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_NoCrosshair) = 0 then
                         begin
                         dAngle:= LongInt(Me^.Angle) - Abs(ap.Angle);
@@ -168,23 +153,23 @@
                             AddAction(BestActions, aia_Down, aim_release, -dAngle, 0, 0)
                             end
                         end;
-                        
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_NeedTarget) <> 0 then
                         begin
                         AddAction(BestActions, aia_Put, 0, 1, ap.AttackPutX, ap.AttackPutY)
                         end;
-                        
+
                     if (Ammoz[a].Ammo.Propz and ammoprop_OscAim) <> 0 then
                         begin
                         AddAction(BestActions, aia_attack, aim_push, 350 + random(200), 0, 0);
                         AddAction(BestActions, aia_attack, aim_release, 1, 0, 0);
-                         
+
                         if abs(ap.Angle) > 32 then
                            begin
                            AddAction(BestActions, aia_Down, aim_push, 100 + random(150), 0, 0);
                            AddAction(BestActions, aia_Down, aim_release, 32, 0, 0);
                            end;
-                        
+
                         AddAction(BestActions, aia_waitAngle, ap.Angle, 250, 0, 0);
                         AddAction(BestActions, aia_attack, aim_push, 1, 0, 0);
                         AddAction(BestActions, aia_attack, aim_release, 1, 0, 0);
@@ -243,21 +228,21 @@
 
 if (Me^.State and gstAttacked) = 0 then
     TestAmmos(Actions, Me, false);
-    
+
 BestRate:= RatePlace(Me);
 BaseRate:= Max(BestRate, 0);
 
-// switch to 'skip' if we can't move because of mouse cursor being shown
+// switch to 'skip' if we cannot move because of mouse cursor being shown
 if (Ammoz[Me^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) <> 0 then
     AddAction(Actions, aia_Weapon, Longword(amSkip), 100 + random(200), 0, 0);
-    
-if ((CurrentHedgehog^.MultiShootAttacks = 0) or ((Ammoz[Me^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoMoveAfter) = 0)) 
+
+if ((CurrentHedgehog^.MultiShootAttacks = 0) or ((Ammoz[Me^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoMoveAfter) = 0))
     and (GameFlags and gfArtillery = 0) then
     begin
     tmp:= random(2) + 1;
     Push(0, Actions, Me^, tmp);
     Push(0, Actions, Me^, tmp xor 3);
-    
+
     while (Stack.Count > 0) and (not StopThinking) do
         begin
         Pop(ticks, Actions, Me^);
@@ -267,7 +252,7 @@
             AddAction(Actions, aia_WaitXL, hwRound(Me^.X), 0, 0, 0)
         else
             AddAction(Actions, aia_WaitXR, hwRound(Me^.X), 0, 0, 0);
-        
+
         steps:= 0;
 
         while (not StopThinking) do
@@ -280,8 +265,8 @@
             if ticks > maxticks then
                 break;
 
-            if (BotLevel < 5) 
-                and (GoInfo.JumpType = jmpHJump) 
+            if (BotLevel < 5)
+                and (GoInfo.JumpType = jmpHJump)
                 and (not checkMark(hwRound(Me^.X), hwRound(Me^.Y), markHJumped))
                 then // hjump support
                 begin
@@ -295,7 +280,7 @@
                             AddAction(MadeActions, aia_LookRight, 0, 200, 0, 0)
                         else
                             AddAction(MadeActions, aia_LookLeft, 0, 200, 0, 0);
-                            
+
                         AddAction(MadeActions, aia_HJump, 0, 305 + random(50), 0, 0);
                         AddAction(MadeActions, aia_HJump, 0, 350, 0, 0);
                         end;
@@ -303,8 +288,8 @@
                     Push(ticks, Stack.States[Pred(Stack.Count)].MadeActions, AltMe, Me^.Message)
                     end;
                 end;
-            if (BotLevel < 3) 
-                and (GoInfo.JumpType = jmpLJump) 
+            if (BotLevel < 3)
+                and (GoInfo.JumpType = jmpLJump)
                 and (not checkMark(hwRound(Me^.X), hwRound(Me^.Y), markLJumped))
                 then // ljump support
                 begin
@@ -323,7 +308,7 @@
 
                 // push current position so we proceed from it after checking jump+forward walk opportunities
                 if CanGo then Push(ticks, Actions, Me^, Me^.Message);
-                
+
                 // first check where we go after jump walking forward
                 if Push(ticks, Actions, AltMe, Me^.Message) then
                     with Stack.States[Pred(Stack.Count)] do
@@ -331,10 +316,10 @@
                 break
                 end;
 
-            // 'not CanGO' means we can't go straight, possible jumps are checked above
+            // 'not CanGO' means we cannot go straight, possible jumps are checked above
             if not CanGo then
                 break;
-            
+
              inc(steps);
              Actions.actions[Pred(Actions.Count)].Param:= hwRound(Me^.X);
              Rate:= RatePlace(Me);
@@ -347,17 +332,17 @@
                 end
             else if Rate < BestRate then
                 break;
-                
+
             if ((Me^.State and gstAttacked) = 0) and ((steps mod 4) = 0) then
                 begin
                 if (steps > 4) and checkMark(hwRound(Me^.X), hwRound(Me^.Y), markWalkedHere) then
-                    break;                    
+                    break;
                 addMark(hwRound(Me^.X), hwRound(Me^.Y), markWalkedHere);
 
                 TestAmmos(Actions, Me, ticks shr 12 = oldticks shr 12);
-                
+
                 end;
-                
+
             if GoInfo.FallPix >= FallPixForBranching then
                 Push(ticks, Actions, Me^, Me^.Message xor 3); // aia_Left xor 3 = aia_Right
             end {while};
@@ -368,25 +353,26 @@
     end {if}
 end;
 
-function Think(Me: Pointer): ptrint;
+function Think(Me: PGear): LongInt; cdecl; export;
 var BackMe, WalkMe: TGear;
     switchCount: LongInt;
     StartTicks, currHedgehogIndex, itHedgehog, switchesNum, i: Longword;
     switchImmediatelyAvailable: boolean;
     Actions: TActions;
 begin
-InterlockedIncrement(hasThread);
+AddFileLog('Thread started');
+dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 StartTicks:= GameTicks;
 currHedgehogIndex:= CurrentTeam^.CurrHedgehog;
 itHedgehog:= currHedgehogIndex;
 switchesNum:= 0;
 
 switchImmediatelyAvailable:= (CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtSwitcher);
-if PGear(Me)^.Hedgehog^.BotLevel <> 5 then
+if Me^.Hedgehog^.BotLevel <> 5 then
     switchCount:= HHHasAmmo(PGear(Me)^.Hedgehog^, amSwitch)
 else switchCount:= 0;
 
-if (PGear(Me)^.State and gstAttacked) = 0 then
+if (Me^.State and gstAttacked) = 0 then
     if Targets.Count > 0 then
         begin
         // iterate over current team hedgehogs
@@ -402,7 +388,7 @@
                     begin
                     // when AI has to use switcher, make it cost smth unless they have a lot of switches
                     if (switchCount < 10) then Actions.Score:= (-27+switchCount*3)*4000;
-                    AddAction(Actions, aia_Weapon, Longword(amSwitch), 300 + random(200), 0, 0);                    
+                    AddAction(Actions, aia_Weapon, Longword(amSwitch), 300 + random(200), 0, 0);
                     AddAction(Actions, aia_attack, aim_push, 300 + random(300), 0, 0);
                     AddAction(Actions, aia_attack, aim_release, 1, 0, 0);
                     end;
@@ -416,10 +402,9 @@
                 itHedgehog:= Succ(itHedgehog) mod CurrentTeam^.HedgehogsNumber;
             until (itHedgehog = currHedgehogIndex) or ((CurrentTeam^.Hedgehogs[itHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[itHedgehog].Effects[heFrozen]=0));
 
-
             inc(switchesNum);
         until (not (switchImmediatelyAvailable or (switchCount > 0)))
-            or StopThinking 
+            or StopThinking
             or (itHedgehog = currHedgehogIndex)
             or BestActions.isWalkingToABetterPlace;
 
@@ -435,7 +420,7 @@
         end else SDL_Delay(100)
 else
     begin
-    BackMe:= PGear(Me)^;
+    BackMe:= Me^;
     while (not StopThinking) and (BestActions.Count = 0) do
         begin
 (*
@@ -454,9 +439,9 @@
         end
     end;
 
-PGear(Me)^.State:= PGear(Me)^.State and (not gstHHThinking);
+Me^.State:= Me^.State and (not gstHHThinking);
+ThinkThread:= nil;
 Think:= 0;
-InterlockedDecrement(hasThread)
 end;
 
 procedure StartThink(Me: PGear);
@@ -487,12 +472,7 @@
 
 FillBonuses((Me^.State and gstAttacked) <> 0);
 AddFileLog('Enter Think Thread');
-{$IFDEF USE_SDLTHREADS}
-ThinkThread := SDL_CreateThread(@Think{$IFDEF SDL13}, nil{$ENDIF}, Me);
-{$ELSE}
-BeginThread(@Think, Me, ThinkThread);
-{$ENDIF}
-AddFileLog('Thread started');
+ThinkThread:= SDL_CreateThread(@Think{$IFDEF SDL13}, 'think'{$ENDIF}, Me);
 end;
 
 //var scoreShown: boolean = false;
@@ -513,14 +493,14 @@
                     StopMessages(Gear^.Message);
                     TryDo((Gear^.Message and gmAllStoppable) = 0, 'Engine bug: AI may break demos playing', true);
                     end;
-                    
+
                 if Gear^.Message <> 0 then
                     exit;
-                    
-                //scoreShown:= false;   
+
+                //scoreShown:= false;
                 StartThink(Gear);
                 StartTicks:= GameTicks
-                
+
             end else
                 begin
                 {if not scoreShown then
@@ -537,13 +517,15 @@
 
 procedure initModule;
 begin
-    hasThread:= 0;
     StartTicks:= 0;
-    ThinkThread:= ThinkThread;
+    ThinkThread:= nil;
 end;
 
 procedure freeModule;
 begin
+    if (ThinkThread <> nil) then
+        SDL_KillThread(ThinkThread);
+    ThinkThread:= nil;
     FreeActionsList();
 end;
 
--- a/hedgewars/uAIAmmoTests.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uAIAmmoTests.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -197,7 +197,11 @@
     x, y, dX, dY: real;
     t: LongInt;
     value: LongInt;
+    t2: real;
+    timer: Longint;
 begin
+    if (Level > 3) then exit(BadTurn);
+
     mX:= hwFloat2Float(Me^.X);
     mY:= hwFloat2Float(Me^.Y);
     ap.Time:= 0;
@@ -224,14 +228,32 @@
                 dec(t)
             until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or 
                    ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me, trunc(x), trunc(y), 5))) or (y > cWaterLine);
-            
+
+            if TestCollWithLand(trunc(x), trunc(y), 5) and (Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) > 21) then
+                begin
+                timer := 500;
+                t2 := 0.5 / sqrt(sqr(dX) + sqr(dY));
+                dX := dX * t2;
+                dY := dY * t2;
+                repeat
+                    x:= x + dX;
+                    y:= y + dY;
+                    dec(timer);
+                until (Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) < 22)
+                    or (x < 0)
+                    or (y < 0)
+                    or (trunc(x) > LAND_WIDTH)
+                    or (trunc(y) > LAND_HEIGHT)
+                    or not TestCollWithLand(trunc(x), trunc(y), 5)
+                    or (timer = 0)
+                end;
             EX:= trunc(x);
             EY:= trunc(y);
+            // Try to prevent AI from thinking firing into water will cause a drowning
+            if (EY < cWaterLine-5) and (Timer > 0) and (Abs(Targ.X - trunc(x)) + Abs(Targ.Y - trunc(y)) > 21) then exit(BadTurn);
             if Level = 1 then
                 value:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand)
             else value:= RateExplosion(Me, EX, EY, 101);
-            if value = 0 then
-                value:= 1024 - Metric(Targ.X, Targ.Y, EX, EY) div 64;
             if valueResult <= value then
                 begin
                 ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9));
@@ -239,7 +261,7 @@
                 ap.ExplR:= 100;
                 ap.ExplX:= EX;
                 ap.ExplY:= EY;
-                valueResult:= value
+                valueResult:= value-2500 // trying to make it slightly less attractive than a bazooka, to prevent waste.  AI could use awareness of weapon count
                 end;
             end
     until rTime > 4250;
--- a/hedgewars/uAIMisc.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uAIMisc.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -64,6 +64,7 @@
 function  TestCollExcludingObjects(x, y, r: LongInt): boolean; inline;
 function  TestCollExcludingMe(Me: PGear; x, y, r: LongInt): boolean; inline;
 function  TraceShoveFall(x, y, dX, dY: Real): LongInt;
+function  TestCollWithLand(x, y, r: LongInt): boolean; inline;
 
 function  RateExplosion(Me: PGear; x, y, r: LongInt): LongInt; inline;
 function  RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt;
@@ -89,6 +90,7 @@
 
 const KillScore = 200;
 var friendlyfactor: LongInt = 300;
+var dmgMod: real = 1.0;
 
 implementation
 uses uCollisions, uVariables, uUtils, uLandTexture, uGearsUtils;
@@ -255,6 +257,72 @@
     RatePlace:= rate;
 end;
 
+function CheckBounds(x, y, r: Longint): boolean; inline;
+begin
+    CheckBounds := (((x-r) and LAND_WIDTH_MASK) = 0) and
+        (((x+r) and LAND_WIDTH_MASK) = 0) and
+        (((y-r) and LAND_HEIGHT_MASK) = 0) and
+        (((y+r) and LAND_HEIGHT_MASK) = 0);
+end;
+
+
+function TestCollWithEverything(x, y, r: LongInt): boolean; inline;
+begin
+    if not CheckBounds(x, y, r) then
+        exit(false);
+
+    if (Land[y-r, x-r] <> 0) or    
+       (Land[y+r, x-r] <> 0) or 
+       (Land[y-r, x+r] <> 0) or
+       (Land[y+r, x+r] <> 0) then
+       exit(true);
+
+    TestCollWithEverything := false;
+end;
+
+function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline;
+begin
+    if not CheckBounds(x, y, r) then
+        exit(false);
+
+    if (Land[y-r, x-r] > lfAllObjMask) or
+       (Land[y+r, x-r] > lfAllObjMask) or 
+       (Land[y-r, x+r] > lfAllObjMask) or
+       (Land[y+r, x+r] > lfAllObjMask) then
+       exit(true);
+
+    TestCollExcludingObjects:= false;
+end;
+
+function TestColl(x, y, r: LongInt): boolean; inline;
+begin
+    if not CheckBounds(x, y, r) then
+        exit(false);
+
+    if (Land[y-r, x-r] and lfNotCurrentMask <> 0) or
+       (Land[y+r, x-r] and lfNotCurrentMask <> 0) or 
+       (Land[y-r, x+r] and lfNotCurrentMask <> 0) or
+       (Land[y+r, x+r] and lfNotCurrentMask <> 0) then
+       exit(true);
+    
+    TestColl:= false;
+end;
+
+function TestCollWithLand(x, y, r: LongInt): boolean; inline;
+begin
+    if not CheckBounds(x, y, r) then
+        exit(false);
+
+    if (Land[y-r, x-r] > lfAllObjMask) or
+       (Land[y+r, x-r] > lfAllObjMask) or 
+       (Land[y-r, x+r] > lfAllObjMask) or
+       (Land[y+r, x+r] > lfAllObjMask) then
+       exit(true);
+    
+    TestCollWithLand:= false;
+end;
+
+
 // Wrapper to test various approaches.  If it works reasonably, will just replace.
 // Right now, converting to hwFloat is a tad inefficient since the x/y were hwFloat to begin with...
 function TestCollExcludingMe(Me: PGear; x, y, r: LongInt): boolean; inline;
@@ -265,77 +333,13 @@
         MeX:= hwRound(Me^.X);
         MeY:= hwRound(Me^.Y);
         // We are still inside the hog. Skip radius test
-        if ((((x-MeX)*(x-MeX)) + ((y-MeY)*(y-MeY))) < 256) and (Land[y, x] <= lfAllObjMask) then
+        if ((sqr(x-MeX) + sqr(y-MeY)) < 256) and (Land[y, x] and lfObjMask = 0) then
             exit(false);
     end;
-    TestCollExcludingMe:= TestColl(x, y, r)
-end;
-
-function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline;
-var b: boolean;
-begin
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] > lfAllObjMask);
-    if b then
-        exit(true);
-    
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] > lfAllObjMask);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] > lfAllObjMask);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] > lfAllObjMask);
-    if b then
-        exit(true);
-    
-    TestCollExcludingObjects:= false;
+    TestCollExcludingMe:= TestCollWithEverything(x, y, r)
 end;
 
-function TestColl(x, y, r: LongInt): boolean; inline;
-var b: boolean;
-begin
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] and lfNotCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] and lfNotCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] and lfNotCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] and lfNotCurrentMask <> 0);
-    if b then
-        exit(true);
-    
-    TestColl:= false;
-end;
 
-function TestCollWithLand(x, y, r: LongInt): boolean; inline;
-var b: boolean;
-begin
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] > lfAllObjMask);
-    if b then
-        exit(true);
-        
-    b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] > lfAllObjMask);
-    if b then
-        exit(true);
-        
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] > lfAllObjMask);
-    if b then
-        exit(true);
-        
-    b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] > lfAllObjMask);
-    if b then
-        exit(true);
-
-    TestCollWithLand:= false;
-end;
 
 function TraceFall(eX, eY: LongInt; x, y, dX, dY: Real; r: LongWord): LongInt;
 var skipLandCheck: boolean;
@@ -409,11 +413,10 @@
 
 function RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt;
 var i, fallDmg, dmg, dmgBase, rate, erasure: LongInt;
-    dX, dY, dmgMod: real;
+    dX, dY: real;
     hadSkips: boolean;
 begin
 fallDmg:= 0;
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 rate:= 0;
 // add our virtual position
 with Targets.ar[Targets.Count] do
@@ -477,12 +480,11 @@
 
 function RateShove(x, y, r, power, kick: LongInt; gdX, gdY: real; Flags: LongWord): LongInt;
 var i, fallDmg, dmg, rate: LongInt;
-    dX, dY, dmgMod: real;
+    dX, dY: real;
 begin
 fallDmg:= 0;
 dX:= gdX * 0.01 * kick;
 dY:= gdY * 0.01 * kick;
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 rate:= 0;
 for i:= 0 to Pred(Targets.Count) do
     with Targets.ar[i] do
@@ -521,10 +523,9 @@
 
 function RateShotgun(Me: PGear; gdX, gdY: real; x, y: LongInt): LongInt;
 var i, dmg, fallDmg, baseDmg, rate, erasure: LongInt;
-    dX, dY, dmgMod: real;
+    dX, dY: real;
     hadSkips: boolean;
 begin
-dmgMod:= 0.01 * hwFloat2Float(cDamageModifier) * cDamagePercent;
 rate:= 0;
 gdX:= gdX * 0.01;
 gdY:= gdX * 0.01;
--- a/hedgewars/uConsts.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uConsts.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -115,13 +115,11 @@
     MAXNAMELEN = 192;
     MAXROPEPOINTS = 3840;
 
-    {$IFNDEF PAS2C}
     // some opengl headers do not have these macros
     GL_BGR              = $80E0;
     GL_BGRA             = $80E1;
     GL_CLAMP_TO_EDGE    = $812F;
     GL_TEXTURE_PRIORITY = $8066;
-    {$ENDIF}
 
     cVisibleWater       : LongInt = 128;
     cTeamHealthWidth    : LongInt = 128;
--- a/hedgewars/uFloat.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uFloat.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -63,9 +63,7 @@
 // The implemented operators
 
 operator = (const z1, z2: hwFloat) z : boolean; inline;
-{$IFDEF PAS2C}
-operator <> (const z1, z2: hwFloat) z : boolean; inline;
-{$ENDIF}
+
 operator + (const z1, z2: hwFloat) z : hwFloat; inline;
 operator - (const z1, z2: hwFloat) z : hwFloat; inline;
 operator - (const z1: hwFloat) z : hwFloat; inline;
@@ -221,19 +219,11 @@
     hwFloat2Float:= -hwFloat2Float;
 end;
 
-{$IFNDEF WEB}
 operator = (const z1, z2: hwFloat) z : boolean; inline;
 begin
     z:= (z1.isNegative = z2.isNegative) and (z1.QWordValue = z2.QWordValue);
 end;
 
-{$IFDEF PAS2C}
-operator <> (const z1, z2: hwFloat) z : boolean; inline;
-begin
-    z:= (z1.isNegative <> z2.isNegative) or (z1.QWordValue <> z2.QWordValue);
-end;
-{$ENDIF}
-
 operator + (const z1, z2: hwFloat) z : hwFloat; inline;
 begin
 if z1.isNegative = z2.isNegative then
@@ -300,102 +290,6 @@
     else
         b:= (z1.QWordValue > z2.QWordValue) <> z2.isNegative
 end;
-{$ENDIF}
-{$IFDEF WEB}
-(*
-    Mostly to be kind to JS as of 2012-08-27 where there is no int64/uint64.  This may change though.
-*)
-operator = (const z1, z2: hwFloat) z : boolean; inline;
-begin
-    z:= (z1.isNegative = z2.isNegative) and (z1.Frac = z2.Frac) and (z1.Round = z2.Round);
-end;
-
-operator <> (const z1, z2: hwFloat) z : boolean; inline;
-begin
-    z:= (z1.isNegative <> z2.isNegative) or (z1.Frac <> z2.Frac) or (z1.Round <> z2.Round);
-end;
-
-operator + (const z1, z2: hwFloat) z : hwFloat; inline;
-begin
-if z1.isNegative = z2.isNegative then
-    begin
-    z:= z1;
-    z.Frac:= z.Frac + z2.Frac;
-    z.Round:= z.Round + z2.Round;
-    if z.Frac<z1.Frac then inc(z.Round)
-    end
-else
-    if (z1.Round > z2.Round) or ((z1.Round = z2.Round) and (z1.Frac > z2.Frac)) then
-        begin
-        z.isNegative:= z1.isNegative;
-        z.Round:= z1.Round - z2.Round;
-        z.Frac:= z1.Frac - z2.Frac;
-        if z2.Frac > z1.Frac then dec(z.Round)
-        end
-    else
-        begin
-        z.isNegative:= z2.isNegative;
-        z.Round:= z2.Round - z1.Round;
-        z.Frac:= z2.Frac-z1.Frac;
-        if z2.Frac < z1.Frac then dec(z.Round)
-        end
-end;
-
-operator - (const z1, z2: hwFloat) z : hwFloat; inline;
-begin
-if z1.isNegative = z2.isNegative then
-    if (z1.Round > z2.Round) or ((z1.Round = z2.Round) and (z1.Frac > z2.Frac)) then
-        begin
-        z.isNegative:= z1.isNegative;
-        z.Round:= z1.Round - z2.Round;
-        z.Frac:= z1.Frac-z2.Frac;
-        if z2.Frac > z1.Frac then dec(z.Round)
-        end
-    else
-        begin
-        z.isNegative:= not z2.isNegative;
-        z.Round:= z2.Round - z1.Round;
-        z.Frac:= z2.Frac-z1.Frac;
-        if z2.Frac < z1.Frac then dec(z.Round)
-        end
-else
-    begin
-    z:= z1;
-    z.Frac:= z.Frac + z2.Frac;
-    z.Round:= z.Round + z2.Round;
-    if z.Frac<z1.Frac then inc(z.Round)
-    end
-end;
-
-operator < (const z1, z2: hwFloat) b : boolean; inline;
-begin
-if z1.isNegative xor z2.isNegative then
-    b:= z1.isNegative
-else
-(*  Not so sure this specialcase is a win w/ Round/Frac. have to do more tests anyway.
-    if (z1.Round = z2.Round and (z1.Frac = z2.Frac)) then
-        b:= false
-    else *)
-        b:= ((z1.Round < z2.Round) or ((z1.Round = z2.Round) and (z1.Frac < z2.Frac))) <> z1.isNegative
-end;
-
-operator > (const z1, z2: hwFloat) b : boolean; inline;
-begin
-if z1.isNegative xor z2.isNegative then
-    b:= z2.isNegative
-else
-(*
-    if z1.QWordValue = z2.QWordValue then
-        b:= false
-    else*)
-        b:= ((z1.Round > z2.Round) or ((z1.Round = z2.Round) and (z1.Frac > z2.Frac))) <> z1.isNegative
-end;
-
-function isZero(const z: hwFloat): boolean; inline; 
-begin
-isZero := (z.Round = 0) and (z.Frac = 0);
-end;
-{$ENDIF}
 
 operator - (const z1: hwFloat) z : hwFloat; inline;
 begin
--- a/hedgewars/uGearsHedgehog.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uGearsHedgehog.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -23,18 +23,18 @@
 uses uTypes;
 
 procedure doStepHedgehog(Gear: PGear);
-procedure AfterAttack; 
-procedure HedgehogStep(Gear: PGear); 
-procedure doStepHedgehogMoving(Gear: PGear); 
-procedure HedgehogChAngle(HHGear: PGear); 
+procedure AfterAttack;
+procedure HedgehogStep(Gear: PGear);
+procedure doStepHedgehogMoving(Gear: PGear);
+procedure HedgehogChAngle(HHGear: PGear);
 procedure PickUp(HH, Gear: PGear);
 procedure AddPickup(HH: THedgehog; ammo: TAmmoType; cnt, X, Y: LongWord);
 procedure CheckIce(Gear: PGear); inline;
 
 implementation
-uses uConsts, uVariables, uFloat, uAmmos, uSound, uCaptions, 
+uses uConsts, uVariables, uFloat, uAmmos, uSound, uCaptions,
     uCommands, uLocale, uUtils, uVisualGears, uStats, uIO, uScript,
-    uGearsList, uGears, uCollisions, uRandom, uStore, uTeams, 
+    uGearsList, uGears, uCollisions, uRandom, uStore, uTeams,
     uGearsUtils;
 
 var GHStepTicks: LongWord = 0;
@@ -75,7 +75,7 @@
 
     MultiShootAttacks:= 0;
     HHGear^.Message:= HHGear^.Message and (not (gmLJump or gmHJump));
-    
+
     if Ammoz[CurAmmoType].Slot = slot then
         begin
         i:= 0;
@@ -90,8 +90,8 @@
             end;
         until (i = 1) or ((Ammo^[slot, ammoidx].Count > 0)
         and (Team^.Clan^.TurnNumber > Ammoz[Ammo^[slot, ammoidx].AmmoType].SkipTurns))
-        
-        end 
+
+        end
     else
         begin
         i:= 0;
@@ -114,7 +114,7 @@
             LoadHedgehogHat(HHGear^.Hedgehog^, Hat);
         end;
     // Try again in the next slot
-    if CurAmmoType = prevAmmo then 
+    if CurAmmoType = prevAmmo then
         begin
         if slot >= cMaxSlotIndex then slot:= 0 else inc(slot);
         HHGear^.MsgParam:= slot;
@@ -213,7 +213,7 @@
         if ((State and gstHHDriven) <> 0) and ((State and (gstAttacked or gstHHChooseTarget)) = 0) and (((State and gstMoving) = 0)
         or (Power > 0)
         or (CurAmmoType = amTeleport)
-        or 
+        or
         // Allow attacks while moving on ammo with AltAttack
         ((CurAmmoGear <> nil) and ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0))
         or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AttackInMove) <> 0))
@@ -257,7 +257,7 @@
             and ((Gear^.Message and gmLJump) <> 0)
             and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) then
                 begin
-                newDx:= dX; 
+                newDx:= dX;
                 newDy:= dY;
                 altUse:= true
                 end
@@ -285,15 +285,15 @@
                          amRope: newGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0);
                          amMine: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000);
                         amSMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
-                        amKnife: begin 
+                        amKnife: begin
                                  newGear:= AddGear(hwRound(lx), hwRound(ly), gtKnife,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
-                                 newGear^.State:= newGear^.State or gstMoving; 
+                                 newGear^.State:= newGear^.State or gstMoving;
                                  newGear^.Radius:= 4 // temporarily shrink so it doesn't instantly embed in the ground
                                  end;
                        amDEagle: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0);
                       amSineGun: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0);
                     amPortalGun: begin
-                                 newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, 
+                                 newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6,
                                  // set selected color
                                  CurWeapon^.Pos);
                                  end;
@@ -353,7 +353,7 @@
                                  cGravity:= cMaxWindSpeed;
                                  cGravityf:= 0.00025
                                  end;
-                  amExtraDamage: begin 
+                  amExtraDamage: begin
                                  PlaySound(sndHellishImpact4);
                                  cDamageModifier:= _1_5
                                  end;
@@ -383,21 +383,18 @@
                                  end;
                     //amStructure: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtStructure, gstWait, SignAs(_0_02, dX), _0, 3000);
                        amTardis: newGear:= AddGear(hwRound(X), hwRound(Y), gtTardis, 0, _0, _0, 5000);
-                       amIceGun: begin
-                       newGear:= AddGear(hwRound(X), hwRound(Y), gtIceGun, 0, _0, _0, 0);
-                       newGear^.radius := 8;
-                       end;
+                       amIceGun: newGear:= AddGear(hwRound(X), hwRound(Y), gtIceGun, 0, _0, _0, 0);
             end;
             if altUse and (newGear <> nil) then
                begin
                newGear^.dX:= newDx / newGear^.Density;
                newGear^.dY:= newDY / newGear^.Density
                end;
-             
+
             case CurAmmoType of
-                     amGrenade, amMolotov, 
-                 amClusterBomb, amGasBomb, 
-                     amBazooka, amSnowball, 
+                     amGrenade, amMolotov,
+                 amClusterBomb, amGasBomb,
+                     amBazooka, amSnowball,
                          amBee, amSMine,
                       amMortar, amWatermelon,
                  amHellishBomb, amDrill: FollowGear:= newGear;
@@ -418,7 +415,7 @@
                       amTardis, amPiano,
                       amIceGun: CurAmmoGear:= newGear;
             end;
-             
+
             if ((CurAmmoType = amMine) or (CurAmmoType = amSMine)) and (GameFlags and gfInfAttack <> 0) then
                 newGear^.FlightTime:= GameTicks + 1000
             else if CurAmmoType = amDrill then
@@ -442,7 +439,7 @@
                     newGear^.Elasticity:= newGear^.Elasticity * elastic
                 else if elastic > _1 then
                     newGear^.Elasticity:= _1 - ((_1-newGear^.Elasticity) / elastic);
-    (* Experimented with friction modifier. Didn't seem helpful 
+    (* Experimented with friction modifier. Didn't seem helpful
                 fric:= int2hwfloat(CurWeapon^.Bounciness) / _250;
                 if fric < _1 then newGear^.Friction:= newGear^.Friction * fric
                 else if fric > _1 then newGear^.Friction:= _1 - ((_1-newGear^.Friction) / fric)*)
@@ -478,7 +475,7 @@
                 AfterAttack;
                 end
             end
-        else 
+        else
             Message:= Message and (not gmAttack);
     end;
     TargetPoint.X := NoPointX;
@@ -498,13 +495,13 @@
     if (Ammoz[a].Ammo.Propz and ammoprop_Effect) = 0 then
         begin
         Inc(MultiShootAttacks);
-        
+
         if (Ammoz[a].Ammo.NumPerTurn >= MultiShootAttacks) then
             begin
             s:= inttostr(Ammoz[a].Ammo.NumPerTurn - MultiShootAttacks + 1);
             AddCaption(format(trmsg[sidRemaining], s), cWhiteColor, capgrpAmmostate);
             end;
-        
+
         if (Ammoz[a].Ammo.NumPerTurn >= MultiShootAttacks)
         or ((GameFlags and gfMultiWeapon) <> 0) then
             begin
@@ -519,7 +516,7 @@
                     TagTurnTimeLeft:= TurnTimeLeft;
                 TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 100;
                 end;
-            if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (HHGear <> nil) then 
+            if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (HHGear <> nil) then
                 HHGear^.State:= HHGear^.State or gstAttacked;
             if (Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) <> 0 then
                 ApplyAmmoChanges(CurrentHedgehog^)
@@ -547,7 +544,7 @@
     dec(Gear^.Timer);
     if (Gear^.Timer mod frametime) = 0 then
         inc(Gear^.Pos)
-    end 
+    end
 else if Gear^.Timer = 1 then
     begin
     Gear^.State:= Gear^.State or gstNoDamage;
@@ -555,7 +552,7 @@
     AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
     DeleteGear(Gear);
     SetAllToActive
-    end 
+    end
 else // Gear^.Timer = 0
     begin
     AllInactive:= false;
@@ -608,7 +605,7 @@
     if cnt <> 0 then AddAmmo(HH, ammo, cnt)
     else AddAmmo(HH, ammo);
 
-    if (not (HH.Team^.ExtDriven 
+    if (not (HH.Team^.ExtDriven
     or (HH.BotLevel > 0)))
     or (HH.Team^.Clan^.ClanIndex = LocalClan)
     or (GameType = gmtDemo)  then
@@ -646,7 +643,7 @@
        posCaseUtility,
        posCaseAmmo: begin
                     PlaySound(sndShotgunReload);
-                    if Gear^.AmmoType <> amNothing then 
+                    if Gear^.AmmoType <> amNothing then
                         begin
                         AddPickup(HH^.Hedgehog^, Gear^.AmmoType, Gear^.Power, hwRound(Gear^.X), hwRound(Gear^.Y));
                         end
@@ -654,7 +651,7 @@
                         begin
 // Add spawning here...
                         AddRandomness(GameTicks);
-                        
+
                         gi := GearsList;
                         while gi <> nil do
                             begin
@@ -769,7 +766,7 @@
     if (Gear^.Message and gmLeft  )<>0 then
         Gear^.dX:= -cLittle else
     if (Gear^.Message and gmRight )<>0 then
-        Gear^.dX:=  cLittle 
+        Gear^.dX:=  cLittle
         else exit;
 
     StepSoundTimer:= cHHStepTicks;
@@ -796,7 +793,7 @@
 var da: LongWord;
 begin
 with HHGear^.Hedgehog^ do
-    if ((CurAmmoType = amRope) and ((HHGear^.State and (gstMoving or gstHHJumping)) = gstMoving))
+    if ((CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amRope) and ((HHGear^.State and (gstMoving or gstHHJumping)) = gstMoving))
     or ((CurAmmoType = amPortalGun) and ((HHGear^.State and gstMoving) <> 0)) then
         da:= 2
     else da:= 1;
@@ -836,7 +833,7 @@
         Gear^.dY:= _0;
     Gear^.State:= Gear^.State or gstMoving;
     if (CurrentHedgehog^.Gear = Gear)
-        and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then 
+        and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then
         begin
         // TODO: why so aggressive at setting FollowGear when falling?
         FollowGear:= Gear;
@@ -852,7 +849,7 @@
         or ((Gear^.dY.QWordValue + Gear^.dX.QWordValue) > _0_55.QWordValue))) then
             Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density
         end
-    end 
+    end
 else
     begin
     land:= TestCollisionYwithGear(Gear, 1);
@@ -911,7 +908,7 @@
                         Gear^.X:= Gear^.X + Gear^.dX;
                         Gear^.dX:= Gear^.dX * _0_93;
                         Gear^.Y:= Gear^.Y - _2
-                        end 
+                        end
                     else
                     if not (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) or
                         (TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1))) then
@@ -978,7 +975,7 @@
 // ARTILLERY but not being moved by explosions
     Gear^.X:= Gear^.X + Gear^.dX;
     Gear^.Y:= Gear^.Y + Gear^.dY;
-    if (not Gear^.dY.isNegative) and (not TestCollisionYKick(Gear, 1)) 
+    if (not Gear^.dY.isNegative) and (not TestCollisionYKick(Gear, 1))
     and TestCollisionYwithXYShift(Gear, 0, 1, 1) then
         begin
         CheckHHDamage(Gear);
@@ -1071,7 +1068,7 @@
     or ((HHGear^.State and gstAttacking) <> 0)) then
         Attack(HHGear) // should be before others to avoid desync with '/put' msg and changing weapon msgs
     else
-else 
+else
     with Hedgehog^ do
         if ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0)
         and ((HHGear^.Message and gmLJump) <> 0)
@@ -1176,7 +1173,7 @@
                 begin
                 ResurrectHedgehog(Gear);
                 end
-            else 
+            else
                 begin
                 Gear^.State:= (Gear^.State or gstHHDeath) and (not gstAnimation);
                 Gear^.doStep:= @doStepHedgehogDead;
@@ -1220,9 +1217,9 @@
 procedure CheckIce(Gear: PGear); inline;
 (*
 var x,y,tx,ty: LongInt;
-    tdX, tdY, slope: hwFloat; 
+    tdX, tdY, slope: hwFloat;
     land: Word; *)
-var slope: hwFloat; 
+var slope: hwFloat;
 begin
     if (Gear^.Message and (gmAllStoppable or gmLJump or gmHJump) = 0)
     and (Gear^.State and (gstHHJumping or gstHHHJump or gstAttacking) = 0)
@@ -1263,7 +1260,7 @@
     end;
 if GameTicks mod 100 = 0 then CheckIce(Gear);
 (*
-if Gear^.Hedgehog^.Effects[heFrozen] > 0 then 
+if Gear^.Hedgehog^.Effects[heFrozen] > 0 then
     begin
     if (Gear^.Hedgehog^.Effects[heFrozen] > 256) and (CurrentHedgehog^.Team^.Clan <> Gear^.Hedgehog^.Team^.Clan) then
         dec(Gear^.Hedgehog^.Effects[heFrozen])
@@ -1271,7 +1268,7 @@
         dec(Gear^.Hedgehog^.Effects[heFrozen])
     end;
 *)
-if (GameTicks mod 10 = 0) and (Gear^.Hedgehog^.Effects[heFrozen] > 0) and (Gear^.Hedgehog^.Effects[heFrozen] < 256) then 
+if (GameTicks mod 10 = 0) and (Gear^.Hedgehog^.Effects[heFrozen] > 0) and (Gear^.Hedgehog^.Effects[heFrozen] < 256) then
     dec(Gear^.Hedgehog^.Effects[heFrozen]);
 if (Gear^.State and gstHHDriven) = 0 then
     doStepHedgehogFree(Gear)
--- a/hedgewars/uGearsList.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uGearsList.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -36,7 +36,7 @@
     uGearsRender, uGearsUtils, uDebug;
 
 const
-    GearKindAmmoTypeMap : array [TGearType] of TAmmoType = (    
+    GearKindAmmoTypeMap : array [TGearType] of TAmmoType = (
 (*          gtFlame *)   amNothing
 (*       gtHedgehog *) , amNothing
 (*           gtMine *) , amMine
@@ -181,7 +181,7 @@
 gear^.AmmoType:= GearKindAmmoTypeMap[Kind];
 gear^.CollisionMask:= $FFFF;
 
-if CurrentHedgehog <> nil then 
+if CurrentHedgehog <> nil then
     begin
     gear^.Hedgehog:= CurrentHedgehog;
     if (CurrentHedgehog^.Gear <> nil) and (hwRound(CurrentHedgehog^.Gear^.X) = X) and (hwRound(CurrentHedgehog^.Gear^.Y) = Y) then
@@ -192,7 +192,7 @@
     gear^.Z:= cHHZ+1
 else gear^.Z:= cUsualZ;
 
-    
+
 case Kind of
      gtGrenade,
      gtClusterBomb,
@@ -548,7 +548,10 @@
                 gear^.Pos:= 1;
                 end;
 }
-      gtIceGun: gear^.Health:= 1000;
+      gtIceGun: begin
+                gear^.Health:= 1000;
+                gear^.Radius:= 8;
+                end;
 gtGenericFaller:begin
                 gear^.AdvBounce:= 1;
                 gear^.Radius:= 1;
@@ -645,7 +648,7 @@
         if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Effects[heResurrectable] <> 0)  and
         //(Gear^.Hedgehog^.Effects[heResurrectable] = 0) then
         (Gear^.Hedgehog^.Team^.Clan <> CurrentHedgehog^.Team^.Clan) then
-            with CurrentHedgehog^ do 
+            with CurrentHedgehog^ do
                 begin
                 inc(Team^.stats.AIKills);
                 FreeTexture(Team^.AIKillsTex);
--- a/hedgewars/uGearsRender.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uGearsRender.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -352,13 +352,7 @@
                     lx:= lx + ax;
                     ly:= ly + ay;
                     tx:= round(lx);
-                    ty:= round(ly);
-                    if (abs(tx-hx) > 1000) or (abs(hy-ty) > 1000) then
-                        begin
-                        DrawLine(hx, hy, tx, ty, 1.0, $FF, $00, $00, $C0);
-                        hx:= tx;
-                        hy:= ty
-                        end
+                    ty:= round(ly)
                     end;
                 // reached edge of land. assume infinite beam. Extend it way out past camera
                 if ((ty and LAND_HEIGHT_MASK) <> 0) or ((tx and LAND_WIDTH_MASK) <> 0) then
@@ -368,7 +362,6 @@
                     end;
 
                 //if (abs(lx-tx)>8) or (abs(ly-ty)>8) then
-                if (tx <> hx) or (ty <> hy) then
                     begin
                     DrawLine(hx, hy, tx, ty, 1.0, $FF, $00, $00, $C0);
                     end;
--- a/hedgewars/uLand.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uLand.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -483,28 +483,11 @@
 
         p:= tmpsurf^.pixels;
         for y:= 0 to Pred(tmpsurf^.h) do
-        begin
+            begin
             for x:= 0 to Pred(tmpsurf^.w) do
-            begin
-                // this an if instead of masking colours to avoid confusing map creators
-                if ((AMask and p^[x]) = 0) then 
-                    Land[cpY + y, cpX + x]:= 0
-                else if p^[x] = $FFFFFFFF then                  // white
-                    Land[cpY + y, cpX + x]:= lfObject
-                else if p^[x] = AMask then                      // black
-                    begin
-                    Land[cpY + y, cpX + x]:= lfBasic;
-                    disableLandBack:= false
-                    end
-                else if p^[x] = (AMask or RMask) then           // red
-                    Land[cpY + y, cpX + x]:= lfIndestructible
-                else if p^[x] = (AMask or BMask) then           // blue
-                    Land[cpY + y, cpX + x]:= lfObject or lfIce
-                else if p^[x] = (AMask or GMask) then           // green
-                    Land[cpY + y, cpX + x]:= lfObject or lfBouncy
+                SetLand(Land[cpY + y, cpX + x], p^[x]);
+            p:= @(p^[tmpsurf^.pitch div 4]);
             end;
-            p:= @(p^[tmpsurf^.pitch div 4]);
-        end;
 
     if SDL_MustLock(tmpsurf) then
         SDL_UnlockSurface(tmpsurf);
--- a/hedgewars/uLandGraphics.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uLandGraphics.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -81,22 +81,22 @@
             LandPixels[pixelY, pixelX]:= 0
     end;
 end;
- 
+
 procedure drawPixelEBC(landX, landY, pixelX, pixelY: Longint); inline;
 begin
 if ((Land[landY, landX] and lfBasic) <> 0) or ((Land[landY, landX] and lfObject) <> 0) then
     begin
     LandPixels[pixelY, pixelX]:= ExplosionBorderColor;
     Land[landY, landX]:= (Land[landY, landX] or lfDamaged) and not lfIce;
-    LandDirty[landY div 32, landX div 32]:= 1;                        
+    LandDirty[landY div 32, landX div 32]:= 1;
     end;
 end;
- 
+
 function isLandscapeEdge(weight:Longint):boolean; inline;
 begin
 result := (weight < 8) and (weight >= 2);
 end;
- 
+
 function getPixelWeight(x, y:Longint): Longint;
 var
     i, j:Longint;
@@ -109,7 +109,7 @@
        (i > LAND_WIDTH - 1) or
        (j < 0) or
        (j > LAND_HEIGHT -1) then
-       begin               
+       begin
        result := 9;
        exit;
        end;
@@ -140,12 +140,12 @@
         LandPixels[pixelY, pixelX]:= addBgColor(w, IceColor);
         LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)])
         end
-    else 
+    else
         begin
         LandPixels[pixelY, pixelX]:= IceColor and not AMask or $E8 shl AShift;
         LandPixels[pixelY, pixelX]:= addBgColor(LandPixels[pixelY, pixelX], icePixels^[iceSurface^.w * (pixelY mod iceSurface^.h) + (pixelX mod iceSurface^.w)]);
         // silly workaround to avoid having to make background erasure a tadb it smarter about sea ice
-        if LandPixels[pixelY, pixelX] and AMask shr AShift = 255 then 
+        if LandPixels[pixelY, pixelX] and AMask shr AShift = 255 then
             LandPixels[pixelY, pixelX]:= LandPixels[pixelY, pixelX] and not AMask or 254 shl AShift;
         end;
 end;
@@ -177,43 +177,43 @@
     py := 0;
     FillLandCircleLine := 0;
     case fill of
-    backgroundPixel: 
+    backgroundPixel:
     for i:= fromPix to toPix do
         begin
         calculatePixelsCoordinates(i, y, px, py);
         inc(FillLandCircleLine, drawPixelBG(i, y, px, py));
         end;
-    ebcPixel: 
+    ebcPixel:
     for i:= fromPix to toPix do
         begin
         calculatePixelsCoordinates(i, y, px, py);
         drawPixelEBC(i, y, px, py);
         end;
-    nullPixel: 
+    nullPixel:
     for i:= fromPix to toPix do
         begin
         calculatePixelsCoordinates(i, y, px, py);
         if ((Land[y, i] and lfIndestructible) = 0) and (not disableLandBack or (Land[y, i] > 255))  then
-            LandPixels[py, px]:= 0        
+            LandPixels[py, px]:= 0
         end;
-    icePixel: 
+    icePixel:
     for i:= fromPix to toPix do
         begin
         calculatePixelsCoordinates(i, y, px, py);
         DrawPixelIce(i, y, px, py);
         end;
-    setNotCurrentMask: 
+    setNotCurrentMask:
     for i:= fromPix to toPix do
         begin
         Land[y, i]:= Land[y, i] and lfNotCurrentMask;
         end;
-    changePixelSetNotCurrent: 
+    changePixelSetNotCurrent:
     for i:= fromPix to toPix do
         begin
         if Land[y, i] and lfObjMask > 0 then
             Land[y, i]:= (Land[y, i] and lfNotObjMask) or ((Land[y, i] and lfObjMask) - 1);
         end;
-    setCurrentHog: 
+    setCurrentHog:
     for i:= fromPix to toPix do
         begin
         Land[y, i]:= Land[y, i] or lfCurrentHog
@@ -222,11 +222,11 @@
     for i:= fromPix to toPix do
         begin
         if Land[y, i] and lfObjMask < lfObjMask then
-            Land[y, i]:= (Land[y, i] and lfNotObjMask) or ((Land[y, i] and lfObjMask) + 1)     
+            Land[y, i]:= (Land[y, i] and lfNotObjMask) or ((Land[y, i] and lfObjMask) + 1)
         end;
-    end;    
+    end;
 end;
- 
+
 function FillLandCircleSegment(x, y, dx, dy: LongInt; fill : fillType): Longword; inline;
 begin
     FillLandCircleSegment := 0;
@@ -361,31 +361,31 @@
         begin
         if Land[j, i] = 0 then
             begin
-            Land[j, i] := lfIce;                
+            Land[j, i] := lfIce;
             fillPixelFromIceSprite(i, j);
             end;
-        end;        
+        end;
     end;
 landRect.x := min(max(x - iceRadius, 0), LAND_WIDTH - 1);
 landRect.y := min(max(y, 0), LAND_HEIGHT - 1);
 landRect.w := min(2*iceRadius, LAND_WIDTH - landRect.x - 1);
 landRect.h := min(iceHeight, LAND_HEIGHT - landRect.y - 1);
-UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true);        
+UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true);
 end;
 
 function DrawExplosion(X, Y, Radius: LongInt): Longword;
 var
     tx, ty, dx, dy: Longint;
-begin    
+begin
     DrawExplosion := FillRoundInLand(x, y, Radius, backgroundPixel);
     if Radius > 20 then
         FillRoundInLand(x, y, Radius - 15, nullPixel);
     FillRoundInLand(X, Y, Radius, 0);
     FillRoundInLand(x, y, Radius + 4, ebcPixel);
-    tx:= Max(X - Radius - 1, 0);
-    dx:= Min(X + Radius + 1, LAND_WIDTH) - tx;
-    ty:= Max(Y - Radius - 1, 0);
-    dy:= Min(Y + Radius + 1, LAND_HEIGHT) - ty;
+    tx:= Max(X - Radius - 5, 0);
+    dx:= Min(X + Radius + 5, LAND_WIDTH) - tx;
+    ty:= Max(Y - Radius - 5, 0);
+    dy:= Min(Y + Radius + 5, LAND_HEIGHT) - ty;
     UpdateLandTexture(tx, dx, ty, dy, false);
 end;
 
@@ -463,7 +463,7 @@
         else
             LandPixels[ty div 2, tx div 2]:= ExplosionBorderColor
         end
-    end;        
+    end;
 end;
 
 
--- a/hedgewars/uLandObjects.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uLandObjects.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -27,7 +27,9 @@
 procedure LoadThemeConfig;
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline;
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; extraFlags: Word);
+procedure BlitImageUsingMask(cpX, cpY: Longword;  Image, Mask: PSDL_Surface);
 procedure AddOnLandObjects(Surface: PSDL_Surface);
+procedure SetLand(var LandWord: Word; Pixel: LongWord); inline;
 
 implementation
 uses uStore, uConsts, uConsole, uRandom, uSound, GLunit
@@ -42,7 +44,7 @@
 type TRectsArray = array[0..MaxRects] of TSDL_Rect;
      PRectArray = ^TRectsArray;
      TThemeObject = record
-                     Surf: PSDL_Surface;
+                     Surf, Mask: PSDL_Surface;
                      inland: TSDL_Rect;
                      outland: array[0..Pred(MAXOBJECTRECTS)] of TSDL_Rect;
                      rectcnt: Longword;
@@ -68,6 +70,26 @@
     ThemeObjects: TThemeObjects;
     SprayObjects: TSprayObjects;
 
+procedure SetLand(var LandWord: Word; Pixel: LongWord); inline;
+begin
+    // this an if instead of masking colours to avoid confusing map creators
+    if ((AMask and Pixel) = 0) then
+        LandWord:= 0
+    else if Pixel = $FFFFFFFF then                  // white
+        LandWord:= lfObject
+    else if Pixel = AMask then                      // black
+        begin
+        LandWord:= lfBasic;
+        disableLandBack:= false
+        end
+    else if Pixel = (AMask or RMask) then           // red
+        LandWord:= lfIndestructible
+    else if Pixel = (AMask or BMask) then           // blue
+        LandWord:= lfObject or lfIce
+    else if Pixel = (AMask or GMask) then           // green
+        LandWord:= lfObject or lfBouncy
+end;
+
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline;
 begin
     BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, 0);
@@ -119,6 +141,47 @@
 WriteLnToConsole(msgOK)
 end;
 
+procedure BlitImageUsingMask(cpX, cpY: Longword;  Image, Mask: PSDL_Surface);
+var p, mp: PLongwordArray;
+    x, y: Longword;
+    bpp: LongInt;
+begin
+WriteToConsole('Generating collision info... ');
+
+if SDL_MustLock(Image) then
+    SDLTry(SDL_LockSurface(Image) >= 0, true);
+
+bpp:= Image^.format^.BytesPerPixel;
+TryDo(bpp = 4, 'Land object should be 32bit', true);
+
+p:= Image^.pixels;
+mp:= Mask^.pixels;
+for y:= 0 to Pred(Image^.h) do
+    begin
+    for x:= 0 to Pred(Image^.w) do
+        begin
+        if (cReducedQuality and rqBlurryLand) = 0 then
+            begin
+            if (LandPixels[cpY + y, cpX + x] = 0)
+            or (((p^[x] and AMask) <> 0) and (((LandPixels[cpY + y, cpX + x] and AMask) shr AShift) < 255)) then
+                LandPixels[cpY + y, cpX + x]:= p^[x];
+            end
+        else
+            if LandPixels[(cpY + y) div 2, (cpX + x) div 2] = 0 then 
+                LandPixels[(cpY + y) div 2, (cpX + x) div 2]:= p^[x];
+
+        if (Land[cpY + y, cpX + x] <= lfAllObjMask) or (Land[cpY + y, cpX + x] and lfObject <> 0)  then
+            SetLand(Land[cpY + y, cpX + x], mp^[x]);
+        end;
+    p:= @(p^[Image^.pitch shr 2]);
+    mp:= @(mp^[Mask^.pitch shr 2])
+    end;
+
+if SDL_MustLock(Image) then
+    SDL_UnlockSurface(Image);
+WriteLnToConsole(msgOK)
+end;
+
 procedure AddRect(x1, y1, w1, h1: LongInt);
 begin
 with Rects^[RectCount] do
@@ -326,7 +389,9 @@
     if bRes then
         begin
         i:= getrandom(cnt);
-        BlitImageAndGenerateCollisionInfo(ar[i].x, ar[i].y, 0, Obj.Surf);
+        if Obj.Mask <> nil then
+             BlitImageUsingMask(ar[i].x, ar[i].y, Obj.Surf, Obj.Mask)
+        else BlitImageAndGenerateCollisionInfo(ar[i].x, ar[i].y, 0, Obj.Surf);
         AddRect(ar[i].x, ar[i].y, Width, Height);
         dec(Maxcnt)
         end
@@ -555,9 +620,10 @@
         with ThemeObjects.objs[Pred(ThemeObjects.Count)] do
             begin
             i:= Pos(',', s);
-            Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifTransparent or ifIgnoreCaps);
+            Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifTransparent or ifIgnoreCaps or ifCritical);
             Width:= Surf^.w;
             Height:= Surf^.h;
+            Mask:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i)))+'_mask', ifTransparent or ifIgnoreCaps);
             Delete(s, 1, i);
             i:= Pos(',', s);
             Maxcnt:= StrToInt(Trim(Copy(s, 1, Pred(i))));
--- a/hedgewars/uMisc.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uMisc.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -38,8 +38,7 @@
 
 implementation
 uses SysUtils, uVariables, uUtils
-     {$IFDEF PNG_SCREENSHOTS}, PNGh, png {$ENDIF}
-     {$IFNDEF USE_SDLTHREADS} {$IFDEF UNIX}, cthreads{$ENDIF} {$ENDIF};
+     {$IFDEF PNG_SCREENSHOTS}, PNGh, png {$ENDIF};
 
 type PScreenshot = ^TScreenshot;
      TScreenshot = record
@@ -64,7 +63,7 @@
 
 {$IFDEF PNG_SCREENSHOTS}
 // this funtion will be executed in separate thread
-function SaveScreenshot(screenshot: pointer): PtrInt;
+function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export;
 var i: LongInt;
     png_ptr: ^png_struct;
     info_ptr: ^png_info;
@@ -119,7 +118,7 @@
 {$ELSE} // no PNG_SCREENSHOTS
 
 // this funtion will be executed in separate thread
-function SaveScreenshot(screenshot: pointer): PtrInt;
+function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export;
 var f: file;
     // Windows Bitmap Header
     head: array[0..53] of Byte = (
@@ -262,11 +261,7 @@
 image^.size:= size;
 image^.buffer:= p;
 
-{$IFDEF USE_SDLTHREADS}
-SDL_CreateThread(@SaveScreenshot{$IFDEF SDL13}, nil{$ENDIF}, image);
-{$ELSE}
-BeginThread(@SaveScreenshot, image);
-{$ENDIF}
+SDL_CreateThread(@SaveScreenshot{$IFDEF SDL13}, 'snapshot'{$ENDIF}, image);
 MakeScreenshot:= true; // possibly it is not true but we will not wait for thread to terminate
 end;
 
--- a/hedgewars/uStore.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uStore.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -21,7 +21,7 @@
 
 unit uStore;
 interface
-uses {$IFNDEF PAS2C} StrUtils, {$ENDIF}SysUtils, uConsts, SDLh, GLunit, uTypes, uLandTexture, uCaptions, uChat;
+uses StrUtils, SysUtils, uConsts, SDLh, GLunit, uTypes, uLandTexture, uCaptions, uChat;
 
 procedure initModule;
 procedure freeModule;
@@ -575,19 +575,19 @@
     tmpsurf:= IMG_Load_RW(rwopsOpenRead(s), true);
 
     if tmpsurf = nil then
-    begin
+        begin
         OutError(msgFailed, (imageFlags and ifCritical) <> 0);
         exit;
-    end;
+        end;
 
     if ((imageFlags and ifIgnoreCaps) = 0) and ((tmpsurf^.w > MaxTextureSize) or (tmpsurf^.h > MaxTextureSize)) then
-    begin
+        begin
         SDL_FreeSurface(tmpsurf);
         OutError(msgFailedSize, ((not cOnlyStats) and ((imageFlags and ifCritical) <> 0)));
         // dummy surface to replace non-critical textures that failed to load due to their size
         LoadImage:= SDL_CreateRGBSurface(SDL_SWSURFACE, 2, 2, 32, RMask, GMask, BMask, AMask);
         exit;
-    end;
+        end;
 
     tmpsurf:= doSurfaceConversion(tmpsurf);
 
@@ -765,7 +765,7 @@
     AddFileLog('  |----- Number of auxiliary buffers: ' + inttostr(AuxBufNum));
 {$ENDIF}
     AddFileLog('  \----- Extensions: ');
-{$IFNDEF PAS2C}
+
     // fetch extentions and store them in string
     tmpstr := StrPas(PChar(glGetString(GL_EXTENSIONS)));
     tmpn := WordCount(tmpstr, [' ']);
@@ -783,10 +783,6 @@
         tmpint := tmpint + 3;
     end;
     until (tmpint > tmpn);
-{$ELSE}
-    // doesn't seem to print >256 chars
-    AddFileLogRaw(PChar(glGetString(GL_EXTENSIONS)));
-{$ENDIF}
     AddFileLog('');
 
     defaultFrame:= 0;
--- a/hedgewars/uTypes.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uTypes.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -220,48 +220,56 @@
     PClan     = ^TClan;
 
     TGearStepProcedure = procedure (Gear: PGear);
+// So, you're here looking for variables you can (ab)use to store some gear state?
+// Not all members of this structure are created equal. Comments below are my take on what can be used for what in the gear structure.
     TGear = record
-            NextGear, PrevGear: PGear;
-            Active: Boolean;
-            AdvBounce: Longword;
-            Invulnerable: Boolean;
-            RenderTimer: Boolean;
-            AmmoType : TAmmoType;
-            State : Longword;
-            X : hwFloat;
+// Don't ever override these.
+            NextGear, PrevGear: PGear;  // Linked list
+            Z: Longword;                // Z index. For rendering. Sets order in list
+            Active: Boolean;            // Is gear Active (running step code)
+            Kind: TGearType;
+            doStep: TGearStepProcedure; // Code the gear is running
+            AmmoType : TAmmoType;       // Ammo type associated with this kind of gear
+            RenderTimer: Boolean;       // Will visually display Timer if true
+            Target : TPoint;            // Gear target. Will render in uGearsRender unless a special case is added
+            AIHints: LongWord;          // hints for ai.
+            LastDamage: PHedgehog;      // Used to track damage source for stats
+            CollisionIndex: LongInt;    // Position in collision array
+            Message: LongWord;          // Game messages are stored here. See gm bitmasks in uConsts
+            uid: Longword;              // Lua use this to reference gears
+// Strongly recommended not to override these.  Will mess up generic operations like portaling
+            X : hwFloat;              // X/Y/dX/dY are position/velocity. People count on these having semi-normal values
             Y : hwFloat;
             dX: hwFloat;
             dY: hwFloat;
-            Target : TPoint;
-            Kind: TGearType;
-            Pos: Longword;
-            doStep: TGearStepProcedure;
-            Radius: LongInt;
-            Angle, Power : Longword;
-            DirAngle: real;
-            Timer : LongWord;
+            State : Longword;        // See gst bitmask values in uConsts
+            PortalCounter: LongWord; // Necessary to interrupt portal loops.  Not possible to avoid infinite loops without it.
+// Don't use these if you're using generic movement like doStepFallingGear and explosion shoves. Generally recommended not to use.
+            Radius: LongInt;     // Radius. If not using uCollisions, is usually used to indicate area of effect
+            CollisionMask: Word; // Masking off Land impact  FF7F for example ignores current hog and crates
+            AdvBounce: Longword; // Triggers 45° bounces. Is a counter to avoid edge cases
             Elasticity: hwFloat;
             Friction  : hwFloat;
-            Density   : hwFloat;
-            Message, MsgParam : Longword;
-            Hedgehog: PHedgehog;
+            Density   : hwFloat; // Density is kind of a mix of size and density. Impacts distance thrown, wind.
+            ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
+            nImpactSounds: Word; // count of ImpactSounds.
+// Don't use these if you want to take damage normally, otherwise health/damage are commonly used for other purposes
+            Invulnerable: Boolean;
             Health, Damage, Karma: LongInt;
-            CollisionIndex: LongInt;
-            Tag: LongInt;
-            Tex: PTexture;
-            Z: Longword;
-            CollisionMask: Word;
-            LinkedGear: PGear;
-            FlightTime: Longword;
-            uid: Longword;
-            ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
-            nImpactSounds: Word; // count of ImpactSounds
-            SoundChannel: LongInt;
-            PortalCounter: LongWord;  // Hopefully temporary, but avoids infinite portal loops in a guaranteed fashion.
-            AIHints: LongWord; // hints for ai. haha ^^^^^^ temporary, sure
-            IceTime: Longint; //time of ice beam with object some interaction  temporary
-            IceState: Longint; //state of ice gun temporary
-            LastDamage: PHedgehog;
+// DirAngle is a "real" - if you don't need it for rotation of sprite in uGearsRender, you can use it for any visual-only value
+            DirAngle: real;
+// These are frequently overridden to serve some other purpose
+            Pos: Longword;           // Commonly overridden.  Example use is posCase values in uConsts.
+            Angle, Power : Longword; // Used for hog aiming/firing.  Angle is rarely used as an Angle otherwise.
+            Timer : LongWord;        // Typically used for some sort of gear timer. Time to explosion, remaining fuel...
+            Tag: LongInt;            // Quite generic. Variety of uses.
+            FlightTime: Longword;    // Initially added for batting of hogs to determine homerun. Used for some firing delays
+            MsgParam: LongWord;      // Initially stored a set of messages. So usually gm values like Message. Frequently overriden
+// These are not used generically, but should probably be used for purpose intended. Definitely shouldn't override pointer type
+            Tex: PTexture;          // A texture created by the gear. Shouldn't use for anything but textures
+            LinkedGear: PGear;      // Used to track a related gear. Portal pairs for example.
+            Hedgehog: PHedgehog;    // set to CurrentHedgehog on gear creation
+            SoundChannel: LongInt;  // Used to track a sound the gear started
             end;
     TPGearArray = array of PGear;
     PGearArrayS = record
@@ -429,7 +437,7 @@
 
     TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
             sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync,
-            sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD, sidReady, 
+            sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD, sidReady,
             sidBounce1, sidBounce2, sidBounce3, sidBounce4, sidBounce5, sidBounce,
             sidMute);
 
@@ -440,8 +448,8 @@
 
     TGoalStrId = (gidCaption, gidSubCaption, gidForts, gidLowGravity, gidInvulnerable,
             gidVampiric, gidKarma, gidKing, gidPlaceHog, gidArtillery,
-            gidSolidLand, gidSharedAmmo, gidMineTimer, gidNoMineTimer, 
-            gidRandomMineTimer, gidDamageModifier, gidResetHealth, gidAISurvival, 
+            gidSolidLand, gidSharedAmmo, gidMineTimer, gidNoMineTimer,
+            gidRandomMineTimer, gidDamageModifier, gidResetHealth, gidAISurvival,
             gidInfAttack, gidResetWeps, gidPerHogAmmo, gidTagTeam);
 
     TLandArray = packed array of array of LongWord;
--- a/hedgewars/uUtils.pas	Tue Mar 26 18:52:42 2013 +0100
+++ b/hedgewars/uUtils.pas	Sun Apr 07 22:53:40 2013 +0200
@@ -27,14 +27,12 @@
 procedure SplitByChar(var a, b: shortstring; c: char);
 procedure SplitByChar(var a, b: ansistring; c: char);
 
-{$IFNDEF PAS2C}
 function  EnumToStr(const en : TGearType) : shortstring; overload;
 function  EnumToStr(const en : TVisualGearType) : shortstring; overload;
 function  EnumToStr(const en : TSound) : shortstring; overload;
 function  EnumToStr(const en : TAmmoType) : shortstring; overload;
 function  EnumToStr(const en : THogEffect) : shortstring; overload;
 function  EnumToStr(const en : TCapGroup) : shortstring; overload;
-{$ENDIF}
 
 function  Min(a, b: LongInt): LongInt; inline;
 function  Max(a, b: LongInt): LongInt; inline;
@@ -68,10 +66,8 @@
 function  GetLaunchX(at: TAmmoType; dir: LongInt; angle: LongInt): LongInt;
 function  GetLaunchY(at: TAmmoType; angle: LongInt): LongInt;
 
-{$IFNDEF PAS2C}
 procedure Write(var f: textfile; s: shortstring);
 procedure WriteLn(var f: textfile; s: shortstring);
-{$ENDIF}
 
 function  isPhone: Boolean; inline;
 function  getScreenDPI: Double; inline; //cdecl; external;
@@ -92,7 +88,7 @@
 
 
 implementation
-uses {$IFNDEF PAS2C}typinfo, {$ENDIF}Math, uConsts, uVariables, SysUtils;
+uses typinfo, Math, uConsts, uVariables, SysUtils;
 
 {$IFDEF DEBUGFILE}
 var f: textfile;
@@ -135,11 +131,11 @@
     end else b:= '';
 end;
 
-{$IFNDEF PAS2C}
 function EnumToStr(const en : TGearType) : shortstring; overload;
 begin
 EnumToStr:= GetEnumName(TypeInfo(TGearType), ord(en))
 end;
+
 function EnumToStr(const en : TVisualGearType) : shortstring; overload;
 begin
 EnumToStr:= GetEnumName(TypeInfo(TVisualGearType), ord(en))
@@ -164,7 +160,7 @@
 begin
 EnumToStr := GetEnumName(TypeInfo(TCapGroup), ord(en))
 end;
-{$ENDIF}
+
 
 function Min(a, b: LongInt): LongInt;
 begin
@@ -407,7 +403,6 @@
 CheckNoTeamOrHH:= (CurrentTeam = nil) or (CurrentHedgehog^.Gear = nil);
 end;
 
-{$IFNDEF PAS2C}
 procedure Write(var f: textfile; s: shortstring);
 begin
 system.write(f, s)
@@ -417,7 +412,7 @@
 begin
 system.writeln(f, s)
 end;
-{$ENDIF}
+
 
 // this function is just to determine whether we are running on a limited screen device
 function isPhone: Boolean; inline;
--- a/project_files/HedgewarsMobile/Classes/CreationChamber.m	Tue Mar 26 18:52:42 2013 +0100
+++ b/project_files/HedgewarsMobile/Classes/CreationChamber.m	Sun Apr 07 22:53:40 2013 +0200
@@ -18,7 +18,7 @@
 
 
 #import "CreationChamber.h"
-
+#import "weapons.h"
 
 @implementation CreationChamber
 
--- a/project_files/HedgewarsMobile/Classes/HWUtils.m	Tue Mar 26 18:52:42 2013 +0100
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.m	Sun Apr 07 22:53:40 2013 +0200
@@ -22,7 +22,7 @@
 #import <sys/sysctl.h>
 #import <netinet/in.h>
 #import <SystemConfiguration/SCNetworkReachability.h>
-
+#import "hwconsts.h"
 
 static NSString *cachedModel = nil;
 static NSArray *cachedColors = nil;
--- a/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Tue Mar 26 18:52:42 2013 +0100
+++ b/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Sun Apr 07 22:53:40 2013 +0200
@@ -18,7 +18,7 @@
 
 
 #import "ServerProtocolNetwork.h"
-
+#import "hwconsts.h"
 
 #define BUFFER_SIZE 256
 
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Tue Mar 26 18:52:42 2013 +0100
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Sun Apr 07 22:53:40 2013 +0200
@@ -11,7 +11,8 @@
 			isa = PBXAggregateTarget;
 			buildConfigurationList = 61799290114AE0CD00BA94A9 /* Build configuration list for PBXAggregateTarget "UpdateDataFolder" */;
 			buildPhases = (
-				6179928A114AE0C800BA94A9 /* ShellScript */,
+				61806B78170B83EA00C601BC /* config.inc */,
+				6179928A114AE0C800BA94A9 /* data */,
 			);
 			dependencies = (
 			);
@@ -629,6 +630,8 @@
 		617BC23A1490211F00E1C294 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Locale/Italian.lproj/Scheme.strings; sourceTree = "<group>"; };
 		617D78D816D932310091D4D6 /* Physfs.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Physfs.xcodeproj; path = ../../misc/libphysfs/Xcode/Physfs.xcodeproj; sourceTree = SOURCE_ROOT; };
 		617D794316D933B00091D4D6 /* Physlayer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Physlayer.xcodeproj; path = ../../misc/libphyslayer/Xcode/Physlayer.xcodeproj; sourceTree = SOURCE_ROOT; };
+		61806BDA170B963800C601BC /* weapons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weapons.h; path = ../../QTfrontend/weapons.h; sourceTree = SOURCE_ROOT; };
+		61806BE0170B969D00C601BC /* hwconsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hwconsts.h; path = ../../QTfrontend/hwconsts.h; sourceTree = SOURCE_ROOT; };
 		6183D83C11E2BCE200A88903 /* Default-ipad-Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-ipad-Landscape.png"; path = "Resources/Icons/Default-ipad-Landscape.png"; sourceTree = "<group>"; };
 		6183D83D11E2BCE200A88903 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = Resources/Icons/Default.png; sourceTree = "<group>"; };
 		618899811299516000D55FD6 /* title@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "title@2x~iphone.png"; path = "Resources/Frontend/title@2x~iphone.png"; sourceTree = "<group>"; };
@@ -672,7 +675,6 @@
 		61A4A39312A5CCC2004D81E6 /* uVariables.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uVariables.pas; path = ../../hedgewars/uVariables.pas; sourceTree = SOURCE_ROOT; };
 		61A4A3A112A5CD56004D81E6 /* uCaptions.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uCaptions.pas; path = ../../hedgewars/uCaptions.pas; sourceTree = SOURCE_ROOT; };
 		61A976B2136F668500DD9878 /* uCursor.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uCursor.pas; path = ../../hedgewars/uCursor.pas; sourceTree = SOURCE_ROOT; };
-		61A97F0E136F675A00DD9878 /* hwconsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hwconsts.h; path = ../../QTfrontend/hwconsts.h; sourceTree = SOURCE_ROOT; };
 		61AC067212B2E32D000B52A2 /* Appirater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Appirater.h; path = Classes/Appirater.h; sourceTree = "<group>"; };
 		61AC067312B2E32D000B52A2 /* Appirater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Appirater.m; path = Classes/Appirater.m; sourceTree = "<group>"; };
 		61B7A33612CC21080086B604 /* StatsPageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StatsPageViewController.h; sourceTree = "<group>"; };
@@ -1023,9 +1025,10 @@
 		61641FE21437CD8F006E049C /* Headers */ = {
 			isa = PBXGroup;
 			children = (
+				61806BE0170B969D00C601BC /* hwconsts.h */,
+				61806BDA170B963800C601BC /* weapons.h */,
 				61641FE31437CDAA006E049C /* DefinesAndMacros.h */,
 				32CA4F630368D1EE00C91783 /* Hedgewars_Prefix.pch */,
-				61A97F0E136F675A00DD9878 /* hwconsts.h */,
 				6165922911CA9BD500D6E256 /* PascalImports.h */,
 			);
 			name = Headers;
@@ -1629,19 +1632,34 @@
 			shellPath = /bin/sh;
 			shellScript = "HEDGEWARS_REVISION=`/usr/local/bin/hg identify -n ${SOURCE_DIR}|sed -e 's/\\+//'`\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $HEDGEWARS_REVISION\" \"${TARGET_BUILD_DIR}\"/\"${INFOPLIST_PATH}\"";
 		};
-		6179928A114AE0C800BA94A9 /* ShellScript */ = {
+		6179928A114AE0C800BA94A9 /* data */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			inputPaths = (
 			);
+			name = data;
 			outputPaths = (
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\n#create config.inc\necho \"Updating config file...\"\nPROTO=`cat ${SOURCE_DIR}/CMakeLists.txt | grep HEDGEWARS_PROTO_VER | cut -d ' ' -f 2 | cut -d ')' -f 1`\nMAJN=`cat ${SOURCE_DIR}/CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MAJOR | xargs | cut -d ' ' -f 2 |cut -d ')' -f 1`\nMINN=`cat ${SOURCE_DIR}/CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MINOR | xargs | cut -d ' ' -f 2 |cut -d ')' -f 1`\nPATN=`cat ${SOURCE_DIR}/CMakeLists.txt | grep CPACK_PACKAGE_VERSION_PATCH | xargs | cut -d ' ' -f 2 |cut -d '$' -f 1`\nREVN=-`/usr/local/bin/hg id -n ${SOURCE_DIR}`\necho \"const cNetProtoVersion = $PROTO; const cVersionString = '${MAJN}.${MINN}.${PATN}${REVN}'; const cLuaLibrary = '';\" > ${PROJECT_DIR}/config.inc\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{Cheese,FlightJoust}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#copy mono audio\ncp -R ${SOURCE_DIR}/project_files/AudioMono/* ${PROJECT_DIR}/Data/\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Justyouwait,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
-			showEnvVarsInLog = 0;
+			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{Cheese,FlightJoust}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#copy mono audio\ncp -R ${SOURCE_DIR}/project_files/AudioMono/* ${PROJECT_DIR}/Data/\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Justyouwait,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
+		};
+		61806B78170B83EA00C601BC /* config.inc */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = config.inc;
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/myfile",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "HG=/usr/local/bin/hg\nSOURCE_DIR=${PROJECT_DIR}/../../\n\n#create config.inc\necho \"Updating config file...\"\nPRON=`grep HEDGEWARS_PROTO_VER ${SOURCE_DIR}/CMakeLists.txt | grep -o -E [0-9]+`\nMAJN=`grep CPACK_PACKAGE_VERSION_MAJOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nMINN=`grep CPACK_PACKAGE_VERSION_MINOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nPATN=`grep CPACK_PACKAGE_VERSION_PATCH ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nREVN=`$HG id -n ${SOURCE_DIR}`\nHASH=`$HG id -i ${SOURCE_DIR}`\n\necho \"{Do not change this file, use the project target to regenerate}\" > ${PROJECT_DIR}/config.inc\necho \"const cNetProtoVersion = $PRON;\" >> ${PROJECT_DIR}/config.inc\necho \"const cVersionString = '$MAJN.$MINN.$PATN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cRevisionString = '$REVN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cHashString = '$HASH';\" >> ${PROJECT_DIR}/config.inc\necho \"const cLuaLibrary = '';\" >> ${PROJECT_DIR}/config.inc";
 		};
 		9283011B0F10CB2D00CC5A3C /* Build libfpc.a */ = {
 			isa = PBXShellScriptBuildPhase;
--- a/project_files/HedgewarsMobile/Hedgewars_Prefix.pch	Tue Mar 26 18:52:42 2013 +0100
+++ b/project_files/HedgewarsMobile/Hedgewars_Prefix.pch	Sun Apr 07 22:53:40 2013 +0200
@@ -30,6 +30,5 @@
 #import "EditableCellView.h"
 #import "CreationChamber.h"
 #import "HWUtils.h"
-#import "hwconsts.h"
 #endif
 
--- a/share/hedgewars/Data/Locale/hedgewars_ar.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -174,6 +190,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Cannot create directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -534,6 +565,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -934,6 +980,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1989,35 +2042,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Cannot create directory %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Cannot create directory %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Unable to start the server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Unable to start the server: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2164,10 +2194,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2279,6 +2305,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2389,6 +2435,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_bg.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Не може да се създаде папка %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -533,6 +564,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -933,6 +979,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2004,35 +2057,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Не може да се създаде папка %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Не може да се създаде папка %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Грешка при стартиране на сървъра: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Грешка при стартиране на сървъра: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2180,10 +2210,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2295,6 +2321,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2405,6 +2451,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_cs.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -179,6 +195,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Nemohu vytvořit adresář %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -539,6 +570,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -945,6 +991,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2018,35 +2071,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Nemohu vytvořit adresář %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nemohu vytvořit adresář %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Nemohu spustit server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nemohu spustit server: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2195,10 +2225,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2310,6 +2336,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2420,6 +2466,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_da.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_da.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Kan ikke oprette mappe %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -537,6 +568,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -937,6 +983,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1998,35 +2051,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Kan ikke oprette mappe %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Kan ikke oprette mappe %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Ude af stand til at starte serveren: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Ude af stand til at starte serveren: %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2188,10 +2218,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2303,6 +2329,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2413,6 +2459,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Verzeichnis %1 konnte nicht angelegt werden</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished">Konnte Daten-Verzeichnis nicht öffnen:
+%1
+
+Bitte überprüfe deine Installation!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -537,6 +571,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -937,6 +986,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2017,37 +2073,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Hedgewars - Fehler</translation>
+        <translation type="obsolete">Hedgewars - Fehler</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Verzeichnis %1 konnte nicht angelegt werden</translation>
+        <translation type="obsolete">Verzeichnis %1 konnte nicht angelegt werden</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Konnte Daten-Verzeichnis nicht öffnen:
+        <translation type="obsolete">Konnte Daten-Verzeichnis nicht öffnen:
 %1
 
 Bitte überprüfe deine Installation!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Fehler</translation>
+        <translation type="obsolete">TCP - Fehler</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Server %1 konnte nicht gestartet werden.</translation>
+        <translation type="obsolete">Server %1 konnte nicht gestartet werden.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Konnte Engine nicht starten: </translation>
+        <translation type="obsolete">Konnte Engine nicht starten: </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Fehler-Code: %1</translation>
+        <translation type="obsolete">Fehler-Code: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2195,10 +2251,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2310,6 +2362,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2420,6 +2492,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_el.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_el.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Δεν μπορεί να δημιουργηθεί ο κατάλογος %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -535,6 +566,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -935,6 +981,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1992,35 +2045,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Δεν μπορεί να δημιουργηθεί ο κατάλογος %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Δεν μπορεί να δημιουργηθεί ο κατάλογος %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Δεν είναι δυνατόν να ξεκινήσει ο εξυπηρετητής : %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Δεν είναι δυνατόν να ξεκινήσει ο εξυπηρετητής : %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2182,10 +2212,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2297,6 +2323,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2407,6 +2453,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_en.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_en.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Cannot create directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -533,6 +564,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -933,6 +979,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1988,35 +2041,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Cannot create directory %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Cannot create directory %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Unable to start the server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Unable to start the server: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2164,10 +2194,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2279,6 +2305,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2389,6 +2435,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_es.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_es.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">No se pudo crear el directorio %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -537,6 +568,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -937,6 +983,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2008,35 +2061,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">No se pudo crear el directorio %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">No se pudo crear el directorio %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">No se pudo iniciar el servidor: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">No se pudo iniciar el servidor: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2184,10 +2214,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2299,6 +2325,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2409,6 +2455,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_fi.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Hakemiston %1 luonti epäonnistui</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -533,6 +564,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -933,6 +979,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2004,35 +2057,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Hakemiston %1 luonti epäonnistui</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Hakemiston %1 luonti epäonnistui</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Palvelinta ei pystytty käynnistämään: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Palvelinta ei pystytty käynnistämään: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2180,10 +2210,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2295,6 +2321,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2405,6 +2451,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_fr.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Impossible de créer le dossier %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -533,6 +564,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -933,6 +979,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2004,35 +2057,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Impossible de créer le dossier %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Impossible de créer le dossier %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Impossible de démarrer le serveur: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Impossible de démarrer le serveur: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2179,10 +2209,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2294,6 +2320,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2404,6 +2450,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_gl.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_gl.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Non se puido crear o directorio %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -533,6 +564,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -933,6 +979,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1978,35 +2031,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Non se puido crear o directorio %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Non se puido crear o directorio %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Non se puido iniciar o servidor: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Non se puido iniciar o servidor: %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2167,10 +2197,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2282,6 +2308,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2392,6 +2438,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_hu.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -167,6 +183,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Nem sikerült létrehozni %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -527,6 +558,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -921,6 +967,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1978,35 +2031,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Nem sikerült létrehozni %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nem sikerült létrehozni %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Nem sikerült a szerverhez csatlakozni: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Nem sikerült a szerverhez csatlakozni: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2152,10 +2182,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2267,6 +2293,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2377,6 +2423,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_it.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_it.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation>Invia Commento</translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,24 @@
             <numerusform>%1 giorni</numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Impossibile creare la directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished">Impossibile creare la directory dati:
+%1
+
+Per favore controlla l&apos;installazione!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -547,6 +581,21 @@
         <source>Login</source>
         <translation>Login</translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -947,6 +996,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2027,37 +2083,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Main - Errore</translation>
+        <translation type="obsolete">Main - Errore</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Impossibile creare la directory %1</translation>
+        <translation type="obsolete">Impossibile creare la directory %1</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Impossibile creare la directory dati:
+        <translation type="obsolete">Impossibile creare la directory dati:
 %1
 
 Per favore controlla l&apos;installazione!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Errore</translation>
+        <translation type="obsolete">TCP - Errore</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Impossibile avviare il server: %1.</translation>
+        <translation type="obsolete">Impossibile avviare il server: %1.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Impossibile avviare il motore a </translation>
+        <translation type="obsolete">Impossibile avviare il motore a </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Codice di errore: %1</translation>
+        <translation type="obsolete">Codice di errore: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2206,7 +2262,7 @@
     </message>
     <message>
         <source>Hedgewars</source>
-        <translation>Hedgewars</translation>
+        <translation type="obsolete">Hedgewars</translation>
     </message>
     <message>
         <source>Not all players are ready</source>
@@ -2321,6 +2377,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation>Cariva questo video nel tuo account Youtube</translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2431,6 +2507,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
@@ -3108,7 +3203,7 @@
     </message>
     <message>
         <source>60 seconds cooldown after kick</source>
-        <translation>60 secondi di raffreddamento prima dell'espulsione</translation>
+        <translation>60 secondi di raffreddamento prima dell&apos;espulsione</translation>
     </message>
     <message>
         <source>kicked</source>
--- a/share/hedgewars/Data/Locale/hedgewars_ja.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -167,6 +183,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">フォルダー%1作成拒否</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -527,6 +558,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -921,6 +967,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1974,35 +2027,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">フォルダー%1作成拒否</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">フォルダー%1作成拒否</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">サーバー%1の起動は出来なかった</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">サーバー%1の起動は出来なかった</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2148,10 +2178,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2263,6 +2289,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2373,6 +2419,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_ko.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -167,6 +183,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -527,6 +558,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -917,6 +963,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1950,37 +2003,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Video upload - Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2124,10 +2146,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2239,6 +2257,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2349,6 +2387,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_lt.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -105,17 +105,37 @@
 <context>
     <name>FeedbackDialog</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="114"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="87"/>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="88"/>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="89"/>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="90"/>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="121"/>
         <source>View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="147"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="168"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="175"/>
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
@@ -217,6 +237,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/HWApplication.cpp" line="92"/>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="102"/>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="253"/>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -229,52 +267,52 @@
 <context>
     <name>HWChatWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="640"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="641"/>
         <source>%1 has been removed from your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="650"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="651"/>
         <source>%1 has been added to your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="680"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="681"/>
         <source>%1 has been removed from your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="689"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="690"/>
         <source>%1 has been added to your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="755"/>
-        <source>Stylesheet imported from %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="756"/>
+        <source>Stylesheet imported from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="757"/>
         <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="764"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="765"/>
         <source>Couldn&apos;t read %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="772"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="773"/>
         <source>StyleSheet discarded</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="796"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="797"/>
         <source>StyleSheet saved to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="799"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="800"/>
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -292,18 +330,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1102"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1107"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1400"/>
         <source>No nickname supplied.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1102"/>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
         <translation type="unfinished"></translation>
@@ -314,12 +352,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1050"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1056"/>
         <source>Hedgewars - Nick registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1051"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1057"/>
         <source>This nick is registered, and you haven&apos;t specified a password.
 
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
@@ -328,76 +366,76 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1079"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1085"/>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1084"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1090"/>
         <source>
 
 Your password wasn&apos;t saved either.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1107"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1400"/>
         <source>Hedgewars - Empty nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1133"/>
         <source>Hedgewars - Wrong password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1133"/>
         <source>You entered a wrong password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1144"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1154"/>
         <source>Try Again</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1515"/>
         <source>Hedgewars - Connection error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1515"/>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1647"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1958"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1672"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1993"/>
         <source>Cannot save record to file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1896"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1923"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1897"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1924"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1985"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1985"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -654,7 +692,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1535"/>
         <source>Quit reason: </source>
         <translation type="unfinished"></translation>
     </message>
@@ -666,6 +704,24 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="35"/>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="39"/>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="47"/>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -691,17 +747,17 @@
 <context>
     <name>HatPrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="83"/>
         <source>Search for a hat:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="119"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="123"/>
         <source>Use selected hat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1151,6 +1207,14 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="128"/>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="91"/>
@@ -1380,52 +1444,52 @@
 <context>
     <name>PageRoomsList</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="53"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="63"/>
         <source>Search for a room:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="80"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="90"/>
         <source>Create room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="84"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="94"/>
         <source>Join room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="131"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="141"/>
         <source>Room state</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="155"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="165"/>
         <source>Rules:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="169"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="179"/>
         <source>Weapons:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="180"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="190"/>
         <source>Clear filters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="198"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="208"/>
         <source>Admin features</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="200"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="210"/>
         <source>Open server administration page</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="585"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="595"/>
         <source>%1 players online</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1739,23 +1803,23 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="269"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="873"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="874"/>
         <source>Ignore</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="273"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="886"/>
         <source>Add friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="868"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="869"/>
         <source>Unignore</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="880"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="881"/>
         <source>Remove friend</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1775,12 +1839,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="150"/>
         <source>Show games in lobby</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="143"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="153"/>
         <source>Show games in-progress</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1855,7 +1919,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="59"/>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="55"/>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="507"/>
         <source>Save password</source>
         <translation type="unfinished"></translation>
@@ -1979,8 +2043,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="189"/>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="262"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="199"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="272"/>
         <source>Any</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2096,22 +2160,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="139"/>
         <source>Tip: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="135"/>
+        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="56"/>
         <source>Server name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="59"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="63"/>
         <source>Server port:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2283,27 +2347,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="100"/>
         <source>Your Email</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="101"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="108"/>
         <source>Summary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="111"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="118"/>
         <source>Send system information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="126"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="133"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="154"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="161"/>
         <source>Type the security code:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2389,70 +2453,71 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1077"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1083"/>
         <source>Hedgewars - Nick not registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1452"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1474"/>
         <source>Unable to start server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1535"/>
         <source>Connection to server is lost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1986"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2021"/>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1987"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2022"/>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="340"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="347"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="24"/>
         <source>Hedgewars - Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="350"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="357"/>
         <source>System Information Preview</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="365"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="376"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="372"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="383"/>
         <source>Failed to generate captcha</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="393"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="400"/>
         <source>Failed to download captcha</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="457"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="464"/>
         <source>Please fill out all fields. Email is optional.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1928"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="427"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1963"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="434"/>
         <source>Hedgewars - Success</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1929"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1964"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1934"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1969"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2490,46 +2555,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="114"/>
-        <location filename="../../../../QTfrontend/main.cpp" line="274"/>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="115"/>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="275"/>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="94"/>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="177"/>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="95"/>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="178"/>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="179"/>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/>
         <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="244"/>
         <source>Netgame - Error</source>
@@ -2570,22 +2595,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="536"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="546"/>
         <source>Room Name - Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="537"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="547"/>
         <source>Please select room from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="572"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="582"/>
         <source>Room Name - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="573"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="583"/>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
         <translation type="unfinished"></translation>
@@ -2676,26 +2701,20 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="23"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="32"/>
         <source>Hedgewars - Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="28"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="40"/>
         <source>Hedgewars - Information</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="35"/>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>QPushButton</name>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="49"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="68"/>
         <source>default</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2737,11 +2756,36 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="73"/>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="74"/>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="78"/>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="79"/>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="89"/>
         <source>Start</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="90"/>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="608"/>
         <source>Associate file extensions</source>
         <translation type="unfinished"></translation>
@@ -2962,6 +3006,28 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="91"/>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="168"/>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="260"/>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/teamselhelper.cpp" line="58"/>
@@ -2972,17 +3038,17 @@
 <context>
     <name>ThemePrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="84"/>
         <source>Search for a theme:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="120"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="124"/>
         <source>Use selected theme</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_ms.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ms.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -105,17 +105,37 @@
 <context>
     <name>FeedbackDialog</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="114"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="87"/>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="88"/>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="89"/>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="90"/>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="121"/>
         <source>View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="147"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="168"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="175"/>
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
@@ -205,6 +225,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/HWApplication.cpp" line="92"/>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="102"/>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/main.cpp" line="253"/>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -217,52 +255,52 @@
 <context>
     <name>HWChatWidget</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="640"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="641"/>
         <source>%1 has been removed from your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="650"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="651"/>
         <source>%1 has been added to your ignore list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="680"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="681"/>
         <source>%1 has been removed from your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="689"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="690"/>
         <source>%1 has been added to your friends list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="755"/>
-        <source>Stylesheet imported from %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="756"/>
+        <source>Stylesheet imported from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="757"/>
         <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="764"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="765"/>
         <source>Couldn&apos;t read %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="772"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="773"/>
         <source>StyleSheet discarded</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="796"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="797"/>
         <source>StyleSheet saved to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="799"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="800"/>
         <source>Failed to save StyleSheet to %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -285,12 +323,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1050"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1056"/>
         <source>Hedgewars - Nick registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1051"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1057"/>
         <source>This nick is registered, and you haven&apos;t specified a password.
 
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
@@ -299,93 +337,93 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1079"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1085"/>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1084"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1090"/>
         <source>
 
 Your password wasn&apos;t saved either.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1102"/>
         <source>Nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1096"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1102"/>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1107"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1400"/>
         <source>No nickname supplied.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1101"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1376"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1107"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1400"/>
         <source>Hedgewars - Empty nickname</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1133"/>
         <source>Hedgewars - Wrong password</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1123"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1133"/>
         <source>You entered a wrong password.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1144"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1154"/>
         <source>Try Again</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1515"/>
         <source>Hedgewars - Connection error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1493"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1515"/>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1647"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1958"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1672"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1993"/>
         <source>Cannot save record to file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1896"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1923"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1897"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1924"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1985"/>
         <source>Demo name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1950"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1985"/>
         <source>Demo name:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -584,7 +622,7 @@
 <context>
     <name>HWNewNet</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1535"/>
         <source>Quit reason: </source>
         <translation type="unfinished"></translation>
     </message>
@@ -654,6 +692,24 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="35"/>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="39"/>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="47"/>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -679,17 +735,17 @@
 <context>
     <name>HatPrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="83"/>
         <source>Search for a hat:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="119"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/hatprompt.cpp" line="123"/>
         <source>Use selected hat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1127,6 +1183,14 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="128"/>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="91"/>
@@ -1356,52 +1420,52 @@
 <context>
     <name>PageRoomsList</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="53"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="63"/>
         <source>Search for a room:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="80"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="90"/>
         <source>Create room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="84"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="94"/>
         <source>Join room</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="131"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="141"/>
         <source>Room state</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="155"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="165"/>
         <source>Rules:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="169"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="179"/>
         <source>Weapons:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="180"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="190"/>
         <source>Clear filters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="198"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="208"/>
         <source>Admin features</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="200"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="210"/>
         <source>Open server administration page</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="585"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="595"/>
         <source>%1 players online</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1726,33 +1790,33 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="269"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="873"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="874"/>
         <source>Ignore</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="273"/>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="885"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="886"/>
         <source>Add friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="868"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="869"/>
         <source>Unignore</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="880"/>
+        <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="881"/>
         <source>Remove friend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="140"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="150"/>
         <source>Show games in lobby</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="143"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="153"/>
         <source>Show games in-progress</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1760,7 +1824,7 @@
 <context>
     <name>QCheckBox</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="59"/>
+        <location filename="../../../../QTfrontend/ui/dialog/input_password.cpp" line="55"/>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="507"/>
         <source>Save password</source>
         <translation type="unfinished"></translation>
@@ -1951,8 +2015,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="189"/>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="262"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="199"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="272"/>
         <source>Any</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2080,47 +2144,47 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="93"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="100"/>
         <source>Your Email</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="101"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="108"/>
         <source>Summary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="111"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="118"/>
         <source>Send system information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="126"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="133"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="154"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="161"/>
         <source>Type the security code:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="139"/>
+        <source>Tip: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
-        <source>Tip: </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="135"/>
         <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="52"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="56"/>
         <source>Server name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="59"/>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="63"/>
         <source>Server port:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2361,114 +2425,75 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1077"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1083"/>
         <source>Hedgewars - Nick not registered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1452"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1474"/>
         <source>Unable to start server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1510"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1535"/>
         <source>Connection to server is lost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1986"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2021"/>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1987"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2022"/>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="340"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="347"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="24"/>
         <source>Hedgewars - Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="350"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="357"/>
         <source>System Information Preview</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="365"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="376"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="372"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="383"/>
         <source>Failed to generate captcha</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="393"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="400"/>
         <source>Failed to download captcha</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="457"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="464"/>
         <source>Please fill out all fields. Email is optional.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1928"/>
-        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="427"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1963"/>
+        <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="434"/>
         <source>Hedgewars - Success</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1929"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1964"/>
         <source>All file associations have been set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1934"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1969"/>
         <source>File association failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="114"/>
-        <location filename="../../../../QTfrontend/main.cpp" line="274"/>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="115"/>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/main.cpp" line="275"/>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="94"/>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="177"/>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="95"/>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="178"/>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="179"/>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/ui/dialog/upload_video.cpp" line="232"/>
         <source>Error while authenticating at google.com:
 </source>
@@ -2532,22 +2557,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="536"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="546"/>
         <source>Room Name - Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="537"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="547"/>
         <source>Please select room from the list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="572"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="582"/>
         <source>Room Name - Are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="573"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="583"/>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
         <translation type="unfinished"></translation>
@@ -2646,20 +2671,15 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="23"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="32"/>
         <source>Hedgewars - Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="28"/>
+        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="40"/>
         <source>Hedgewars - Information</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../../../../QTfrontend/util/MessageDialog.cpp" line="35"/>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>QPushButton</name>
@@ -2670,7 +2690,6 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="49"/>
-        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="68"/>
         <source>default</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2712,11 +2731,36 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="73"/>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="74"/>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="78"/>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="79"/>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="89"/>
         <source>Start</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="90"/>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="608"/>
         <source>Associate file extensions</source>
         <translation type="unfinished"></translation>
@@ -2932,6 +2976,28 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="91"/>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="168"/>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="260"/>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/teamselhelper.cpp" line="58"/>
@@ -2942,17 +3008,17 @@
 <context>
     <name>ThemePrompt</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="63"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="84"/>
         <source>Search for a theme:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="99"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="120"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="103"/>
+        <location filename="../../../../QTfrontend/ui/widget/themeprompt.cpp" line="124"/>
         <source>Use selected theme</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_nl.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -533,6 +564,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -929,6 +975,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1964,37 +2017,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Cannot create directory %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to start the server: %1.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Video upload - Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2139,10 +2161,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2254,6 +2272,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2364,6 +2402,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_pl.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -183,6 +199,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Nie można utworzyć katalogu %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished">Nie można otworzyć katalogu z danymi:
+%1
+
+Sprawdź poprawność instalacji!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -544,6 +578,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -950,6 +999,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2030,37 +2086,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Błąd</translation>
+        <translation type="obsolete">Błąd</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Nie można utworzyć katalogu %1</translation>
+        <translation type="obsolete">Nie można utworzyć katalogu %1</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Nie można otworzyć katalogu z danymi:
+        <translation type="obsolete">Nie można otworzyć katalogu z danymi:
 %1
 
 Sprawdź poprawność instalacji!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Błąd</translation>
+        <translation type="obsolete">TCP - Błąd</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Nie można uruchomić serwera: %1.</translation>
+        <translation type="obsolete">Nie można uruchomić serwera: %1.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Nie można uruchomić silnika na </translation>
+        <translation type="obsolete">Nie można uruchomić silnika na </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Kod błędu: %1</translation>
+        <translation type="obsolete">Kod błędu: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2209,10 +2265,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2324,6 +2376,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2434,6 +2506,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -173,6 +189,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Não foi possível criar o diretório %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -534,6 +565,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -934,6 +980,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2005,35 +2058,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Não foi possível criar o diretório %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Não foi possível criar o diretório %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Não foi possível iniciar o servidor: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Não foi possível iniciar o servidor: %1.</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2181,10 +2211,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2296,6 +2322,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2407,6 +2453,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -177,6 +193,24 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Não foi possível criar o diretório %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished">Erro ao abrir o diretório:
+%1
+
+Por favor verifica a tua instalação!</translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -538,6 +572,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -939,6 +988,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2019,37 +2075,37 @@
     </message>
     <message>
         <source>Main - Error</source>
-        <translation>Main - Erro</translation>
+        <translation type="obsolete">Main - Erro</translation>
     </message>
     <message>
         <source>Cannot create directory %1</source>
-        <translation>Não foi possível criar o diretório %1</translation>
+        <translation type="obsolete">Não foi possível criar o diretório %1</translation>
     </message>
     <message>
         <source>Failed to open data directory:
 %1
 
 Please check your installation!</source>
-        <translation>Erro ao abrir o diretório:
+        <translation type="obsolete">Erro ao abrir o diretório:
 %1
 
 Por favor verifica a tua instalação!</translation>
     </message>
     <message>
         <source>TCP - Error</source>
-        <translation>TCP - Erro</translation>
+        <translation type="obsolete">TCP - Erro</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation>Não foi possível iniciar o servidor: %1.</translation>
+        <translation type="obsolete">Não foi possível iniciar o servidor: %1.</translation>
     </message>
     <message>
         <source>Unable to run engine at </source>
-        <translation>Não foi possivel lançar o motor de jogo em </translation>
+        <translation type="obsolete">Não foi possivel lançar o motor de jogo em </translation>
     </message>
     <message>
         <source>Error code: %1</source>
-        <translation>Código de erro: %1</translation>
+        <translation type="obsolete">Código de erro: %1</translation>
     </message>
     <message>
         <source>Video upload - Error</source>
@@ -2197,10 +2253,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2312,6 +2364,26 @@
         <source>Upload this video to your Youtube account</source>
         <translation>Enviar este vídeo para a tua conta do Youtube</translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2422,6 +2494,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_ro.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ro.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -179,6 +195,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Cannot create directory %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -539,6 +570,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -945,6 +991,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -1988,35 +2041,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation type="unfinished">Cannot create directory %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>TCP - Error</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Cannot create directory %1</translation>
     </message>
     <message>
         <source>Unable to start the server: %1.</source>
-        <translation type="unfinished">Unable to start the server: %1.</translation>
-    </message>
-    <message>
-        <source>Unable to run engine at </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Error code: %1</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Unable to start the server: %1.</translation>
     </message>
     <message>
         <source>Error while authenticating at google.com:
@@ -2179,10 +2209,6 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hedgewars</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Not all players are ready</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2294,6 +2320,26 @@
         <source>Cancel uploading</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Reset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL in your clipboard. Send this link to your friends ands and they will be able to join you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RoomNamePrompt</name>
@@ -2404,6 +2450,25 @@
     </message>
 </context>
 <context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TeamShowWidget</name>
     <message>
         <source>%1&apos;s team</source>
--- a/share/hedgewars/Data/Locale/hedgewars_ru.ts	Tue Mar 26 18:52:42 2013 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts	Sun Apr 07 22:53:40 2013 +0200
@@ -98,6 +98,22 @@
         <source>Send Feedback</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Please give us feedback!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already known here (english): </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but we may want to contact you.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FreqSpinBox</name>
@@ -183,6 +199,21 @@
             <numerusform></numerusform>
         </translation>
     </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished">Не могу создать папку %1</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWAskQuitDialog</name>
@@ -544,6 +575,21 @@
         <source>Login</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don&apos;t have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>HWUploadVideoDialog</name>
@@ -950,6 +996,13 @@
     </message>
 </context>
 <context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Insert your address here</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PageOptions</name>
     <message>
         <source>New team</source>
@@ -2029,35 +2082,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Main - Error</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Cannot create directory %1</source>
-        <translation>Не могу создать папку %1</translation>
-    </message>
-    <message>
-        <source>Failed to open data directory:
-%1
-
-Please check your installation!</source>
-        <translation type="unfinished"></translation>