Rename the misleadingly-named AmmoSchemeModel to GameSchemeModel
authorWuzzy <Wuzzy2@mail.ru>
Wed, 14 Mar 2018 15:19:08 +0100
changeset 13197 0bc5f618ca7c
parent 13196 f93658732448
child 13198 ceae8e01af98
Rename the misleadingly-named AmmoSchemeModel to GameSchemeModel AmmoSchemeModel was a misleading name, this class was actually used only for game schemes.
QTfrontend/hwform.cpp
QTfrontend/hwform.h
QTfrontend/model/ammoSchemeModel.cpp
QTfrontend/model/ammoSchemeModel.h
QTfrontend/model/gameSchemeModel.cpp
QTfrontend/model/gameSchemeModel.h
QTfrontend/ui/page/pageroomslist.cpp
QTfrontend/ui/page/pageroomslist.h
QTfrontend/ui/page/pagescheme.cpp
QTfrontend/ui/widget/gamecfgwidget.cpp
project_files/hedgewars.pro
share/hedgewars/Data/Locale/hedgewars_ar.ts
share/hedgewars/Data/Locale/hedgewars_bg.ts
share/hedgewars/Data/Locale/hedgewars_cs.ts
share/hedgewars/Data/Locale/hedgewars_da.ts
share/hedgewars/Data/Locale/hedgewars_de.ts
share/hedgewars/Data/Locale/hedgewars_el.ts
share/hedgewars/Data/Locale/hedgewars_en.ts
share/hedgewars/Data/Locale/hedgewars_es.ts
share/hedgewars/Data/Locale/hedgewars_fi.ts
share/hedgewars/Data/Locale/hedgewars_fr.ts
share/hedgewars/Data/Locale/hedgewars_gd.ts
share/hedgewars/Data/Locale/hedgewars_gl.ts
share/hedgewars/Data/Locale/hedgewars_hu.ts
share/hedgewars/Data/Locale/hedgewars_it.ts
share/hedgewars/Data/Locale/hedgewars_ja.ts
share/hedgewars/Data/Locale/hedgewars_ko.ts
share/hedgewars/Data/Locale/hedgewars_lt.ts
share/hedgewars/Data/Locale/hedgewars_ms.ts
share/hedgewars/Data/Locale/hedgewars_nl.ts
share/hedgewars/Data/Locale/hedgewars_pl.ts
share/hedgewars/Data/Locale/hedgewars_pt_BR.ts
share/hedgewars/Data/Locale/hedgewars_pt_PT.ts
share/hedgewars/Data/Locale/hedgewars_ro.ts
share/hedgewars/Data/Locale/hedgewars_ru.ts
share/hedgewars/Data/Locale/hedgewars_sk.ts
share/hedgewars/Data/Locale/hedgewars_sv.ts
share/hedgewars/Data/Locale/hedgewars_tr_TR.ts
share/hedgewars/Data/Locale/hedgewars_uk.ts
share/hedgewars/Data/Locale/hedgewars_zh_CN.ts
share/hedgewars/Data/Locale/hedgewars_zh_TW.ts
--- a/QTfrontend/hwform.cpp	Wed Mar 14 14:42:50 2018 +0100
+++ b/QTfrontend/hwform.cpp	Wed Mar 14 15:19:08 2018 +0100
@@ -90,7 +90,7 @@
 #include "chatwidget.h"
 #include "input_ip.h"
 #include "input_password.h"
-#include "ammoSchemeModel.h"
+#include "gameSchemeModel.h"
 #include "bgwidget.h"
 #include "drawmapwidget.h"
 #include "mouseoverfilter.h"
@@ -347,10 +347,10 @@
 
     connect(ui.pageVideos, SIGNAL(goBack()), config, SLOT(SaveVideosOptions()));
 
-    ammoSchemeModel = new AmmoSchemeModel(this, cfgdir->absolutePath() + "/Schemes/Game");
-    ui.pageScheme->setModel(ammoSchemeModel);
-    ui.pageMultiplayer->gameCFG->GameSchemes->setModel(ammoSchemeModel);
-    ui.pageOptions->SchemesName->setModel(ammoSchemeModel);
+    gameSchemeModel = new GameSchemeModel(this, cfgdir->absolutePath() + "/Schemes/Game");
+    ui.pageScheme->setModel(gameSchemeModel);
+    ui.pageMultiplayer->gameCFG->GameSchemes->setModel(gameSchemeModel);
+    ui.pageOptions->SchemesName->setModel(gameSchemeModel);
 
     wBackground = new BGWidget(this);
     wBackground->setFixedSize(this->width(), this->height());
@@ -919,7 +919,7 @@
     //if (curid == ID_PAGE_NETGAME && (!game || game->gameState != gsStarted)) hwnet->partRoom();
 
     if (curid == ID_PAGE_SCHEME)
-        ammoSchemeModel->Save();
+        gameSchemeModel->Save();
 
 #if (QT_VERSION >= 0x040600)
     /**Start animation :**/
@@ -1079,14 +1079,14 @@
 void HWForm::DeleteScheme()
 {
     ui.pageScheme->selectScheme->setCurrentIndex(ui.pageOptions->SchemesName->currentIndex());
-    if (ui.pageOptions->SchemesName->currentIndex() < ammoSchemeModel->numberOfDefaultSchemes)
+    if (ui.pageOptions->SchemesName->currentIndex() < gameSchemeModel->numberOfDefaultSchemes)
     {
         MessageDialog::ShowErrorMessage(QMessageBox::tr("Cannot delete default scheme '%1'!").arg(ui.pageOptions->SchemesName->currentText()), this);
     }
     else
     {
         ui.pageScheme->deleteRow();
-        ammoSchemeModel->Save();
+        gameSchemeModel->Save();
     }
 }
 
@@ -1899,7 +1899,7 @@
     ui.pageNetGame->restrictJoins->setChecked(false);
     ui.pageNetGame->restrictTeamAdds->setChecked(false);
     ui.pageNetGame->restrictUnregistered->setChecked(false);
-    ui.pageNetGame->pGameCFG->GameSchemes->setModel(ammoSchemeModel);
+    ui.pageNetGame->pGameCFG->GameSchemes->setModel(gameSchemeModel);
     ui.pageNetGame->pGameCFG->setMaster(true);
     ui.pageNetGame->pNetTeamsWidget->setInteractivity(true);
 
@@ -1936,7 +1936,7 @@
 
     if (hwnet)
     {
-        NetAmmoSchemeModel * netAmmo = new NetAmmoSchemeModel(hwnet);
+        NetGameSchemeModel * netAmmo = new NetGameSchemeModel(hwnet);
         connect(hwnet, SIGNAL(netSchemeConfig(QStringList)), netAmmo, SLOT(setNetSchemeConfig(QStringList)));
 
         ui.pageNetGame->pGameCFG->GameSchemes->setModel(netAmmo);
--- a/QTfrontend/hwform.h	Wed Mar 14 14:42:50 2018 +0100
+++ b/QTfrontend/hwform.h	Wed Mar 14 15:19:08 2018 +0100
@@ -47,7 +47,7 @@
 class GameUIConfig;
 class HWNetRegisterServer;
 class QCloseEvent;
-class AmmoSchemeModel;
+class GameSchemeModel;
 class QSettings;
 class QSignalMapper;
 
@@ -197,7 +197,7 @@
         QPointer<HWTeam> editedTeam;
         QPointer<HWNewNet> hwnet;
         HWNamegen * namegen;
-        AmmoSchemeModel * ammoSchemeModel;
+        GameSchemeModel * gameSchemeModel;
         QStack<int> PagesStack;
         QString previousCampaignName;
         QString previousTeamName;
--- a/QTfrontend/model/ammoSchemeModel.cpp	Wed Mar 14 14:42:50 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1050 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <QDebug>
-#include <QModelIndex>
-#include <QFile>
-#include <QTextStream>
-#include <QHash>
-
-#include "ammoSchemeModel.h"
-#include "hwconsts.h"
-
-QList<QVariant> defaultScheme = QList<QVariant>()
-                                << QVariant("Default")     // name           0
-                                << QVariant(false)         // fortsmode      1
-                                << QVariant(false)         // team divide    2
-                                << QVariant(false)         // solid land     3
-                                << QVariant(false)         // border         4
-                                << QVariant(false)         // low gravity    5
-                                << QVariant(false)         // laser sight    6
-                                << QVariant(false)         // invulnerable   7
-                                << QVariant(false)         // reset health   8
-                                << QVariant(false)         // vampiric       9
-                                << QVariant(false)         // karma          10
-                                << QVariant(false)         // artillery      11
-                                << QVariant(true)          // random order   12
-                                << QVariant(false)         // king           13
-                                << QVariant(false)         // place hog      14
-                                << QVariant(false)         // shared ammo    15
-                                << QVariant(false)         // disable girders 16
-                                << QVariant(false)         // disable land objects 17
-                                << QVariant(false)         // AI survival    18
-                                << QVariant(false)         // inf. attack    19
-                                << QVariant(false)         // reset weps     20
-                                << QVariant(false)         // per hog ammo   21
-                                << QVariant(false)         // no wind        22
-                                << QVariant(false)         // more wind      23
-                                << QVariant(false)         // tag team       24
-                                << QVariant(false)         // bottom border  25
-                                << QVariant(100)           // damage modfier 26
-                                << QVariant(45)            // turn time      27
-                                << QVariant(100)           // init health    28
-                                << QVariant(15)            // sudden death   29
-                                << QVariant(5)             // case prob      30
-                                << QVariant(3)             // mines time     31
-                                << QVariant(4)             // mines number   32
-                                << QVariant(0)             // mine dud pct   33
-                                << QVariant(2)             // explosives     34
-                                << QVariant(0)             // air mines      35
-                                << QVariant(35)            // health case pct 36
-                                << QVariant(25)            // health case amt 37
-                                << QVariant(47)            // water rise amt 38
-                                << QVariant(5)             // health dec amt 39
-                                << QVariant(100)           // rope modfier   40
-                                << QVariant(100)           // get away time  41
-                                << QVariant(0)             // world edge     42
-                                << QVariant()              // scriptparam    43
-                                ;
-
-AmmoSchemeModel::AmmoSchemeModel(QObject* parent, const QString & directory) :
-    QAbstractTableModel(parent),
-    fileConfig(cfgdir->absolutePath() + "/schemes.ini", QSettings::IniFormat)
-{
-    predefSchemesNames = QStringList()
-                         << "Default"
-                         << "Pro Mode"
-                         << "Shoppa"
-                         << "Clean Slate"
-                         << "Minefield"
-                         << "Barrel Mayhem"
-                         << "Tunnel Hogs"
-                         << "Timeless"
-                         << "Thinking with Portals"
-                         << "King Mode"
-                         << "Construction Mode"
-                         << "Space Invasion"
-                         << "HedgeEditor"
-                         ;
-
-    numberOfDefaultSchemes = predefSchemesNames.size();
-
-    spNames = QStringList()
-              << "name"                //  0 | Name should be first forever
-              << "fortsmode"           //  1
-              << "divteams"            //  2
-              << "solidland"           //  3
-              << "border"              //  4
-              << "lowgrav"             //  5
-              << "laser"               //  6
-              << "invulnerability"     //  7
-              << "resethealth"         //  8
-              << "vampiric"            //  9
-              << "karma"               // 10
-              << "artillery"           // 11
-              << "randomorder"         // 12
-              << "king"                // 13
-              << "placehog"            // 14
-              << "sharedammo"          // 15
-              << "disablegirders"      // 16
-              << "disablelandobjects"  // 17
-              << "aisurvival"          // 18
-              << "infattack"           // 19
-              << "resetweps"           // 20
-              << "perhogammo"          // 21
-              << "disablewind"         // 22
-              << "morewind"            // 23
-              << "tagteam"             // 24
-              << "bottomborder"        // 25
-              << "damagefactor"        // 26
-              << "turntime"            // 27
-              << "health"              // 28
-              << "suddendeath"         // 29
-              << "caseprobability"     // 30
-              << "minestime"           // 31
-              << "minesnum"            // 32
-              << "minedudpct"          // 33
-              << "explosives"          // 34
-              << "airmines"            // 35
-              << "healthprobability"   // 36
-              << "healthcaseamount"    // 37
-              << "waterrise"           // 38
-              << "healthdecrease"      // 39
-              << "ropepct"             // 40
-              << "getawaytime"         // 41
-              << "worldedge"           // 42
-              << "scriptparam"         // scriptparam    43
-              ;
-
-    QList<QVariant> proMode;
-    proMode
-            << predefSchemesNames[1]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(true)          // shared ammo    15
-            << QVariant(false)         // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(15)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(0)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(0)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(2)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> shoppa;
-    shoppa
-            << predefSchemesNames[2]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(true)          // solid land     3
-            << QVariant(true)          // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(true)          // shared ammo    15
-            << QVariant(true)          // disable girders 16
-            << QVariant(true)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(true)          // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(30)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(50)            // sudden death   29
-            << QVariant(1)             // case prob      30
-            << QVariant(0)             // mines time     31
-            << QVariant(0)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(0)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(0)             // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(0)             // water rise amt 38
-            << QVariant(0)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> cleanslate;
-    cleanslate
-            << predefSchemesNames[3]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(true)          // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(false)         // shared ammo    15
-            << QVariant(false)         // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(true)          // inf. attack    19
-            << QVariant(true)          // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(45)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(5)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(4)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(2)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> minefield;
-    minefield
-            << predefSchemesNames[4]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(true)          // shared ammo    15
-            << QVariant(true)          // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(30)            // turn time      27
-            << QVariant(50)            // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(0)             // case prob      30
-            << QVariant(0)             // mines time     31
-            << QVariant(200)           // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(0)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> barrelmayhem;
-    barrelmayhem
-            << predefSchemesNames[5]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(true)          // shared ammo    15
-            << QVariant(false)         // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(30)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(0)             // case prob      30
-            << QVariant(0)             // mines time     31
-            << QVariant(0)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(200)           // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> tunnelhogs;
-    tunnelhogs
-            << predefSchemesNames[6]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(true)          // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(true)          // shared ammo    15
-            << QVariant(true)          // disable girders 16
-            << QVariant(true)          // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(30)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(5)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(10)            // mines number   32
-            << QVariant(10)            // mine dud pct   33
-            << QVariant(10)            // explosives     34
-            << QVariant(4)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> timeless;
-    timeless
-            << predefSchemesNames[7]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(false)         // shared ammo    15
-            << QVariant(false)         // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(true)          // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(9999)          // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(5)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(5)             // mines number   32
-            << QVariant(10)            // mine dud pct   33
-            << QVariant(2)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(30)            // health case amt 37
-            << QVariant(0)             // water rise amt 38
-            << QVariant(0)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> thinkingportals;
-    thinkingportals
-            << predefSchemesNames[8]   // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(true)          // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(false)         // shared ammo    15
-            << QVariant(false)         // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(45)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(2)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(5)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(5)             // explosives     34
-            << QVariant(4)             // air mines      35
-            << QVariant(25)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> kingmode;
-    kingmode
-            << predefSchemesNames[9]  // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(true)          // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(false)         // shared ammo    15
-            << QVariant(false)         // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(45)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(5)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(4)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(2)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-    QList<QVariant> construction;
-    construction
-            << predefSchemesNames[10]  // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)          // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(false)         // shared ammo    15
-            << QVariant(true)         // disable girders 16
-            << QVariant(true)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(true)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(true)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(45)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(15)            // sudden death   29
-            << QVariant(5)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(0)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(0)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(47)            // water rise amt 38
-            << QVariant(5)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            // NOTE: If you change this, also change the defaults in the Construction Mode script
-            << QVariant("initialenergy=550, energyperround=50, maxenergy=1000, cratesperround=5") // scriptparam    43
-            ;
-
-    QList<QVariant> spaceinvasion;
-    spaceinvasion
-            << predefSchemesNames[11]  // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(true)          // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(false)         // shared ammo    15
-            << QVariant(true)          // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(false)         // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(45)            // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(50)            // sudden death   29
-            << QVariant(0)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(0)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(0)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(0)             // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(0)             // water rise amt 38
-            << QVariant(0)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            // NOTE: If you change this, also change the defaults in the Space Invasion script
-            << QVariant("rounds=3, shield=30, barrels=5, pings=2, barrelbonus=3, shieldbonus=30, timebonus=4") // scriptparam    43
-            ;
-
-    QList<QVariant> hedgeeditor;
-    hedgeeditor
-            << predefSchemesNames[12]  // name           0
-            << QVariant(false)         // fortsmode      1
-            << QVariant(false)         // team divide    2
-            << QVariant(false)         // solid land     3
-            << QVariant(false)         // border         4
-            << QVariant(false)         // low gravity    5
-            << QVariant(false)         // laser sight    6
-            << QVariant(false)         // invulnerable   7
-            << QVariant(false)         // reset health   8
-            << QVariant(false)         // vampiric       9
-            << QVariant(false)         // karma          10
-            << QVariant(false)         // artillery      11
-            << QVariant(false)         // random order   12
-            << QVariant(false)         // king           13
-            << QVariant(false)         // place hog      14
-            << QVariant(false)         // shared ammo    15
-            << QVariant(false)         // disable girders 16
-            << QVariant(false)         // disable land objects 17
-            << QVariant(false)         // AI survival    18
-            << QVariant(false)         // inf. attack    19
-            << QVariant(false)         // reset weps     20
-            << QVariant(true)          // per hog ammo   21
-            << QVariant(false)         // no wind        22
-            << QVariant(false)         // more wind      23
-            << QVariant(false)         // tag team       24
-            << QVariant(false)         // bottom border  25
-            << QVariant(100)           // damage modfier 26
-            << QVariant(9999)          // turn time      27
-            << QVariant(100)           // init health    28
-            << QVariant(50)            // sudden death   29
-            << QVariant(0)             // case prob      30
-            << QVariant(3)             // mines time     31
-            << QVariant(0)             // mines number   32
-            << QVariant(0)             // mine dud pct   33
-            << QVariant(0)             // explosives     34
-            << QVariant(0)             // air mines      35
-            << QVariant(35)            // health case pct 36
-            << QVariant(25)            // health case amt 37
-            << QVariant(0)            // water rise amt 38
-            << QVariant(0)             // health dec amt 39
-            << QVariant(100)           // rope modfier   40
-            << QVariant(100)           // get away time  41
-            << QVariant(0)             // world edge     42
-            << QVariant()              // scriptparam    43
-            ;
-
-
-
-    schemes.append(defaultScheme);
-    schemes.append(proMode);
-    schemes.append(shoppa);
-    schemes.append(cleanslate);
-    schemes.append(minefield);
-    schemes.append(barrelmayhem);
-    schemes.append(tunnelhogs);
-    schemes.append(timeless);
-    schemes.append(thinkingportals);
-    schemes.append(kingmode);
-    schemes.append(construction);
-    schemes.append(spaceinvasion);
-    schemes.append(hedgeeditor);
-
-    if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) {
-        QDir().mkdir(cfgdir->absolutePath() + "/Schemes");
-    }
-    if (!QDir(directory).exists()) {
-        QDir().mkdir(directory);
-
-        qDebug("No /Schemes/Game directory found. Trying to import game schemes from schemes.ini.");
-
-        int size = fileConfig.beginReadArray("schemes");
-        int imported = 0;
-        for (int i = 0; i < size; ++i)
-        {
-            fileConfig.setArrayIndex(i);
-
-            QString schemeName = fileConfig.value(spNames[0]).toString();
-            if (!schemeName.isNull() && !predefSchemesNames.contains(schemeName))
-            {
-                QList<QVariant> scheme;
-                QFile file(directory + "/" + schemeName + ".hwg");
-
-                // Add keys to scheme info and create file
-                if (file.open(QIODevice::WriteOnly)) {
-                    QTextStream stream(&file);
-
-                    for (int k = 0; k < spNames.size(); ++k) {
-                        scheme << fileConfig.value(spNames[k], defaultScheme[k]);
-
-                        // File handling
-                        // We skip the name key (k==0), it is not stored redundantly in file.
-                        // The file name is used for that already.
-                        if(k != 0) {
-                            // The file is just a list of key=value pairs
-                            stream << spNames[k] << "=" << fileConfig.value(spNames[k], defaultScheme[k]).toString();
-                            stream << endl;
-                        }
-                    }
-                    file.close();
-                }
-                imported++;
-
-                schemes.append(scheme);
-            }
-        }
-        qDebug("%d game scheme(s) imported.", imported);
-        fileConfig.endArray();
-    } else {
-        QStringList scheme_dir = QDir(directory).entryList(QDir::Files);
-
-        for(int i = 0; i < scheme_dir.size(); i++)
-        {
-            QList<QVariant> scheme;
-            QFile file(directory + "/" + scheme_dir[i]);
-
-            // Chop off file name suffix
-            QString schemeName = scheme_dir[i];
-            if (schemeName.endsWith(".hwg", Qt::CaseInsensitive)) {
-                schemeName.chop(4);
-            }
-            // Parse game scheme file
-            if (file.open(QIODevice::ReadOnly)) {
-                QTextStream stream(&file);
-                QString line, key, value;
-                QHash<QString, QString> fileKeyValues;
-                do {
-                    // Read line and get key and value
-                    line = stream.readLine();
-                    key = line.section(QChar('='), 0, 0);
-                    value = line.section(QChar('='), 1);
-                    if(!key.isNull() && !value.isNull()) {
-                        fileKeyValues[key] = value;
-                    }
-                } while (!line.isNull());
-
-                // Add scheme name manually
-                scheme << schemeName;
-                // Add other keys from the QHash.
-                for (int k = 1; k < spNames.size(); ++k) {
-                    key = spNames[k];
-                    if (fileKeyValues.contains(key)) {
-                        scheme << fileKeyValues.value(key);
-                    } else {
-                        // Use default value in case the key is not set
-                        scheme << defaultScheme[k];
-                    }
-                }
-                schemes.append(scheme);
-
-                file.close();
-            }
-        }
-    }
-}
-
-QVariant AmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    Q_UNUSED(section);
-    Q_UNUSED(orientation);
-    Q_UNUSED(role);
-
-    return QVariant();
-}
-
-int AmmoSchemeModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return schemes.size();
-}
-
-int AmmoSchemeModel::columnCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return defaultScheme.size();
-}
-
-bool AmmoSchemeModel::hasScheme(QString name)
-{
-    for(int i=0; i<schemes.size(); i++)
-    {
-        if(schemes[i][0] == name)
-        {
-            return true;
-        }
-    }
-    return false;
-}
-
-Qt::ItemFlags AmmoSchemeModel::flags(const QModelIndex & index) const
-{
-    Q_UNUSED(index);
-
-    return
-        Qt::ItemIsEnabled
-        | Qt::ItemIsSelectable
-        | Qt::ItemIsEditable;
-}
-
-bool AmmoSchemeModel::setData(const QModelIndex & index, const QVariant & value, int role)
-{
-    if (!index.isValid() || index.row() < numberOfDefaultSchemes
-            || index.row() >= schemes.size()
-            || index.column() >= defaultScheme.size()
-            || role != Qt::EditRole)
-        return false;
-
-    schemes[index.row()][index.column()] = value;
-
-    emit dataChanged(index, index);
-    return true;
-}
-
-bool AmmoSchemeModel::insertRows(int row, int count, const QModelIndex & parent)
-{
-    Q_UNUSED(count);
-
-    beginInsertRows(parent, schemes.size(), schemes.size());
-
-    if (row == -1)
-    {
-        QList<QVariant> newScheme = defaultScheme;
-
-        QString newName = tr("New");
-        if(hasScheme(newName))
-        {
-            //name already used -> look for an appropriate name:
-            int i=2;
-            while(hasScheme(newName = tr("New (%1)").arg(i++))) ;
-        }
-        newScheme[0] = QVariant(newName);
-        schemes.insert(schemes.size(), newScheme);
-    }
-    else
-    {
-        QList<QVariant> newScheme = schemes[row];
-        QString oldName = newScheme[0].toString();
-        QString newName = tr("Copy of %1").arg(oldName);
-        if(hasScheme(newName))
-        {
-            //name already used -> look for an appropriate name:
-            int i=2;
-            while(hasScheme(newName = tr("Copy of %1 (%2)").arg(oldName).arg(i++)));
-        }
-        newScheme[0] = QVariant(newName);
-        schemes.insert(schemes.size(), newScheme);
-    }
-
-    endInsertRows();
-
-    return true;
-}
-
-bool AmmoSchemeModel::removeRows(int row, int count, const QModelIndex & parent)
-{
-    if(count != 1
-            || row < numberOfDefaultSchemes
-            || row >= schemes.size())
-        return false;
-
-    beginRemoveRows(parent, row, row);
-
-    QList<QVariant> scheme = schemes[row];
-    int j = spNames.indexOf("name");
-    QFile(cfgdir->absolutePath() + "/Schemes/Game/" + scheme[j].toString() + ".hwg").remove();
-    schemes.removeAt(row);
-
-    endRemoveRows();
-
-    return true;
-}
-
-QVariant AmmoSchemeModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid() || index.row() < 0
-            || index.row() >= schemes.size()
-            || index.column() >= defaultScheme.size()
-            || (role != Qt::EditRole && role != Qt::DisplayRole)
-       )
-        return QVariant();
-
-    return schemes[index.row()][index.column()];
-}
-
-void AmmoSchemeModel::Save()
-{
-    fileConfig.beginWriteArray("schemes");
-    for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i)
-    {
-        QList<QVariant> scheme = schemes[i + numberOfDefaultSchemes];
-        int j = spNames.indexOf("name");
-
-        QString schemeName = scheme[j].toString();
-        QFile file(cfgdir->absolutePath() + "/Schemes/Game/" + schemeName + ".hwg");
-
-        if (file.open(QIODevice::WriteOnly)) {
-            QTextStream stream(&file);
-            for (int k = 0; k < spNames.size(); ++k) {
-                // We skip the name key
-                if(k != j) {
-                    // The file is just a list of key=value pairs
-                    stream << spNames[k] << "=" << scheme[k].toString();
-                    stream << endl;
-                }
-            }
-            file.close();
-        }
-    }
-    fileConfig.endArray();
-}
-
-
-NetAmmoSchemeModel::NetAmmoSchemeModel(QObject * parent) :
-    QAbstractTableModel(parent)
-{
-    netScheme = defaultScheme;
-}
-
-QVariant NetAmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    Q_UNUSED(section);
-    Q_UNUSED(orientation);
-    Q_UNUSED(role);
-
-    return QVariant();
-}
-
-int NetAmmoSchemeModel::rowCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return 1;
-}
-
-int NetAmmoSchemeModel::columnCount(const QModelIndex & parent) const
-{
-    if (parent.isValid())
-        return 0;
-    else
-        return defaultScheme.size();
-}
-
-QVariant NetAmmoSchemeModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid() || index.row() < 0
-            || index.row() > 1
-            || index.column() >= defaultScheme.size()
-            || (role != Qt::EditRole && role != Qt::DisplayRole)
-       )
-        return QVariant();
-
-    return netScheme[index.column()];
-}
-
-void NetAmmoSchemeModel::setNetSchemeConfig(QStringList cfg)
-{
-    if(cfg.size() != netScheme.size())
-    {
-        qWarning("Incorrect scheme cfg size");
-        return;
-    }
-
-    beginResetModel();
-
-    cfg[cfg.size()-1] = cfg[cfg.size()-1].mid(1);
-
-    for(int i = 0; i < cfg.size(); ++i)
-        netScheme[i] = QVariant(cfg[i]);
-
-    endResetModel();
-}
--- a/QTfrontend/model/ammoSchemeModel.h	Wed Mar 14 14:42:50 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef _AMMO_SCHEME_MODEL_INCLUDED
-#define _AMMO_SCHEME_MODEL_INCLUDED
-
-#include <QAbstractTableModel>
-#include <QStringList>
-#include <QList>
-#include <QSettings>
-
-class AmmoSchemeModel : public QAbstractTableModel
-{
-        Q_OBJECT
-
-    public:
-        AmmoSchemeModel(QObject * parent, const QString & fileName);
-
-        QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-        int rowCount(const QModelIndex & parent) const;
-        int columnCount(const QModelIndex & parent) const;
-        bool hasScheme(QString name);
-        Qt::ItemFlags flags(const QModelIndex & index) const;
-        bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
-        bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex());
-        bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
-        QVariant data(const QModelIndex &index, int role) const;
-
-        int numberOfDefaultSchemes;
-        QStringList predefSchemesNames;
-        QStringList spNames;
-
-    public slots:
-        void Save();
-
-//    signals:
-//        void dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight);
-
-    protected:
-        QList< QList<QVariant> > schemes;
-
-    private:
-        QSettings fileConfig;
-};
-
-class NetAmmoSchemeModel : public QAbstractTableModel
-{
-        Q_OBJECT
-
-    public:
-        NetAmmoSchemeModel(QObject * parent);
-
-        QVariant headerData(int section, Qt::Orientation orientation, int role) const;
-        int rowCount(const QModelIndex & parent) const;
-        int columnCount(const QModelIndex & parent) const;
-        QVariant data(const QModelIndex &index, int role) const;
-
-    public slots:
-        void setNetSchemeConfig(QStringList cfg);
-
-    private:
-        QList<QVariant> netScheme;
-};
-
-#endif // _AMMO_SCHEME_MODEL_INCLUDED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/model/gameSchemeModel.cpp	Wed Mar 14 15:19:08 2018 +0100
@@ -0,0 +1,1050 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <QDebug>
+#include <QModelIndex>
+#include <QFile>
+#include <QTextStream>
+#include <QHash>
+
+#include "gameSchemeModel.h"
+#include "hwconsts.h"
+
+QList<QVariant> defaultScheme = QList<QVariant>()
+                                << QVariant("Default")     // name           0
+                                << QVariant(false)         // fortsmode      1
+                                << QVariant(false)         // team divide    2
+                                << QVariant(false)         // solid land     3
+                                << QVariant(false)         // border         4
+                                << QVariant(false)         // low gravity    5
+                                << QVariant(false)         // laser sight    6
+                                << QVariant(false)         // invulnerable   7
+                                << QVariant(false)         // reset health   8
+                                << QVariant(false)         // vampiric       9
+                                << QVariant(false)         // karma          10
+                                << QVariant(false)         // artillery      11
+                                << QVariant(true)          // random order   12
+                                << QVariant(false)         // king           13
+                                << QVariant(false)         // place hog      14
+                                << QVariant(false)         // shared ammo    15
+                                << QVariant(false)         // disable girders 16
+                                << QVariant(false)         // disable land objects 17
+                                << QVariant(false)         // AI survival    18
+                                << QVariant(false)         // inf. attack    19
+                                << QVariant(false)         // reset weps     20
+                                << QVariant(false)         // per hog ammo   21
+                                << QVariant(false)         // no wind        22
+                                << QVariant(false)         // more wind      23
+                                << QVariant(false)         // tag team       24
+                                << QVariant(false)         // bottom border  25
+                                << QVariant(100)           // damage modfier 26
+                                << QVariant(45)            // turn time      27
+                                << QVariant(100)           // init health    28
+                                << QVariant(15)            // sudden death   29
+                                << QVariant(5)             // case prob      30
+                                << QVariant(3)             // mines time     31
+                                << QVariant(4)             // mines number   32
+                                << QVariant(0)             // mine dud pct   33
+                                << QVariant(2)             // explosives     34
+                                << QVariant(0)             // air mines      35
+                                << QVariant(35)            // health case pct 36
+                                << QVariant(25)            // health case amt 37
+                                << QVariant(47)            // water rise amt 38
+                                << QVariant(5)             // health dec amt 39
+                                << QVariant(100)           // rope modfier   40
+                                << QVariant(100)           // get away time  41
+                                << QVariant(0)             // world edge     42
+                                << QVariant()              // scriptparam    43
+                                ;
+
+GameSchemeModel::GameSchemeModel(QObject* parent, const QString & directory) :
+    QAbstractTableModel(parent),
+    fileConfig(cfgdir->absolutePath() + "/schemes.ini", QSettings::IniFormat)
+{
+    predefSchemesNames = QStringList()
+                         << "Default"
+                         << "Pro Mode"
+                         << "Shoppa"
+                         << "Clean Slate"
+                         << "Minefield"
+                         << "Barrel Mayhem"
+                         << "Tunnel Hogs"
+                         << "Timeless"
+                         << "Thinking with Portals"
+                         << "King Mode"
+                         << "Construction Mode"
+                         << "Space Invasion"
+                         << "HedgeEditor"
+                         ;
+
+    numberOfDefaultSchemes = predefSchemesNames.size();
+
+    spNames = QStringList()
+              << "name"                //  0 | Name should be first forever
+              << "fortsmode"           //  1
+              << "divteams"            //  2
+              << "solidland"           //  3
+              << "border"              //  4
+              << "lowgrav"             //  5
+              << "laser"               //  6
+              << "invulnerability"     //  7
+              << "resethealth"         //  8
+              << "vampiric"            //  9
+              << "karma"               // 10
+              << "artillery"           // 11
+              << "randomorder"         // 12
+              << "king"                // 13
+              << "placehog"            // 14
+              << "sharedammo"          // 15
+              << "disablegirders"      // 16
+              << "disablelandobjects"  // 17
+              << "aisurvival"          // 18
+              << "infattack"           // 19
+              << "resetweps"           // 20
+              << "perhogammo"          // 21
+              << "disablewind"         // 22
+              << "morewind"            // 23
+              << "tagteam"             // 24
+              << "bottomborder"        // 25
+              << "damagefactor"        // 26
+              << "turntime"            // 27
+              << "health"              // 28
+              << "suddendeath"         // 29
+              << "caseprobability"     // 30
+              << "minestime"           // 31
+              << "minesnum"            // 32
+              << "minedudpct"          // 33
+              << "explosives"          // 34
+              << "airmines"            // 35
+              << "healthprobability"   // 36
+              << "healthcaseamount"    // 37
+              << "waterrise"           // 38
+              << "healthdecrease"      // 39
+              << "ropepct"             // 40
+              << "getawaytime"         // 41
+              << "worldedge"           // 42
+              << "scriptparam"         // scriptparam    43
+              ;
+
+    QList<QVariant> proMode;
+    proMode
+            << predefSchemesNames[1]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(true)          // shared ammo    15
+            << QVariant(false)         // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(15)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(0)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(0)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(2)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> shoppa;
+    shoppa
+            << predefSchemesNames[2]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(true)          // solid land     3
+            << QVariant(true)          // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(true)          // shared ammo    15
+            << QVariant(true)          // disable girders 16
+            << QVariant(true)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(true)          // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(30)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(50)            // sudden death   29
+            << QVariant(1)             // case prob      30
+            << QVariant(0)             // mines time     31
+            << QVariant(0)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(0)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(0)             // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(0)             // water rise amt 38
+            << QVariant(0)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> cleanslate;
+    cleanslate
+            << predefSchemesNames[3]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(true)          // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(false)         // shared ammo    15
+            << QVariant(false)         // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(true)          // inf. attack    19
+            << QVariant(true)          // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(45)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(5)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(4)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(2)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> minefield;
+    minefield
+            << predefSchemesNames[4]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(true)          // shared ammo    15
+            << QVariant(true)          // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(30)            // turn time      27
+            << QVariant(50)            // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(0)             // case prob      30
+            << QVariant(0)             // mines time     31
+            << QVariant(200)           // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(0)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> barrelmayhem;
+    barrelmayhem
+            << predefSchemesNames[5]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(true)          // shared ammo    15
+            << QVariant(false)         // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(30)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(0)             // case prob      30
+            << QVariant(0)             // mines time     31
+            << QVariant(0)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(200)           // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> tunnelhogs;
+    tunnelhogs
+            << predefSchemesNames[6]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(true)          // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(true)          // shared ammo    15
+            << QVariant(true)          // disable girders 16
+            << QVariant(true)          // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(30)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(5)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(10)            // mines number   32
+            << QVariant(10)            // mine dud pct   33
+            << QVariant(10)            // explosives     34
+            << QVariant(4)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> timeless;
+    timeless
+            << predefSchemesNames[7]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(false)         // shared ammo    15
+            << QVariant(false)         // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(true)          // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(9999)          // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(5)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(5)             // mines number   32
+            << QVariant(10)            // mine dud pct   33
+            << QVariant(2)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(30)            // health case amt 37
+            << QVariant(0)             // water rise amt 38
+            << QVariant(0)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> thinkingportals;
+    thinkingportals
+            << predefSchemesNames[8]   // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(true)          // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(false)         // shared ammo    15
+            << QVariant(false)         // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(45)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(2)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(5)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(5)             // explosives     34
+            << QVariant(4)             // air mines      35
+            << QVariant(25)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> kingmode;
+    kingmode
+            << predefSchemesNames[9]  // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(true)          // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(false)         // shared ammo    15
+            << QVariant(false)         // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(45)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(5)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(4)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(2)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+    QList<QVariant> construction;
+    construction
+            << predefSchemesNames[10]  // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)          // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(false)         // shared ammo    15
+            << QVariant(true)         // disable girders 16
+            << QVariant(true)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(true)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(true)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(45)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(15)            // sudden death   29
+            << QVariant(5)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(0)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(0)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(47)            // water rise amt 38
+            << QVariant(5)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            // NOTE: If you change this, also change the defaults in the Construction Mode script
+            << QVariant("initialenergy=550, energyperround=50, maxenergy=1000, cratesperround=5") // scriptparam    43
+            ;
+
+    QList<QVariant> spaceinvasion;
+    spaceinvasion
+            << predefSchemesNames[11]  // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(true)          // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(false)         // shared ammo    15
+            << QVariant(true)          // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(false)         // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(45)            // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(50)            // sudden death   29
+            << QVariant(0)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(0)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(0)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(0)             // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(0)             // water rise amt 38
+            << QVariant(0)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            // NOTE: If you change this, also change the defaults in the Space Invasion script
+            << QVariant("rounds=3, shield=30, barrels=5, pings=2, barrelbonus=3, shieldbonus=30, timebonus=4") // scriptparam    43
+            ;
+
+    QList<QVariant> hedgeeditor;
+    hedgeeditor
+            << predefSchemesNames[12]  // name           0
+            << QVariant(false)         // fortsmode      1
+            << QVariant(false)         // team divide    2
+            << QVariant(false)         // solid land     3
+            << QVariant(false)         // border         4
+            << QVariant(false)         // low gravity    5
+            << QVariant(false)         // laser sight    6
+            << QVariant(false)         // invulnerable   7
+            << QVariant(false)         // reset health   8
+            << QVariant(false)         // vampiric       9
+            << QVariant(false)         // karma          10
+            << QVariant(false)         // artillery      11
+            << QVariant(false)         // random order   12
+            << QVariant(false)         // king           13
+            << QVariant(false)         // place hog      14
+            << QVariant(false)         // shared ammo    15
+            << QVariant(false)         // disable girders 16
+            << QVariant(false)         // disable land objects 17
+            << QVariant(false)         // AI survival    18
+            << QVariant(false)         // inf. attack    19
+            << QVariant(false)         // reset weps     20
+            << QVariant(true)          // per hog ammo   21
+            << QVariant(false)         // no wind        22
+            << QVariant(false)         // more wind      23
+            << QVariant(false)         // tag team       24
+            << QVariant(false)         // bottom border  25
+            << QVariant(100)           // damage modfier 26
+            << QVariant(9999)          // turn time      27
+            << QVariant(100)           // init health    28
+            << QVariant(50)            // sudden death   29
+            << QVariant(0)             // case prob      30
+            << QVariant(3)             // mines time     31
+            << QVariant(0)             // mines number   32
+            << QVariant(0)             // mine dud pct   33
+            << QVariant(0)             // explosives     34
+            << QVariant(0)             // air mines      35
+            << QVariant(35)            // health case pct 36
+            << QVariant(25)            // health case amt 37
+            << QVariant(0)            // water rise amt 38
+            << QVariant(0)             // health dec amt 39
+            << QVariant(100)           // rope modfier   40
+            << QVariant(100)           // get away time  41
+            << QVariant(0)             // world edge     42
+            << QVariant()              // scriptparam    43
+            ;
+
+
+
+    schemes.append(defaultScheme);
+    schemes.append(proMode);
+    schemes.append(shoppa);
+    schemes.append(cleanslate);
+    schemes.append(minefield);
+    schemes.append(barrelmayhem);
+    schemes.append(tunnelhogs);
+    schemes.append(timeless);
+    schemes.append(thinkingportals);
+    schemes.append(kingmode);
+    schemes.append(construction);
+    schemes.append(spaceinvasion);
+    schemes.append(hedgeeditor);
+
+    if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) {
+        QDir().mkdir(cfgdir->absolutePath() + "/Schemes");
+    }
+    if (!QDir(directory).exists()) {
+        QDir().mkdir(directory);
+
+        qDebug("No /Schemes/Game directory found. Trying to import game schemes from schemes.ini.");
+
+        int size = fileConfig.beginReadArray("schemes");
+        int imported = 0;
+        for (int i = 0; i < size; ++i)
+        {
+            fileConfig.setArrayIndex(i);
+
+            QString schemeName = fileConfig.value(spNames[0]).toString();
+            if (!schemeName.isNull() && !predefSchemesNames.contains(schemeName))
+            {
+                QList<QVariant> scheme;
+                QFile file(directory + "/" + schemeName + ".hwg");
+
+                // Add keys to scheme info and create file
+                if (file.open(QIODevice::WriteOnly)) {
+                    QTextStream stream(&file);
+
+                    for (int k = 0; k < spNames.size(); ++k) {
+                        scheme << fileConfig.value(spNames[k], defaultScheme[k]);
+
+                        // File handling
+                        // We skip the name key (k==0), it is not stored redundantly in file.
+                        // The file name is used for that already.
+                        if(k != 0) {
+                            // The file is just a list of key=value pairs
+                            stream << spNames[k] << "=" << fileConfig.value(spNames[k], defaultScheme[k]).toString();
+                            stream << endl;
+                        }
+                    }
+                    file.close();
+                }
+                imported++;
+
+                schemes.append(scheme);
+            }
+        }
+        qDebug("%d game scheme(s) imported.", imported);
+        fileConfig.endArray();
+    } else {
+        QStringList scheme_dir = QDir(directory).entryList(QDir::Files);
+
+        for(int i = 0; i < scheme_dir.size(); i++)
+        {
+            QList<QVariant> scheme;
+            QFile file(directory + "/" + scheme_dir[i]);
+
+            // Chop off file name suffix
+            QString schemeName = scheme_dir[i];
+            if (schemeName.endsWith(".hwg", Qt::CaseInsensitive)) {
+                schemeName.chop(4);
+            }
+            // Parse game scheme file
+            if (file.open(QIODevice::ReadOnly)) {
+                QTextStream stream(&file);
+                QString line, key, value;
+                QHash<QString, QString> fileKeyValues;
+                do {
+                    // Read line and get key and value
+                    line = stream.readLine();
+                    key = line.section(QChar('='), 0, 0);
+                    value = line.section(QChar('='), 1);
+                    if(!key.isNull() && !value.isNull()) {
+                        fileKeyValues[key] = value;
+                    }
+                } while (!line.isNull());
+
+                // Add scheme name manually
+                scheme << schemeName;
+                // Add other keys from the QHash.
+                for (int k = 1; k < spNames.size(); ++k) {
+                    key = spNames[k];
+                    if (fileKeyValues.contains(key)) {
+                        scheme << fileKeyValues.value(key);
+                    } else {
+                        // Use default value in case the key is not set
+                        scheme << defaultScheme[k];
+                    }
+                }
+                schemes.append(scheme);
+
+                file.close();
+            }
+        }
+    }
+}
+
+QVariant GameSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    Q_UNUSED(section);
+    Q_UNUSED(orientation);
+    Q_UNUSED(role);
+
+    return QVariant();
+}
+
+int GameSchemeModel::rowCount(const QModelIndex &parent) const
+{
+    if (parent.isValid())
+        return 0;
+    else
+        return schemes.size();
+}
+
+int GameSchemeModel::columnCount(const QModelIndex & parent) const
+{
+    if (parent.isValid())
+        return 0;
+    else
+        return defaultScheme.size();
+}
+
+bool GameSchemeModel::hasScheme(QString name)
+{
+    for(int i=0; i<schemes.size(); i++)
+    {
+        if(schemes[i][0] == name)
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
+Qt::ItemFlags GameSchemeModel::flags(const QModelIndex & index) const
+{
+    Q_UNUSED(index);
+
+    return
+        Qt::ItemIsEnabled
+        | Qt::ItemIsSelectable
+        | Qt::ItemIsEditable;
+}
+
+bool GameSchemeModel::setData(const QModelIndex & index, const QVariant & value, int role)
+{
+    if (!index.isValid() || index.row() < numberOfDefaultSchemes
+            || index.row() >= schemes.size()
+            || index.column() >= defaultScheme.size()
+            || role != Qt::EditRole)
+        return false;
+
+    schemes[index.row()][index.column()] = value;
+
+    emit dataChanged(index, index);
+    return true;
+}
+
+bool GameSchemeModel::insertRows(int row, int count, const QModelIndex & parent)
+{
+    Q_UNUSED(count);
+
+    beginInsertRows(parent, schemes.size(), schemes.size());
+
+    if (row == -1)
+    {
+        QList<QVariant> newScheme = defaultScheme;
+
+        QString newName = tr("New");
+        if(hasScheme(newName))
+        {
+            //name already used -> look for an appropriate name:
+            int i=2;
+            while(hasScheme(newName = tr("New (%1)").arg(i++))) ;
+        }
+        newScheme[0] = QVariant(newName);
+        schemes.insert(schemes.size(), newScheme);
+    }
+    else
+    {
+        QList<QVariant> newScheme = schemes[row];
+        QString oldName = newScheme[0].toString();
+        QString newName = tr("Copy of %1").arg(oldName);
+        if(hasScheme(newName))
+        {
+            //name already used -> look for an appropriate name:
+            int i=2;
+            while(hasScheme(newName = tr("Copy of %1 (%2)").arg(oldName).arg(i++)));
+        }
+        newScheme[0] = QVariant(newName);
+        schemes.insert(schemes.size(), newScheme);
+    }
+
+    endInsertRows();
+
+    return true;
+}
+
+bool GameSchemeModel::removeRows(int row, int count, const QModelIndex & parent)
+{
+    if(count != 1
+            || row < numberOfDefaultSchemes
+            || row >= schemes.size())
+        return false;
+
+    beginRemoveRows(parent, row, row);
+
+    QList<QVariant> scheme = schemes[row];
+    int j = spNames.indexOf("name");
+    QFile(cfgdir->absolutePath() + "/Schemes/Game/" + scheme[j].toString() + ".hwg").remove();
+    schemes.removeAt(row);
+
+    endRemoveRows();
+
+    return true;
+}
+
+QVariant GameSchemeModel::data(const QModelIndex &index, int role) const
+{
+    if (!index.isValid() || index.row() < 0
+            || index.row() >= schemes.size()
+            || index.column() >= defaultScheme.size()
+            || (role != Qt::EditRole && role != Qt::DisplayRole)
+       )
+        return QVariant();
+
+    return schemes[index.row()][index.column()];
+}
+
+void GameSchemeModel::Save()
+{
+    fileConfig.beginWriteArray("schemes");
+    for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i)
+    {
+        QList<QVariant> scheme = schemes[i + numberOfDefaultSchemes];
+        int j = spNames.indexOf("name");
+
+        QString schemeName = scheme[j].toString();
+        QFile file(cfgdir->absolutePath() + "/Schemes/Game/" + schemeName + ".hwg");
+
+        if (file.open(QIODevice::WriteOnly)) {
+            QTextStream stream(&file);
+            for (int k = 0; k < spNames.size(); ++k) {
+                // We skip the name key
+                if(k != j) {
+                    // The file is just a list of key=value pairs
+                    stream << spNames[k] << "=" << scheme[k].toString();
+                    stream << endl;
+                }
+            }
+            file.close();
+        }
+    }
+    fileConfig.endArray();
+}
+
+
+NetGameSchemeModel::NetGameSchemeModel(QObject * parent) :
+    QAbstractTableModel(parent)
+{
+    netScheme = defaultScheme;
+}
+
+QVariant NetGameSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    Q_UNUSED(section);
+    Q_UNUSED(orientation);
+    Q_UNUSED(role);
+
+    return QVariant();
+}
+
+int NetGameSchemeModel::rowCount(const QModelIndex & parent) const
+{
+    if (parent.isValid())
+        return 0;
+    else
+        return 1;
+}
+
+int NetGameSchemeModel::columnCount(const QModelIndex & parent) const
+{
+    if (parent.isValid())
+        return 0;
+    else
+        return defaultScheme.size();
+}
+
+QVariant NetGameSchemeModel::data(const QModelIndex &index, int role) const
+{
+    if (!index.isValid() || index.row() < 0
+            || index.row() > 1
+            || index.column() >= defaultScheme.size()
+            || (role != Qt::EditRole && role != Qt::DisplayRole)
+       )
+        return QVariant();
+
+    return netScheme[index.column()];
+}
+
+void NetGameSchemeModel::setNetSchemeConfig(QStringList cfg)
+{
+    if(cfg.size() != netScheme.size())
+    {
+        qWarning("Incorrect scheme cfg size");
+        return;
+    }
+
+    beginResetModel();
+
+    cfg[cfg.size()-1] = cfg[cfg.size()-1].mid(1);
+
+    for(int i = 0; i < cfg.size(); ++i)
+        netScheme[i] = QVariant(cfg[i]);
+
+    endResetModel();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/model/gameSchemeModel.h	Wed Mar 14 15:19:08 2018 +0100
@@ -0,0 +1,80 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _GAME_SCHEME_MODEL_INCLUDED
+#define _GAME_SCHEME_MODEL_INCLUDED
+
+#include <QAbstractTableModel>
+#include <QStringList>
+#include <QList>
+#include <QSettings>
+
+class GameSchemeModel : public QAbstractTableModel
+{
+        Q_OBJECT
+
+    public:
+        GameSchemeModel(QObject * parent, const QString & fileName);
+
+        QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+        int rowCount(const QModelIndex & parent) const;
+        int columnCount(const QModelIndex & parent) const;
+        bool hasScheme(QString name);
+        Qt::ItemFlags flags(const QModelIndex & index) const;
+        bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
+        bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex());
+        bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
+        QVariant data(const QModelIndex &index, int role) const;
+
+        int numberOfDefaultSchemes;
+        QStringList predefSchemesNames;
+        QStringList spNames;
+
+    public slots:
+        void Save();
+
+//    signals:
+//        void dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight);
+
+    protected:
+        QList< QList<QVariant> > schemes;
+
+    private:
+        QSettings fileConfig;
+};
+
+class NetGameSchemeModel : public QAbstractTableModel
+{
+        Q_OBJECT
+
+    public:
+        NetGameSchemeModel(QObject * parent);
+
+        QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+        int rowCount(const QModelIndex & parent) const;
+        int columnCount(const QModelIndex & parent) const;
+        QVariant data(const QModelIndex &index, int role) const;
+
+    public slots:
+        void setNetSchemeConfig(QStringList cfg);
+
+    private:
+        QList<QVariant> netScheme;
+};
+
+#endif // _GAME_SCHEME_MODEL_INCLUDED
--- a/QTfrontend/ui/page/pageroomslist.cpp	Wed Mar 14 14:42:50 2018 +0100
+++ b/QTfrontend/ui/page/pageroomslist.cpp	Wed Mar 14 15:19:08 2018 +0100
@@ -34,7 +34,7 @@
 
 #include "roomslistmodel.h"
 
-#include "ammoSchemeModel.h"
+#include "gameSchemeModel.h"
 #include "hwconsts.h"
 #include "chatwidget.h"
 #include "roomnameprompt.h"
--- a/QTfrontend/ui/page/pageroomslist.h	Wed Mar 14 14:42:50 2018 +0100
+++ b/QTfrontend/ui/page/pageroomslist.h	Wed Mar 14 15:19:08 2018 +0100
@@ -23,7 +23,7 @@
 #include "AbstractPage.h"
 
 class HWChatWidget;
-class AmmoSchemeModel;
+class GameSchemeModel;
 class QTableView;
 class RoomsListModel;
 class QSortFilterProxyModel;
@@ -100,7 +100,7 @@
         QAction * showJoinRestricted;
         QSplitter * m_splitter;
 
-        AmmoSchemeModel * ammoSchemeModel;
+        GameSchemeModel * gameSchemeModel;
 
         bool restoreHeaderState();
 };
--- a/QTfrontend/ui/page/pagescheme.cpp	Wed Mar 14 14:42:50 2018 +0100
+++ b/QTfrontend/ui/page/pagescheme.cpp	Wed Mar 14 15:19:08 2018 +0100
@@ -27,7 +27,7 @@
 #include <QDataWidgetMapper>
 #include <QSpinBox>
 
-#include "ammoSchemeModel.h"
+#include "gameSchemeModel.h"
 #include "pagescheme.h"
 #include "FreqSpinBox.h"
 #include "MinesTimeSpinBox.h"
@@ -608,7 +608,7 @@
 
 void PageScheme::deleteRow()
 {
-    int numberOfDefaultSchemes = ((AmmoSchemeModel*)mapper->model())->numberOfDefaultSchemes;
+    int numberOfDefaultSchemes = ((GameSchemeModel*)mapper->model())->numberOfDefaultSchemes;
     if (selectScheme->currentIndex() < numberOfDefaultSchemes)
     {
         QMessageBox deniedMsg(this);
@@ -637,7 +637,7 @@
 
 void PageScheme::schemeSelected(int n)
 {
-    int c = ((AmmoSchemeModel*)mapper->model())->numberOfDefaultSchemes;
+    int c = ((GameSchemeModel*)mapper->model())->numberOfDefaultSchemes;
     gbGameModes->setEnabled(n >= c);
     gbBasicSettings->setEnabled(n >= c);
     LE_name->setEnabled(n >= c);
--- a/QTfrontend/ui/widget/gamecfgwidget.cpp	Wed Mar 14 14:42:50 2018 +0100
+++ b/QTfrontend/ui/widget/gamecfgwidget.cpp	Wed Mar 14 15:19:08 2018 +0100
@@ -34,7 +34,7 @@
 #include "igbox.h"
 #include "DataManager.h"
 #include "hwconsts.h"
-#include "ammoSchemeModel.h"
+#include "gameSchemeModel.h"
 #include "proto.h"
 #include "GameStyleModel.h"
 #include "themeprompt.h"
--- a/project_files/hedgewars.pro	Wed Mar 14 14:42:50 2018 +0100
+++ b/project_files/hedgewars.pro	Wed Mar 14 15:19:08 2018 +0100
@@ -21,7 +21,7 @@
 
 HEADERS += ../QTfrontend/model/ThemeModel.h \
     ../QTfrontend/model/MapModel.h \
-    ../QTfrontend/model/ammoSchemeModel.h \
+    ../QTfrontend/model/gameSchemeModel.h \
     ../QTfrontend/model/netserverslist.h \
     ../QTfrontend/ui/page/pagedrawmap.h \
     ../QTfrontend/ui/page/pagedata.h \
@@ -121,7 +121,7 @@
     ../QTfrontend/net/hwmapoptimizer.h
 
 
-SOURCES += ../QTfrontend/model/ammoSchemeModel.cpp \
+SOURCES += ../QTfrontend/model/gameSchemeModel.cpp \
     ../QTfrontend/model/MapModel.cpp \
     ../QTfrontend/model/ThemeModel.cpp \
     ../QTfrontend/model/netserverslist.cpp \
--- a/share/hedgewars/Data/Locale/hedgewars_ar.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">جديد</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_bg.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">Нов</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_cs.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">nový</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_da.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_da.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">ny</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -99,7 +99,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">Neu</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_el.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_el.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">Νέο</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_en.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_en.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">new</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_es.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_es.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">Nuevo</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_fi.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>New</source>
         <translation>Uusi</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_fr.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">Nouveau</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_gd.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_gd.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>New</source>
         <translation>Ùr</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_gl.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_gl.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">novo</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_hu.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">új</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_it.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_it.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">nuovo</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_ja.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">作成</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_ko.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>New</source>
         <translation type="unfinished"></translation>
--- a/share/hedgewars/Data/Locale/hedgewars_lt.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -106,24 +106,24 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
-    <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="847"/>
+    <name>GameSchemeModel</name>
+    <message>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="847"/>
         <source>New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="852"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="852"/>
         <source>New (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="861"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="861"/>
         <source>Copy of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="866"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="866"/>
         <source>Copy of %1 (%2)</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_ms.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ms.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -106,24 +106,24 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
-    <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="847"/>
+    <name>GameSchemeModel</name>
+    <message>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="847"/>
         <source>New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="852"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="852"/>
         <source>New (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="861"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="861"/>
         <source>Copy of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="866"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="866"/>
         <source>Copy of %1 (%2)</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_nl.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>New</source>
         <translation type="unfinished"></translation>
--- a/share/hedgewars/Data/Locale/hedgewars_pl.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">nowy</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">novo</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">novo</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_ro.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ro.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">new</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_ru.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">новый</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_sk.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">nový</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_sv.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">ny</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">yeni</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_uk.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">нова</translation>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -106,28 +106,28 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">新</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="847"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="847"/>
         <source>New</source>
         <translation type="unfinished">新游戏</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="852"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="852"/>
         <source>New (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="861"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="861"/>
         <source>Copy of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="866"/>
+        <location filename="../../../../QTfrontend/model/gameSchemeModel.cpp" line="866"/>
         <source>Copy of %1 (%2)</source>
         <translation type="unfinished"></translation>
     </message>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts	Wed Mar 14 14:42:50 2018 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts	Wed Mar 14 15:19:08 2018 +0100
@@ -87,7 +87,7 @@
     </message>
 </context>
 <context>
-    <name>AmmoSchemeModel</name>
+    <name>GameSchemeModel</name>
     <message>
         <source>new</source>
         <translation type="obsolete">新</translation>