Преглед изворни кода

Merge pull request #2427 from vcmi/beta

Merge beta -> develop
Ivan Savenko пре 2 година
родитељ
комит
2fd6df01e5
89 измењених фајлова са 2971 додато и 2178 уклоњено
  1. 1 1
      AI/BattleAI/BattleAI.cpp
  2. 2 1
      AI/BattleAI/BattleAI.h
  3. 1 1
      AI/EmptyAI/CEmptyAI.cpp
  4. 14 2
      AI/StupidAI/StupidAI.cpp
  5. 3 0
      AI/StupidAI/StupidAI.h
  6. 0 20
      Global.h
  7. 1 1
      Mods/vcmi/config/vcmi/chinese.json
  8. 1 1
      Mods/vcmi/config/vcmi/english.json
  9. 0 1
      Mods/vcmi/config/vcmi/french.json
  10. 18 2
      Mods/vcmi/config/vcmi/german.json
  11. 1 1
      Mods/vcmi/config/vcmi/polish.json
  12. 1 1
      Mods/vcmi/config/vcmi/russian.json
  13. 0 1
      Mods/vcmi/config/vcmi/spanish.json
  14. 2 2
      Mods/vcmi/config/vcmi/ukrainian.json
  15. 1 1
      android/vcmi-app/build.gradle
  16. 1 0
      android/vcmi-app/src/main/java/eu/vcmi/vcmi/settings/LanguageSettingDialog.java
  17. 5 1
      client/CPlayerInterface.cpp
  18. 5 2
      client/CServerHandler.cpp
  19. 12 0
      client/Client.cpp
  20. 5 5
      client/adventureMap/AdventureMapInterface.cpp
  21. 7 1
      client/adventureMap/AdventureMapShortcuts.cpp
  22. 1 0
      client/adventureMap/AdventureMapShortcuts.h
  23. 2 1
      client/adventureMap/AdventureState.h
  24. 1 1
      client/battle/BattleInterface.cpp
  25. 14 0
      client/battle/BattleInterfaceClasses.cpp
  26. 3 0
      client/battle/BattleInterfaceClasses.h
  27. 0 2
      client/battle/BattleSiegeController.cpp
  28. 3 5
      client/battle/BattleStacksController.cpp
  29. 23 2
      client/battle/BattleWindow.cpp
  30. 7 0
      client/battle/BattleWindow.h
  31. 17 3
      client/eventsSDL/InputHandler.cpp
  32. 5 0
      client/eventsSDL/InputHandler.h
  33. 15 3
      client/eventsSDL/InputSourceKeyboard.cpp
  34. 9 1
      client/eventsSDL/InputSourceTouch.cpp
  35. 2 2
      client/eventsSDL/InputSourceTouch.h
  36. 3 3
      client/lobby/RandomMapTab.cpp
  37. 0 3
      client/lobby/SelectionTab.cpp
  38. 4 0
      client/widgets/RadialMenu.cpp
  39. 9 0
      client/windows/InfoWindows.cpp
  40. 57 1
      config/bonuses.json
  41. 4 1
      config/schemas/mod.json
  42. 2 2
      config/schemas/obstacle.json
  43. 2 2
      config/schemas/settings.json
  44. 4 4
      config/schemas/spell.json
  45. 2 1
      launcher/languages.cpp
  46. 2 2
      launcher/modManager/cmodlist.cpp
  47. 69 81
      launcher/translation/chinese.ts
  48. 69 49
      launcher/translation/english.ts
  49. 71 386
      launcher/translation/french.ts
  50. 73 85
      launcher/translation/german.ts
  51. 69 81
      launcher/translation/polish.ts
  52. 68 80
      launcher/translation/russian.ts
  53. 69 81
      launcher/translation/spanish.ts
  54. 69 85
      launcher/translation/ukrainian.ts
  55. 2 1
      lib/CTownHandler.cpp
  56. 0 30
      lib/GameConstants.cpp
  57. 0 5
      lib/GameConstants.h
  58. 3 1
      lib/Languages.h
  59. 15 26
      lib/NetPacksLib.cpp
  60. 4 11
      lib/VCMI_Lib.cpp
  61. 12 1
      lib/battle/SideInBattle.cpp
  62. 2 4
      lib/gameState/CGameState.cpp
  63. 6 0
      lib/gameState/TavernHeroesPool.cpp
  64. 1 1
      lib/logging/CLogger.h
  65. 13 14
      lib/mapObjectConstructors/AObjectTypeHandler.cpp
  66. 1 1
      lib/mapObjectConstructors/AObjectTypeHandler.h
  67. 14 17
      lib/mapObjects/CGHeroInstance.cpp
  68. 4 0
      lib/mapObjects/IObjectInterface.cpp
  69. 2 2
      lib/rmg/CMapGenerator.cpp
  70. 1 0
      lib/rmg/modificators/ObjectManager.cpp
  71. 54 12
      lib/rmg/modificators/RoadPlacer.cpp
  72. 1 0
      lib/rmg/modificators/TreasurePlacer.cpp
  73. 6 6
      mapeditor/mainwindow.cpp
  74. 1 1
      mapeditor/mapview.cpp
  75. 271 130
      mapeditor/translation/english.ts
  76. 264 131
      mapeditor/translation/french.ts
  77. 314 169
      mapeditor/translation/german.ts
  78. 272 127
      mapeditor/translation/polish.ts
  79. 272 127
      mapeditor/translation/russian.ts
  80. 272 129
      mapeditor/translation/spanish.ts
  81. 272 131
      mapeditor/translation/ukrainian.ts
  82. 21 21
      mapeditor/validator.cpp
  83. 2 2
      mapeditor/windownewmap.cpp
  84. 7 15
      server/CGameHandler.cpp
  85. 2 1
      server/CGameHandler.h
  86. 24 43
      server/CVCMIServer.cpp
  87. 5 5
      server/PlayerMessageProcessor.cpp
  88. 1 1
      test/game/CGameStateTest.cpp
  89. 1 1
      test/mock/BattleFake.cpp

+ 1 - 1
AI/BattleAI/BattleAI.cpp

@@ -251,7 +251,7 @@ BattleAction CBattleAI::selectStackAction(const CStack * stack)
 
 void CBattleAI::yourTacticPhase(int distance)
 {
-	cb->battleMakeUnitAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
+	cb->battleMakeTacticAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
 }
 
 void CBattleAI::activeStack( const CStack * stack )

+ 2 - 1
AI/BattleAI/BattleAI.h

@@ -59,7 +59,8 @@ class CBattleAI : public CBattleGameInterface
 	std::shared_ptr<Environment> env;
 
 	//Previous setting of cb
-	bool wasWaitingForRealize, wasUnlockingGs;
+	bool wasWaitingForRealize;
+	bool wasUnlockingGs;
 	int movesSkippedByDefense;
 
 public:

+ 1 - 1
AI/EmptyAI/CEmptyAI.cpp

@@ -41,7 +41,7 @@ void CEmptyAI::activeStack(const CStack * stack)
 
 void CEmptyAI::yourTacticPhase(int distance)
 {
-	cb->battleMakeUnitAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
+	cb->battleMakeTacticAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
 }
 
 void CEmptyAI::heroGotLevel(const CGHeroInstance *hero, PrimarySkill::PrimarySkill pskill, std::vector<SecondarySkill> &skills, QueryID queryID)

+ 14 - 2
AI/StupidAI/StupidAI.cpp

@@ -18,14 +18,21 @@ static std::shared_ptr<CBattleCallback> cbc;
 
 CStupidAI::CStupidAI()
 	: side(-1)
+	, wasWaitingForRealize(false)
+	, wasUnlockingGs(false)
 {
 	print("created");
 }
 
-
 CStupidAI::~CStupidAI()
 {
 	print("destroyed");
+	if(cb)
+	{
+		//Restore previous state of CB - it may be shared with the main AI (like VCAI)
+		cb->waitTillRealize = wasWaitingForRealize;
+		cb->unlockGsWhenWaiting = wasUnlockingGs;
+	}
 }
 
 void CStupidAI::initBattleInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CBattleCallback> CB)
@@ -33,6 +40,11 @@ void CStupidAI::initBattleInterface(std::shared_ptr<Environment> ENV, std::share
 	print("init called, saving ptr to IBattleCallback");
 	env = ENV;
 	cbc = cb = CB;
+
+	wasWaitingForRealize = CB->waitTillRealize;
+	wasUnlockingGs = CB->unlockGsWhenWaiting;
+	CB->waitTillRealize = false;
+	CB->unlockGsWhenWaiting = false;
 }
 
 void CStupidAI::actionFinished(const BattleAction &action)
@@ -90,7 +102,7 @@ static bool willSecondHexBlockMoreEnemyShooters(const BattleHex &h1, const Battl
 
 void CStupidAI::yourTacticPhase(int distance)
 {
-	cb->battleMakeUnitAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
+	cb->battleMakeTacticAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
 }
 
 void CStupidAI::activeStack( const CStack * stack )

+ 3 - 0
AI/StupidAI/StupidAI.h

@@ -20,6 +20,9 @@ class CStupidAI : public CBattleGameInterface
 	std::shared_ptr<CBattleCallback> cb;
 	std::shared_ptr<Environment> env;
 
+	bool wasWaitingForRealize;
+	bool wasUnlockingGs;
+
 	void print(const std::string &text) const;
 public:
 	CStupidAI();

+ 0 - 20
Global.h

@@ -253,26 +253,6 @@ using TLockGuardRec = std::lock_guard<std::recursive_mutex>;
 
 VCMI_LIB_NAMESPACE_BEGIN
 
-void inline handleException()
-{
-	try
-	{
-		throw;
-	}
-	catch(const std::exception & ex)
-	{
-		logGlobal->error(ex.what());
-	}
-	catch(const std::string & ex)
-	{
-		logGlobal->error(ex);
-	}
-	catch(...)
-	{
-		logGlobal->error("Sorry, caught unknown exception type. No more info available.");
-	}
-}
-
 namespace vstd
 {
 	// combine hashes. Present in boost but not in std

+ 1 - 1
Mods/vcmi/config/vcmi/chinese.json

@@ -145,7 +145,7 @@
 	"vcmi.questLog.hideComplete.hover" : "隐藏完成任务",
 	"vcmi.questLog.hideComplete.help"  : "隐藏所有完成的任务",
 
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "默认",
+	"vcmi.randomMapTab.widgets.randomTemplate"      : "(随机)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "模板",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "设定...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "同盟关系",

+ 1 - 1
Mods/vcmi/config/vcmi/english.json

@@ -186,7 +186,7 @@
 	"vcmi.questLog.hideComplete.hover" : "Hide complete quests",
 	"vcmi.questLog.hideComplete.help"  : "Hide all completed quests",
 
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "(default)",
+	"vcmi.randomMapTab.widgets.randomTemplate"      : "(Random)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "Template",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Setup...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Team Alignments",

+ 0 - 1
Mods/vcmi/config/vcmi/french.json

@@ -168,7 +168,6 @@
 	"vcmi.questLog.hideComplete.hover" : "Masquer les quêtes terminées",
 	"vcmi.questLog.hideComplete.help"  : "Masquer toutes les quêtes terminées",
 
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "(par défaut)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "Modèle",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Configuration...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Alignements d'équipe",

+ 18 - 2
Mods/vcmi/config/vcmi/german.json

@@ -29,6 +29,13 @@
 	"vcmi.capitalColors.5" : "Violett",
 	"vcmi.capitalColors.6" : "Türkis",
 	"vcmi.capitalColors.7" : "Rosa",
+	
+	"vcmi.radialWheel.mergeSameUnit" : "Gleiche Kreaturen zusammenführen",
+	"vcmi.radialWheel.showUnitInformation" : "Informationen zur Kreatur anzeigen",
+	"vcmi.radialWheel.splitSingleUnit" : "Wegtrennen einzelner Kreaturen",
+	"vcmi.radialWheel.splitUnitEqually" : "Gleichmäßiges trennen der Kreaturen",
+	"vcmi.radialWheel.moveUnit" : "Verschieben der Kreatur in andere Armee",
+	"vcmi.radialWheel.splitUnit" : "Aufsplitten der Kreatur in anderen Slot",
 
 	"vcmi.mainMenu.tutorialNotImplemented" : "Das Tutorial ist aktuell noch nicht implementiert\n",
 	"vcmi.mainMenu.highscoresNotImplemented" : "Die Highscores sind aktuell noch nicht implementiert\n",
@@ -38,6 +45,9 @@
 	"vcmi.mainMenu.hostTCP" : "Hoste TCP/IP Spiel",
 	"vcmi.mainMenu.joinTCP" : "Trete TCP/IP Spiel bei",
 	"vcmi.mainMenu.playerName" : "Spieler",
+	
+	"vcmi.lobby.filename" : "Dateiname",
+	"vcmi.lobby.creationDate" : "Erstellungsdatum",
 
 	"vcmi.server.errors.existingProcess"     : "Es läuft ein weiterer vcmiserver-Prozess, bitte beendet diesen zuerst",
 	"vcmi.server.errors.modsIncompatibility" : "Erforderliche Mods um das Spiel zu laden:",
@@ -87,6 +97,10 @@
 	"vcmi.adventureOptions.showGrid.help" : "{Raster anzeigen}\n\n Zeigt eine Rasterüberlagerung, die die Grenzen zwischen den Kacheln der Abenteuerkarte anzeigt.",
 	"vcmi.adventureOptions.borderScroll.hover" : "Scrollen am Rand",
 	"vcmi.adventureOptions.borderScroll.help" : "{Scrollen am Rand}\n\nScrollt die Abenteuerkarte, wenn sich der Cursor neben dem Fensterrand befindet. Kann mit gedrückter STRG-Taste deaktiviert werden.",
+	"vcmi.adventureOptions.infoBarCreatureManagement.hover" : "Info-Panel Kreaturenmanagement",
+	"vcmi.adventureOptions.infoBarCreatureManagement.help" : "{Info-Panel Kreaturenmanagement}\n\nErmöglicht die Neuanordnung von Kreaturen im Info-Panel, anstatt zwischen den Standardkomponenten zu wechseln",
+	"vcmi.adventureOptions.leftButtonDrag.hover" : "Ziehen der Karte mit Links",
+	"vcmi.adventureOptions.leftButtonDrag.help" : "{Ziehen der Karte mit Links}\n\nWenn aktiviert, wird die Maus bei gedrückter linker Taste in die Kartenansicht gezogen",
 	"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
@@ -113,10 +127,12 @@
 	"vcmi.battleOptions.movementHighlightOnHover.help": "{Hervorhebung der Bewegung bei Hover}\n\nHebt die Bewegungsreichweite der Einheit hervor, wenn man mit dem Mauszeiger über sie fährt.",
 	"vcmi.battleOptions.rangeLimitHighlightOnHover.hover": "Bereichsgrenzen für Schützen anzeigen",
 	"vcmi.battleOptions.rangeLimitHighlightOnHover.help": "{Bereichsgrenzen für Schützen anzeigen}\n\nZeigt die Entfernungsgrenzen des Schützen an, wenn man mit dem Mauszeiger über ihn fährt.",
+	"vcmi.battleOptions.showStickyHeroInfoWindows.hover": "Statistikfenster für Helden anzeigen",
+	"vcmi.battleOptions.showStickyHeroInfoWindows.help": "{Statistikfenster für Helden anzeigen}\n\nDauerhaftes Einschalten des Statistikfenster für Helden, das die primären Werte und Zauberpunkte anzeigt.",
 	"vcmi.battleOptions.skipBattleIntroMusic.hover": "Intro-Musik überspringen",
 	"vcmi.battleOptions.skipBattleIntroMusic.help": "{Intro-Musik überspringen}\n\n Überspringe die kurze Musik, die zu Beginn eines jeden Kampfes gespielt wird, bevor die Action beginnt. Kann auch durch Drücken der ESC-Taste übersprungen werden.",
-	"vcmi.battleWindow.pressKeyToSkipIntro" : "Beliebige Taste drücken, um das Kampf-Intro zu überspringen",
 
+	"vcmi.battleWindow.pressKeyToSkipIntro" : "Beliebige Taste drücken, um das Kampf-Intro zu überspringen",
 	"vcmi.battleWindow.damageEstimation.melee" : "Angriff auf %CREATURE (%DAMAGE).",
 	"vcmi.battleWindow.damageEstimation.meleeKills" : "Angriff auf %CREATURE (%DAMAGE, %KILLS).",
 	"vcmi.battleWindow.damageEstimation.ranged" : "Schuss auf %CREATURE (%SHOTS, %DAMAGE).",
@@ -170,7 +186,7 @@
 	"vcmi.questLog.hideComplete.hover" : "Verstecke abgeschlossene Quests",
 	"vcmi.questLog.hideComplete.help"  : "Verstecke alle Quests die bereits abgeschlossen sind",
 
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "(Standard)",
+	"vcmi.randomMapTab.widgets.randomTemplate"      : "(Zufällig)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "Template",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Einrichtung...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Team-Zuordnungen",

+ 1 - 1
Mods/vcmi/config/vcmi/polish.json

@@ -168,7 +168,7 @@
 	"vcmi.questLog.hideComplete.hover" : "Ukryj ukończone misje",
 	"vcmi.questLog.hideComplete.help"  : "Ukrywa wszystkie misje, które zostały zakończone",
 
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "domyślny",
+	"vcmi.randomMapTab.widgets.randomTemplate"      : "(Losowy)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "Szablon",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Ustaw...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Sojusze",

+ 1 - 1
Mods/vcmi/config/vcmi/russian.json

@@ -119,7 +119,7 @@
 	"vcmi.questLog.hideComplete.hover" : "Скрыть завершенное",
 	"vcmi.questLog.hideComplete.help"  : "Скрыть все завершенные квесты",
 
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "(по умолчанию)",
+	"vcmi.randomMapTab.widgets.randomTemplate"      : "(Случайный)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "Шаблон",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Настройка...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Распределение команд",

+ 0 - 1
Mods/vcmi/config/vcmi/spanish.json

@@ -142,7 +142,6 @@
 	"vcmi.questLog.hideComplete.hover" : "Ocultar misiones completas",
 	"vcmi.questLog.hideComplete.help" : "Ocultar todas las misiones que ya han sido completadas",
 
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "(predeterminado)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "Plantilla",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Configurar...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Alineaciones de equipos",

+ 2 - 2
Mods/vcmi/config/vcmi/ukrainian.json

@@ -85,7 +85,7 @@
 	"vcmi.systemOptions.framerateButton.hover"  : "Лічильник кадрів",
 	"vcmi.systemOptions.framerateButton.help"   : "{Лічильник кадрів}\n\n Перемикає видимість лічильника кадрів на секунду у кутку ігрового вікна",
 	"vcmi.systemOptions.hapticFeedbackButton.hover"  : "Тактильний відгук",
-	"vcmi.systemOptions.hapticFeedbackButton.help"   : "{Тактильний відгук}\n\Використовувати вібрацію при використанні сенсорного екрану",
+	"vcmi.systemOptions.hapticFeedbackButton.help"   : "{Тактильний відгук}\n\nВикористовувати вібрацію при використанні сенсорного екрану",
 
 	"vcmi.adventureOptions.infoBarPick.help" : "{Повідомлення у панелі статусу}\n\nЗа можливості, повідомлення про відвідування об'єктів карти пригод будуть відображені у панелі статусу замість окремого вікна",
 	"vcmi.adventureOptions.infoBarPick.hover" : "Повідомлення у панелі статусу",
@@ -186,7 +186,7 @@
 	"vcmi.questLog.hideComplete.hover" : "Приховати завершені квести",
 	"vcmi.questLog.hideComplete.help"  : "Приховує всі квести, які вже мають стан виконаних",
 	
-	"vcmi.randomMapTab.widgets.defaultTemplate"      : "(за замовчуванням)",
+	"vcmi.randomMapTab.widgets.randomTemplate"      : "(Випадковий)",
 	"vcmi.randomMapTab.widgets.templateLabel"        : "Шаблон",
 	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Налаштувати...",
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Розподіл команд",

+ 1 - 1
android/vcmi-app/build.gradle

@@ -42,7 +42,7 @@ android {
 				applicationLabel: '@string/app_name',
 			]
 			ndk {
-				debugSymbolLevel 'symbol_table'
+				debugSymbolLevel 'full'
 			}
 		}
 		daily {

+ 1 - 0
android/vcmi-app/src/main/java/eu/vcmi/vcmi/settings/LanguageSettingDialog.java

@@ -30,6 +30,7 @@ public class LanguageSettingDialog extends LauncherSettingDialog<String>
         AVAILABLE_LANGUAGES.add("swedish");
         AVAILABLE_LANGUAGES.add("turkish");
         AVAILABLE_LANGUAGES.add("ukrainian");
+        AVAILABLE_LANGUAGES.add("vietnamese");
         AVAILABLE_LANGUAGES.add("other_cp1250");
         AVAILABLE_LANGUAGES.add("other_cp1251");
         AVAILABLE_LANGUAGES.add("other_cp1252");

+ 5 - 1
client/CPlayerInterface.cpp

@@ -476,6 +476,9 @@ void CPlayerInterface::heroManaPointsChanged(const CGHeroInstance * hero)
 	adventureInt->onHeroChanged(hero);
 	if (makingTurn && hero->tempOwner == playerID)
 		adventureInt->onHeroChanged(hero);
+
+	for (auto window : GH.windows().findWindows<BattleWindow>())
+		window->heroManaPointsChanged(hero);
 }
 void CPlayerInterface::heroMovePointsChanged(const CGHeroInstance * hero)
 {
@@ -1904,8 +1907,9 @@ bool CPlayerInterface::capturedAllEvents()
 	}
 
 	bool needToLockAdventureMap = adventureInt && adventureInt->isActive() && CGI->mh->hasOngoingAnimations();
+	bool quickCombatOngoing = isAutoFightOn && !battleInt;
 
-	if (ignoreEvents || needToLockAdventureMap || isAutoFightOn)
+	if (ignoreEvents || needToLockAdventureMap || quickCombatOngoing )
 	{
 		GH.input().ignoreEventsUntilInput();
 		return true;

+ 5 - 2
client/CServerHandler.cpp

@@ -865,8 +865,11 @@ void CServerHandler::threadHandleConnection()
 		}
 		else
 		{
-			logNetwork->error("Lost connection to server, ending listening thread!");
-			logNetwork->error(e.what());
+			if (e.code() == boost::asio::error::eof)
+				logNetwork->error("Lost connection to server, ending listening thread! Connection has been closed");
+			else
+				logNetwork->error("Lost connection to server, ending listening thread! Reason: %s", e.what());
+
 			if(client)
 			{
 				state = EClientState::DISCONNECTING;

+ 12 - 0
client/Client.cpp

@@ -26,6 +26,7 @@
 #include "../lib/gameState/CGameState.h"
 #include "../lib/CThreadHelper.h"
 #include "../lib/VCMIDirs.h"
+#include "../lib/UnlockGuard.h"
 #include "../lib/battle/BattleInfo.h"
 #include "../lib/serializer/BinaryDeserializer.h"
 #include "../lib/mapping/CMapService.h"
@@ -624,6 +625,14 @@ void CClient::battleStarted(const BattleInfo * info)
 			CPlayerInterface::battleInt = std::make_shared<BattleInterface>(leftSide.armyObject, rightSide.armyObject, leftSide.hero, rightSide.hero, att, def, spectratorInt);
 		}
 	}
+
+	if(info->tacticDistance)
+	{
+		auto tacticianColor = info->sides[info->tacticsSide].color;
+
+		if (vstd::contains(battleints, tacticianColor))
+			battleints[tacticianColor]->yourTacticPhase(info->tacticDistance);
+	}
 }
 
 void CClient::battleFinished()
@@ -645,6 +654,9 @@ void CClient::startPlayerBattleAction(PlayerColor color)
 
 	if(vstd::contains(battleints, color))
 	{
+		// we want to avoid locking gamestate and causing UI to freeze while AI is making turn
+		auto unlock = vstd::makeUnlockGuardIf(*CPlayerInterface::pim, !battleints[color]->human);
+
 		assert(vstd::contains(battleints, color));
 		battleints[color]->activeStack(gs->curB->battleGetStackByID(gs->curB->activeStack, false));
 	}

+ 5 - 5
client/adventureMap/AdventureMapInterface.cpp

@@ -192,7 +192,7 @@ void AdventureMapInterface::handleMapScrollingUpdate(uint32_t timePassed)
 	Point scrollDelta = scrollDirection * scrollDistance;
 
 	bool cursorInScrollArea = scrollDelta != Point(0,0);
-	bool scrollingActive = cursorInScrollArea && isActive() && shortcuts->optionSidePanelActive() && !scrollingWasBlocked;
+	bool scrollingActive = cursorInScrollArea && shortcuts->optionMapScrollingActive() && !scrollingWasBlocked;
 	bool scrollingBlocked = GH.isKeyboardCtrlDown() || !settings["adventure"]["borderScroll"].Bool();
 
 	if (!scrollingWasActive && scrollingBlocked)
@@ -323,7 +323,7 @@ void AdventureMapInterface::onEnemyTurnStarted(PlayerColor playerID, bool isHuma
 	mapAudio->onEnemyTurnStarted();
 	widget->getMinimap()->setAIRadar(!isHuman);
 	widget->getInfoBar()->startEnemyTurn(LOCPLINT->cb->getCurrentPlayer());
-	setState(EAdventureState::ENEMY_TURN);
+	setState(isHuman ? EAdventureState::OTHER_HUMAN_PLAYER_TURN : EAdventureState::AI_PLAYER_TURN);
 }
 
 void AdventureMapInterface::setState(EAdventureState state)
@@ -417,14 +417,14 @@ void AdventureMapInterface::hotkeyEndingTurn()
 	if(settings["session"]["spectate"].Bool())
 		return;
 
-	LOCPLINT->makingTurn = false;
-	LOCPLINT->cb->endTurn();
-
 	if(!settings["general"]["startTurnAutosave"].Bool())
 	{
 		LOCPLINT->performAutosave();
 	}
 
+	LOCPLINT->makingTurn = false;
+	LOCPLINT->cb->endTurn();
+
 	mapAudio->onPlayerTurnEnded();
 }
 

+ 7 - 1
client/adventureMap/AdventureMapShortcuts.cpp

@@ -461,7 +461,13 @@ bool AdventureMapShortcuts::optionSidePanelActive()
 	return state == EAdventureState::MAKING_TURN || state == EAdventureState::WORLD_VIEW;
 }
 
+bool AdventureMapShortcuts::optionMapScrollingActive()
+{
+	return state == EAdventureState::MAKING_TURN || state == EAdventureState::WORLD_VIEW || (state == EAdventureState::OTHER_HUMAN_PLAYER_TURN);
+}
+
 bool AdventureMapShortcuts::optionMapViewActive()
 {
-	return state == EAdventureState::MAKING_TURN || state == EAdventureState::WORLD_VIEW || state == EAdventureState::CASTING_SPELL;
+	return state == EAdventureState::MAKING_TURN || state == EAdventureState::WORLD_VIEW || state == EAdventureState::CASTING_SPELL
+		|| (state == EAdventureState::OTHER_HUMAN_PLAYER_TURN);
 }

+ 1 - 0
client/adventureMap/AdventureMapShortcuts.h

@@ -81,6 +81,7 @@ public:
 	bool optionInMapView();
 	bool optionInWorldView();
 	bool optionSidePanelActive();
+	bool optionMapScrollingActive();
 	bool optionMapViewActive();
 
 	void setState(EAdventureState newState);

+ 2 - 1
client/adventureMap/AdventureState.h

@@ -14,7 +14,8 @@ enum class EAdventureState
 	NOT_INITIALIZED,
 	HOTSEAT_WAIT,
 	MAKING_TURN,
-	ENEMY_TURN,
+	AI_PLAYER_TURN,
+	OTHER_HUMAN_PLAYER_TURN,
 	CASTING_SPELL,
 	WORLD_VIEW
 };

+ 1 - 1
client/battle/BattleInterface.cpp

@@ -727,7 +727,7 @@ void BattleInterface::requestAutofightingAIToTakeAction()
 			// FIXME: unsafe
 			// Run task in separate thread to avoid UI lock while AI is making turn (which might take some time)
 			// HOWEVER this thread won't atttempt to lock game state, potentially leading to races
-			boost::thread aiThread([&]()
+			boost::thread aiThread([this, activeStack]()
 			{
 				curInt->autofightingAI->activeStack(activeStack);
 			});

+ 14 - 0
client/battle/BattleInterfaceClasses.cpp

@@ -389,6 +389,12 @@ HeroInfoBasicPanel::HeroInfoBasicPanel(const InfoAboutHero & hero, Point * posit
 		background->colorize(hero.owner);
 	}
 
+	initializeData(hero);
+}
+
+void HeroInfoBasicPanel::initializeData(const InfoAboutHero & hero)
+{
+	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
 	auto attack = hero.details->primskills[0];
 	auto defense = hero.details->primskills[1];
 	auto power = hero.details->primskills[2];
@@ -423,6 +429,14 @@ HeroInfoBasicPanel::HeroInfoBasicPanel(const InfoAboutHero & hero, Point * posit
 	labels.push_back(std::make_shared<CLabel>(39, 186, EFonts::FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, std::to_string(currentSpellPoints) + "/" + std::to_string(maxSpellPoints)));
 }
 
+void HeroInfoBasicPanel::update(const InfoAboutHero & updatedInfo)
+{
+	icons.clear();
+	labels.clear();
+
+	initializeData(updatedInfo);
+}
+
 void HeroInfoBasicPanel::show(Canvas & to)
 {
 	showAll(to);

+ 3 - 0
client/battle/BattleInterfaceClasses.h

@@ -137,6 +137,9 @@ public:
 	HeroInfoBasicPanel(const InfoAboutHero & hero, Point * position, bool initializeBackground = true);
 
 	void show(Canvas & to) override;
+
+	void initializeData(const InfoAboutHero & hero);
+	void update(const InfoAboutHero & updatedInfo);
 };
 
 class HeroInfoWindow : public CWindowObject

+ 0 - 2
client/battle/BattleSiegeController.cpp

@@ -330,8 +330,6 @@ bool BattleSiegeController::isAttackableByCatapult(BattleHex hex) const
 
 void BattleSiegeController::stackIsCatapulting(const CatapultAttack & ca)
 {
-	owner.checkForAnimations();
-
 	if (ca.attacker != -1)
 	{
 		const CStack *stack = owner.curInt->cb->battleGetStackByID(ca.attacker);

+ 3 - 5
client/battle/BattleStacksController.cpp

@@ -154,11 +154,6 @@ void BattleStacksController::collectRenderableObjects(BattleRenderer & renderer)
 
 void BattleStacksController::stackReset(const CStack * stack)
 {
-	owner.checkForAnimations();
-
-	//reset orientation?
-	//stackFacingRight[stack->unitId()] = stack->unitSide() == BattleSide::ATTACKER;
-
 	auto iter = stackAnimation.find(stack->unitId());
 
 	if(iter == stackAnimation.end())
@@ -240,6 +235,9 @@ void BattleStacksController::setActiveStack(const CStack *stack)
 		stackAnimation[activeStack->unitId()]->setBorderColor(AnimationControls::getGoldBorder());
 
 	owner.windowObject->blockUI(activeStack == nullptr);
+
+	if (activeStack)
+		stackAmountBoxHidden.clear();
 }
 
 bool BattleStacksController::stackNeedsAmountBox(const CStack * stack) const

+ 23 - 2
client/battle/BattleWindow.cpp

@@ -237,8 +237,8 @@ void BattleWindow::showStickyHeroWindows()
 	if(settings["battle"]["stickyHeroInfoWindows"].Bool() == true)
 		return;
 
-	Settings showStickyHeroInfoWIndows = settings.write["battle"]["stickyHeroInfoWindows"];
-	showStickyHeroInfoWIndows->Bool() = true;
+	Settings showStickyHeroInfoWindows = settings.write["battle"]["stickyHeroInfoWindows"];
+	showStickyHeroInfoWindows->Bool() = true;
 
 
 	createStickyHeroInfoWindows();
@@ -250,6 +250,27 @@ void BattleWindow::updateQueue()
 	queue->update();
 }
 
+void BattleWindow::updateHeroInfoWindow(uint8_t side, const InfoAboutHero & hero)
+{
+	std::shared_ptr<HeroInfoBasicPanel> panelToUpdate = side == 0 ? attackerHeroWindow : defenderHeroWindow;
+	panelToUpdate->update(hero);
+}
+
+void BattleWindow::heroManaPointsChanged(const CGHeroInstance * hero)
+{
+	if(hero == owner.attackingHeroInstance || hero == owner.defendingHeroInstance)
+	{
+		InfoAboutHero heroInfo = InfoAboutHero();
+		heroInfo.initFromHero(hero, InfoAboutHero::INBATTLE);
+
+		updateHeroInfoWindow(hero == owner.attackingHeroInstance ? 0 : 1, heroInfo);
+	}
+	else
+	{
+		logGlobal->error("BattleWindow::heroManaPointsChanged: 'Mana points changed' called for hero not belonging to current battle window");
+	}
+}
+
 void BattleWindow::activate()
 {
 	GH.setStatusbar(console);

+ 7 - 0
client/battle/BattleWindow.h

@@ -79,15 +79,22 @@ public:
 	void hideQueue();
 	void showQueue();
 
+	/// Toggle permanent hero info windows visibility (HD mod feature)
 	void hideStickyHeroWindows();
 	void showStickyHeroWindows();
 
+	/// Event handler for netpack changing hero mana points
+	void heroManaPointsChanged(const CGHeroInstance * hero);
+
 	/// block all UI elements when player is not allowed to act, e.g. during enemy turn
 	void blockUI(bool on);
 
 	/// Refresh queue after turn order changes
 	void updateQueue();
 
+	/// Refresh sticky variant of hero info window after spellcast, side same as in BattleSpellCast::side
+	void updateHeroInfoWindow(uint8_t side, const InfoAboutHero & hero);
+
 	/// Get mouse-hovered battle queue unit ID if any found
 	std::optional<uint32_t> getQueueHoveredUnitId();
 

+ 17 - 3
client/eventsSDL/InputHandler.cpp

@@ -70,13 +70,22 @@ void InputHandler::handleCurrentEvent(const SDL_Event & current)
 	}
 }
 
-void InputHandler::processEvents()
+std::vector<SDL_Event> InputHandler::acquireEvents()
 {
 	boost::unique_lock<boost::mutex> lock(eventsMutex);
-	for(const auto & currentEvent : eventsQueue)
+
+	std::vector<SDL_Event> result;
+	std::swap(result, eventsQueue);
+	return result;
+}
+
+void InputHandler::processEvents()
+{
+	std::vector<SDL_Event> eventsToProcess = acquireEvents();
+
+	for(const auto & currentEvent : eventsToProcess)
 		handleCurrentEvent(currentEvent);
 
-	eventsQueue.clear();
 	fingerHandler->handleUpdate();
 }
 
@@ -239,6 +248,11 @@ void InputHandler::stopTextInput()
 	textHandler->stopTextInput();
 }
 
+void InputHandler::hapticFeedback()
+{
+	fingerHandler->hapticFeedback();
+}
+
 bool InputHandler::hasTouchInputDevice() const
 {
 	return fingerHandler->hasTouchInputDevice();

+ 5 - 0
client/eventsSDL/InputHandler.h

@@ -29,6 +29,8 @@ class InputHandler
 
 	Point cursorPosition;
 
+	std::vector<SDL_Event> acquireEvents();
+
 	void preprocessEvent(const SDL_Event & event);
 	void handleCurrentEvent(const SDL_Event & current);
 	void handleUserEvent(const SDL_UserEvent & current);
@@ -63,6 +65,9 @@ public:
 	/// Ends any existing text input state
 	void stopTextInput();
 
+	/// do a haptic feedback
+	void hapticFeedback();
+
 	/// returns true if system has active touchscreen
 	bool hasTouchInputDevice() const;
 

+ 15 - 3
client/eventsSDL/InputSourceKeyboard.cpp

@@ -17,6 +17,7 @@
 #include "../gui/EventDispatcher.h"
 #include "../gui/ShortcutHandler.h"
 
+#include <SDL_clipboard.h>
 #include <SDL_events.h>
 #include <SDL_hints.h>
 
@@ -30,13 +31,24 @@ InputSourceKeyboard::InputSourceKeyboard()
 
 void InputSourceKeyboard::handleEventKeyDown(const SDL_KeyboardEvent & key)
 {
-	if(key.repeat != 0)
-		return; // ignore periodic event resends
-
 	if (SDL_IsTextInputActive() == SDL_TRUE)
 	{
+		if(key.keysym.sym == SDLK_v && isKeyboardCtrlDown()) 
+		{
+			char * clipboardBuffer = SDL_GetClipboardText();
+			std::string clipboardContent = clipboardBuffer;
+			boost::erase_all(clipboardContent, "\r");
+			boost::erase_all(clipboardContent, "\n");
+			GH.events().dispatchTextInput(clipboardContent);
+			SDL_free(clipboardBuffer);
+			return;
+	 	}
+
 		if (key.keysym.sym >= ' ' && key.keysym.sym < 0x80)
 			return; // printable character - will be handled as text input
+	} else {
+		if(key.repeat != 0)
+			return; // ignore periodic event resends
 	}
 
 	assert(key.state == SDL_PRESSED);

+ 9 - 1
client/eventsSDL/InputSourceTouch.cpp

@@ -81,7 +81,10 @@ void InputSourceTouch::handleEventFingerMotion(const SDL_TouchFingerEvent & tfin
 		{
 			Point distance = convertTouchToMouse(tfinger) - lastTapPosition;
 			if ( std::abs(distance.x) > params.panningSensitivityThreshold || std::abs(distance.y) > params.panningSensitivityThreshold)
+			{
 				state = TouchState::TAP_DOWN_PANNING;
+				GH.events().dispatchGesturePanningStarted(lastTapPosition);
+			}
 			break;
 		}
 		case TouchState::TAP_DOWN_PANNING:
@@ -128,11 +131,16 @@ void InputSourceTouch::handleEventFingerDown(const SDL_TouchFingerEvent & tfinge
 		{
 			lastTapPosition = convertTouchToMouse(tfinger);
 			GH.input().setCursorPosition(lastTapPosition);
-			GH.events().dispatchGesturePanningStarted(lastTapPosition);
 			state = TouchState::TAP_DOWN_SHORT;
 			break;
 		}
 		case TouchState::TAP_DOWN_SHORT:
+		{
+			GH.input().setCursorPosition(convertTouchToMouse(tfinger));
+			GH.events().dispatchGesturePanningStarted(lastTapPosition);
+			state = TouchState::TAP_DOWN_DOUBLE;
+			break;
+		}
 		case TouchState::TAP_DOWN_PANNING:
 		{
 			GH.input().setCursorPosition(convertTouchToMouse(tfinger));

+ 2 - 2
client/eventsSDL/InputSourceTouch.h

@@ -96,8 +96,6 @@ class InputSourceTouch
 
 	void emitPanningEvent(const SDL_TouchFingerEvent & tfinger);
 	void emitPinchEvent(const SDL_TouchFingerEvent & tfinger);
-	
-	void hapticFeedback();
 
 public:
 	InputSourceTouch();
@@ -106,6 +104,8 @@ public:
 	void handleEventFingerDown(const SDL_TouchFingerEvent & current);
 	void handleEventFingerUp(const SDL_TouchFingerEvent & current);
 
+	void hapticFeedback();
+
 	void handleUpdate();
 
 	bool hasTouchInputDevice() const;

+ 3 - 3
client/lobby/RandomMapTab.cpp

@@ -306,7 +306,7 @@ void RandomMapTab::setMapGenOptions(std::shared_ptr<CMapGenOptions> opts)
 		if(tmpl)
 			w->addTextOverlay(tmpl->getName(), EFonts::FONT_SMALL);
 		else
-			w->addTextOverlay(readText(variables["defaultTemplate"]), EFonts::FONT_SMALL);
+			w->addTextOverlay(readText(variables["randomTemplate"]), EFonts::FONT_SMALL);
 	}
 	for(auto r : VLC->roadTypeHandler->objects)
 	{
@@ -326,7 +326,7 @@ void RandomMapTab::setTemplate(const CRmgTemplate * tmpl)
 		if(tmpl)
 			w->addTextOverlay(tmpl->getName(), EFonts::FONT_SMALL);
 		else
-			w->addTextOverlay(readText(variables["defaultTemplate"]), EFonts::FONT_SMALL);
+			w->addTextOverlay(readText(variables["randomTemplate"]), EFonts::FONT_SMALL);
 	}
 	updateMapInfoByHost();
 }
@@ -387,7 +387,7 @@ void TemplatesDropBox::ListItem::updateItem(int idx, const CRmgTemplate * _item)
 			if(idx)
 				w->setText("");
 			else
-				w->setText(readText(dropBox.variables["defaultTemplate"]));
+				w->setText(readText(dropBox.variables["randomTemplate"]));
 		}
 	}
 }

+ 0 - 3
client/lobby/SelectionTab.cpp

@@ -194,11 +194,8 @@ SelectionTab::SelectionTab(ESelectionScreen Type)
 	}
 
 	iconsMapFormats = std::make_shared<CAnimation>("SCSELC.DEF");
-	iconsMapFormats->preload();
 	iconsVictoryCondition = std::make_shared<CAnimation>("SCNRVICT.DEF");
-	iconsVictoryCondition->preload();
 	iconsLossCondition = std::make_shared<CAnimation>("SCNRLOSS.DEF");
-	iconsLossCondition->preload();
 	for(int i = 0; i < positionsToShow; i++)
 		listItems.push_back(std::make_shared<ListItem>(Point(30, 129 + i * 25), iconsMapFormats, iconsVictoryCondition, iconsLossCondition));
 

+ 4 - 0
client/widgets/RadialMenu.cpp

@@ -13,6 +13,7 @@
 #include "Images.h"
 #include "TextControls.h"
 
+#include "../eventsSDL/InputHandler.h"
 #include "../gui/CGuiHandler.h"
 #include "../gui/WindowHandler.h"
 #include "../render/IImage.h"
@@ -137,5 +138,8 @@ void RadialMenu::gesture(bool on, const Point & initialPosition, const Point & f
 	// we need to close this window first so if action spawns a new window it won't be closed instead
 	GH.windows().popWindows(1);
 	if (item)
+	{
+		GH.input().hapticFeedback();
 		item->callback();
+	}
 }

+ 9 - 0
client/windows/InfoWindows.cpp

@@ -90,6 +90,15 @@ CSelWindow::CSelWindow(const std::string &Text, PlayerColor player, int charperl
 		//buttons.back()->addCallback(std::bind(&CCallback::selectionMade, LOCPLINT->cb.get(), 0, askID));
 	}
 
+	if(buttons.size() == 1)
+		buttons.front()->assignedKey = EShortcut::GLOBAL_RETURN;
+
+	if(buttons.size() == 2)
+	{
+		buttons.front()->assignedKey = EShortcut::GLOBAL_ACCEPT;
+		buttons.back()->assignedKey = EShortcut::GLOBAL_CANCEL;
+	}
+
 	for(int i=0;i<comps.size();i++)
 	{
 		comps[i]->recActions = 255-DISPOSE;

+ 57 - 1
config/bonuses.json

@@ -35,6 +35,14 @@
 		}
 	},
 
+	"BLOCKS_RANGED_RETALIATION":
+	{
+		"graphics":
+		{
+			"icon":  "zvs/Lib1.res/RANGEDBLOCK"
+		}
+	},
+
 	"BLOCKS_RETALIATION":
 	{
 		"graphics":
@@ -100,6 +108,14 @@
 		}
 	},
 
+	"DESTRUCTION":
+	{
+		"graphics":
+		{
+			"icon":  "zvs/Lib1.res/DESTROYER"
+		}
+	},
+
 	"DOUBLE_DAMAGE_CHANCE":
 	{
 		"graphics":
@@ -168,7 +184,15 @@
 			"icon":  "zvs/Lib1.res/FireShield"
 		}
 	},
-	
+
+	"FIRST_STRIKE":
+	{
+		"graphics":
+		{
+			"icon":  "zvs/Lib1.res/FIRSTSTRIKE"
+		}
+	},
+
 	"FEAR":
 	{
 		"graphics":
@@ -396,6 +420,14 @@
 		"hidden": true
 	},
 
+	"RANGED_RETALIATION":
+	{
+		"graphics":
+		{
+			"icon":  "zvs/Lib1.res/RANGEDCOUNTER"
+		}
+	},
+
 	"RECEPTIVE":
 	{
 		"graphics":
@@ -427,6 +459,14 @@
 			"icon":  "zvs/Lib1.res/E_SHOOT"
 		}
 	},
+
+	"SHOOTS_ALL_ADJACENT":
+	{
+		"graphics":
+		{
+			"icon":  "zvs/Lib1.res/AREASHOT"
+		}
+	},
 	
 	"SOUL_STEAL":
 	{
@@ -492,6 +532,14 @@
 		}
 	},
 
+	"SUMMON_GUARDIANS":
+	{
+		"graphics":
+		{
+			"icon":  "zvs/Lib1.res/SUMMONGUARDS"
+		}
+	},
+
 	"TWO_HEX_ATTACK_BREATH":
 	{
 		"graphics":
@@ -543,6 +591,14 @@
 		{
 			"icon":  "zvs/Lib1.res/E_SPWATER1"
 		}
+	},
+
+	"WIDE_BREATH":
+	{
+		"graphics":
+		{
+			"icon":  "zvs/Lib1.res/MEGABREATH"
+		}
 	}
 }
 

+ 4 - 1
config/schemas/mod.json

@@ -153,7 +153,7 @@
 		"language" : {
 			"type" : "string",
 			"description" : "Base language of the mod, before applying localizations. By default vcmi assumes English",
-			"enum" : [ "czech", "chinese", "english", "finnish", "french", "german", "hungarian", "italian", "korean", "polish", "portuguese", "russian", "spanish", "swedish", "turkish", "ukrainian" ]
+			"enum" : [ "czech", "chinese", "english", "finnish", "french", "german", "hungarian", "italian", "korean", "polish", "portuguese", "russian", "spanish", "swedish", "turkish", "ukrainian", "vietnamese" ]
 		},
 		"czech" : {
 			"$ref" : "#/definitions/localizable"
@@ -203,6 +203,9 @@
 		"ukrainian" : {
 			"$ref" : "#/definitions/localizable"
 		},
+		"vietnamese" : {
+			"$ref" : "#/definitions/localizable"
+		},
 		"translations" : {
 			"type" : "array",
 			"description" : "List of files with translations for this language",

+ 2 - 2
config/schemas/obstacle.json

@@ -30,11 +30,11 @@
 		},
 		"width" : {
 			"type" : "number",
-			"description" : "Width ob obstacle"
+			"description" : "Width of obstacle"
 		},
 		"height" : {
 			"type" : "number",
-			"description" : "height if obstacle"
+			"description" : "height of obstacle"
 		},
 		"blockedTiles" : {
 			"type" : "array",

+ 2 - 2
config/schemas/settings.json

@@ -63,12 +63,12 @@
 				},
 				"language" : {
 					"type" : "string",
-					"enum" : [ "english", "czech", "chinese", "finnish", "french", "german", "hungarian", "italian", "korean", "polish", "portuguese", "russian", "spanish", "swedish", "turkish", "ukrainian" ],
+					"enum" : [ "english", "czech", "chinese", "finnish", "french", "german", "hungarian", "italian", "korean", "polish", "portuguese", "russian", "spanish", "swedish", "turkish", "ukrainian", "vietnamese" ],
 					"default" : "english"
 				},
 				"gameDataLanguage" : {
 					"type" : "string",
-					"enum" : [ "auto", "english", "czech", "chinese", "finnish", "french", "german", "hungarian", "italian", "korean", "polish", "portuguese", "russian", "spanish", "swedish", "turkish", "ukrainian", "other_cp1250", "other_cp1251", "other_cp1252" ],
+					"enum" : [ "auto", "english", "czech", "chinese", "finnish", "french", "german", "hungarian", "italian", "korean", "polish", "portuguese", "russian", "spanish", "swedish", "turkish", "ukrainian", "vietnamese", "other_cp1250", "other_cp1251", "other_cp1252" ],
 					"default" : "auto"
 				},
 				"lastSave" : {

+ 4 - 4
config/schemas/spell.json

@@ -308,10 +308,10 @@
 					"$ref" : "#/definitions/levelInfo"
 				}
 			}
+		},
+		"onlyOnWaterMap" : {
+			"type" : "boolean",
+			"description" : "It true, spell won't be available on a map without water"
 		}
 	},
-	"onlyOnWaterMap" : {
-		"type" : "boolean",
-		"description" : "It true, spell won't be available on a map without water"
-	}
 }

+ 2 - 1
launcher/languages.cpp

@@ -18,7 +18,7 @@
 #include <QListWidget>
 
 // list of language names, for generation of translations. Do not use directly, use Languages namespace instead
-static const std::array<std::string, 19> languageTranslatedNamesGenerator = {
+static const std::array<std::string, 20> languageTranslatedNamesGenerator = {
 	{
 		QT_TRANSLATE_NOOP("Language", "Czech"),
 		QT_TRANSLATE_NOOP("Language", "Chinese"),
@@ -36,6 +36,7 @@ static const std::array<std::string, 19> languageTranslatedNamesGenerator = {
 		QT_TRANSLATE_NOOP("Language", "Swedish"),
 		QT_TRANSLATE_NOOP("Language", "Turkish"),
 		QT_TRANSLATE_NOOP("Language", "Ukrainian"),
+		QT_TRANSLATE_NOOP("Language", "Vietnamese"),
 		QT_TRANSLATE_NOOP("Language", "Other (East European)"),
 		QT_TRANSLATE_NOOP("Language", "Other (Cyrillic Script)"),
 		QT_TRANSLATE_NOOP("Language", "Other (West European)"),

+ 2 - 2
launcher/modManager/cmodlist.cpp

@@ -280,7 +280,7 @@ CModEntry CModList::getMod(QString modname) const
 
 	if(conf.isNull())
 	{
-		settings["active"] = true; // default
+		settings["active"] = !local.value("keepDisabled").toBool();
 	}
 	else
 	{
@@ -288,7 +288,7 @@ CModEntry CModList::getMod(QString modname) const
 		{
 			settings = conf.toMap();
 			if(settings.value("active").isNull())
-				settings["active"] = true; // default
+				settings["active"] = !local.value("keepDisabled").toBool();
 		}
 		else
 			settings.insert("active", conf);

+ 69 - 81
launcher/translation/chinese.ts

@@ -407,120 +407,123 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <source>Open</source>
-        <translation type="vanished">打开</translation>
-    </message>
-    <message>
-        <source>User data directory</source>
-        <translation type="vanished">用户数据目录</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation>关闭</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation>人工智能</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation>模组仓库</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
-        <source>Refresh now</source>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
-        <source>Default repository</source>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
+        <source>Refresh now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Update now</source>
-        <translation type="vanished">立即更新</translation>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
+        <source>Default repository</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation>开启</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation>鼠标指针</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation>英雄无敌3数据语言</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -531,107 +534,95 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation>硬件</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation>软件</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translatorcomment>发布版本里找不到这个项,不太清楚意义</translatorcomment>
         <translation>英雄无敌3翻译</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation>启动时检查更新</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation>全屏</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation>通用设置</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation>VCMI语言</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation>分辨率</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation>自动存档</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation>显示器序号</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation>网络端口</translation>
     </message>
     <message>
-        <source>Data Directories</source>
-        <translation type="vanished">数据目录</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation>视频设置</translation>
     </message>
     <message>
-        <source>Log files directory</source>
-        <translation type="vanished">日志文件目录</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation>显示开场动画</translation>
     </message>
     <message>
-        <source>Build version</source>
-        <translation type="vanished">版本号</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation>激活</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation>禁用</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation>启用</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation>未安装</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation>安装</translation>
     </message>
@@ -730,10 +721,6 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
         <source>Install mod that provides various interface improvements, such as better interface for random maps and selectable actions in battles</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
-        <translation type="vanished">安装英雄无敌3的800x600以上分辨率支持</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="788"/>
         <source>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported by the VCMI team</source>
@@ -821,10 +808,6 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
         <source>Heroes III Translation</source>
         <translation>英雄无敌3翻译</translation>
     </message>
-    <message>
-        <source>High Definition Support</source>
-        <translation type="vanished">高分辨率支持</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="724"/>
         <source>In The Wake of Gods</source>
@@ -923,21 +906,26 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
+        <source>Vietnamese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="40"/>
         <source>Other (East European)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="40"/>
+        <location filename="../languages.cpp" line="41"/>
         <source>Other (Cyrillic Script)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="41"/>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation>自动 (%1)</translation>
     </message>

+ 69 - 49
launcher/translation/english.ts

@@ -406,108 +406,123 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
         <source>Refresh now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
         <source>Default repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -518,94 +533,94 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
@@ -883,21 +898,26 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
-        <source>Other (East European)</source>
+        <source>Vietnamese</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../languages.cpp" line="40"/>
-        <source>Other (Cyrillic Script)</source>
+        <source>Other (East European)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../languages.cpp" line="41"/>
+        <source>Other (Cyrillic Script)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation type="unfinished"></translation>
     </message>

+ 71 - 386
launcher/translation/french.ts

@@ -198,118 +198,6 @@
         <translation>Version</translation>
     </message>
 </context>
-<context>
-    <name>CModListModel</name>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="42"/>
-        <source>Translation</source>
-        <translation>Traduction</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="43"/>
-        <source>Town</source>
-        <translation>Ville</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="44"/>
-        <source>Test</source>
-        <translation>Test</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="45"/>
-        <source>Templates</source>
-        <translation>Modèles</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="46"/>
-        <source>Spells</source>
-        <translation>Sorts</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="47"/>
-        <source>Music</source>
-        <translation>Musique</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="48"/>
-        <source>Sounds</source>
-        <translation>Sons</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="49"/>
-        <source>Skills</source>
-        <translation>Compétences</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="50"/>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="67"/>
-        <source>Other</source>
-        <translation>Autre</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="51"/>
-        <source>Objects</source>
-        <translation>Objets</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="52"/>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="53"/>
-        <source>Mechanics</source>
-        <translation>Mécanique</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="54"/>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="55"/>
-        <source>Interface</source>
-        <translation>Interface</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="56"/>
-        <source>Heroes</source>
-        <translation>Héros</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="57"/>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="58"/>
-        <source>Graphical</source>
-        <translation>Graphique</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="59"/>
-        <source>Expansion</source>
-        <translation>Extension</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="60"/>
-        <source>Creatures</source>
-        <translation>Créatures</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="61"/>
-        <source>Artifacts</source>
-        <translation>Artefacts</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="62"/>
-        <source>AI</source>
-        <translation>IA</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="170"/>
-        <source>Name</source>
-        <translation>Nom</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="173"/>
-        <source>Type</source>
-        <translation>Type</translation>
-    </message>
-    <message>
-        <location filename="../modManager/cmodlistmodel_moc.cpp" line="174"/>
-        <source>Version</source>
-        <translation>Version</translation>
-    </message>
-</context>
 <context>
     <name>CModListView</name>
     <message>
@@ -398,10 +286,6 @@
         <source>Install</source>
         <translation>Installer</translation>
     </message>
-    <message>
-        <source>%p% (%v KB out of %m KB)</source>
-        <translation type="vanished">%p% (%v Ko sur %m Ko)</translation>
-    </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.ui" line="337"/>
         <source>Abort</source>
@@ -527,63 +411,43 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <source>Change</source>
-        <translation type="vanished">Changer</translation>
-    </message>
-    <message>
-        <source>Open</source>
-        <translation type="vanished">Ouvrir</translation>
-    </message>
-    <message>
-        <source>Adventure Map AI</source>
-        <translation type="vanished">IA de Carte d&apos;Aventure</translation>
-    </message>
-    <message>
-        <source>User data directory</source>
-        <translation type="vanished">Dossier de donnée utilisateur</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation>Désactivé</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation>Intelligence Artificielle</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation>Dépôts de Mod</translation>
     </message>
     <message>
-        <source>Update now</source>
-        <translation type="vanished">Mettre à jour maintenant</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation>Activé</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation>IA ennemie dans les batailles</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
         <source>Default repository</source>
         <translation>Dépôt par défaut</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -600,191 +464,174 @@ Mode fenêtré sans bord - le jeu s&quot;exécutera dans une fenêtre qui couvre
 Mode exclusif plein écran - le jeu couvrira l&quot;intégralité de votre écran et utilisera la résolution sélectionnée.</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation>Fenêtré</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation>Fenêtré sans bord</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation>Plein écran exclusif</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation>IA neutre dans les batailles</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation>Ennemis de la carte d&quot;aventure</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation>Mise à l&quot;échelle de l&quot;interface</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation>Curseur</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation>Langue des Données de Heroes III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation>Limite de fréquence d&quot;images</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation>Matériel</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation>Logiciel</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translation>Traduction de Heroes III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation>Alliés de la carte d&quot;aventure</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation>Dépôt supplémentaire</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation>Vérifier au démarrage</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
         <source>Refresh now</source>
         <translation>Actualiser maintenant</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation>IA amicale dans les batailles</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation>Plein écran</translation>
     </message>
     <message>
-        <source>Neutral AI</source>
-        <translation type="vanished">IA neutre</translation>
-    </message>
-    <message>
-        <source>Real</source>
-        <translation type="vanished">Réel</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation>Général</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation>Langue de VCMI</translation>
     </message>
     <message>
-        <source>Friendly AI</source>
-        <translation type="vanished">IA amicale</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation>Résolution</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation>Sauvegarde automatique</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation>Index d&apos;affichage</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation>Port de réseau</translation>
     </message>
     <message>
-        <source>Data Directories</source>
-        <translation type="vanished">Dossier de Données</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation>Vidéo</translation>
     </message>
     <message>
-        <source>Extra data directory</source>
-        <translation type="vanished">Dossier de données supplémentaires</translation>
-    </message>
-    <message>
-        <source>Log files directory</source>
-        <translation type="vanished">Dossier de journalisation</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation>Montrer l&apos;intro</translation>
     </message>
     <message>
-        <source>Build version</source>
-        <translation type="vanished">Version de la construction</translation>
-    </message>
-    <message>
-        <source>Enemy AI</source>
-        <translation type="vanished">IA ennemi</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation>Actif</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation>Désactivé</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation>Activé</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation>Pas Installé</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation>Installer</translation>
     </message>
@@ -816,110 +663,26 @@ Mode exclusif plein écran - le jeu couvrira l&quot;intégralité de votre écra
         <source>Have a question? Found a bug? Want to help? Join us!</source>
         <translation>Avez-vous une question ? Avez-vous trouvé un bogue ? Besoin d&apos;aide ? Rejoignez-nous !</translation>
     </message>
-    <message>
-        <source>Thank you for installing VCMI!
-
-                Before you can start playing, there are a few more steps that need to be completed.
-
-                Please keep in mind that in order to use VCMI you must own the original data files for Heroes® of Might
-                and Magic® III: Complete or The Shadow of Death.
-
-                Heroes® of Might and Magic® III HD is currently not supported!
-            </source>
-        <translation type="vanished">Merci d&apos;avoir installé VCMI !
-
-                Avant que vous ne commenciez à jouer, il y a encore quelques étapes qui ont besoin d&apos;être complétées.
-
-                Veuillez garder à l&apos;esprit que pour utiliser VCMI, vous devez posséder les fichiers de données originaux de Heroes® of Might
-                and Magic® III: Complete ou The Shadow of Death.
-
-                Heroes® of Might and Magic® III HD n&apos;est pas supporté actuellement !
-            </translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="257"/>
         <source>Locate Heroes III data files</source>
         <translation>Localiser les fichiers de données de Heroes III</translation>
     </message>
-    <message>
-        <source>If you don&apos;t have a copy of Heroes III installed, you can use our automatic installation tool
-                &apos;vcmibuilder&apos;, which only requires the GoG.com Heroes III installer. Please visit our wiki for
-                detailed instructions.
-            </source>
-        <translation type="vanished">Si vous n&apos;avez pas de copie de Heroes III d&apos;installé, vous pouvez utiliser notre
-                outil d&apos;installation automatique &apos;vcmibuilder&apos;, qui ne nécessite que l&apos;installeur Heroes III de GoG.com.
-                Veuillez visiter notre wiki pour plus d&apos;informations.
-            </translation>
-    </message>
-    <message>
-        <source>To run VCMI, Heroes III data files need to be present in one of the specified locations. Please copy
-                the Heroes III data to one of these directories.
-            </source>
-        <translation type="vanished">Pour lancer VCMI, les fichiers de données de Heroes III ont besoin d&apos;être présent dans un des emplacements spécifiés.
-                Veuillez copier les données de Heroes III vers un de ces dossiers.
-            </translation>
-    </message>
-    <message>
-        <source>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy
-                the existing data automatically.
-            </source>
-        <translation type="vanished">Ou sinon, vous pouvez indiquer le dossier où les données de Heroes III sont installées et VCMI va copier les données existantes automatiquement.
-            </translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="426"/>
         <source>Your Heroes III data files have been successfully found.</source>
         <translation>Vos fichiers de données de Heroes III ont été trouvés.</translation>
     </message>
-    <message>
-        <source>The automatic detection of the Heroes III language has failed. Please select the language of your
-                Heroes III manually
-            </source>
-        <translation type="vanished">La détection automatique de la langue de Heroes III a échoué. Veuillez sélectionner
-                la langue de votre Heroes III manuellement
-            </translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="740"/>
         <source>Install a translation of Heroes III in your preferred language</source>
         <translation>Installer une traduction de Heroes III dans la langue de votre choix</translation>
     </message>
-    <message>
-        <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI
-                Launcher
-            </source>
-        <translation type="vanished">Éventuellement, vous pouvez installer des mods supplémentaires soit maintenant, soit plus tard, en utilisant le lanceur VCMI
-            </translation>
-    </message>
-    <message>
-        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
-        <translation type="vanished">Installer un support pour jouer à Heroes III avec des résolutions supérieures à 800x600
-            </translation>
-    </message>
-    <message>
-        <source>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported
-                by the VCMI team
-            </source>
-        <translation type="vanished">Installer une version compatible de &quot;Horn of the Abyss&quot;, une extension de
-                Heroes III fait par des fans porté par l&apos;équipe VCMI
-            </translation>
-    </message>
-    <message>
-        <source>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion
-            </source>
-        <translation type="vanished">Installer une version compatible de &quot;In The Wake of Gods&quot;, une extension de
-                Heroes III fait par des fans
-            </translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="851"/>
         <source>Finish</source>
         <translation>Terminer</translation>
     </message>
-    <message>
-        <source>Step %v out of %m</source>
-        <translation type="vanished">Étape %v sur %m</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="156"/>
         <source>VCMI on Github</source>
@@ -1032,11 +795,7 @@ Heroes® of Might and Magic® III HD n&quot;est actuellement pas pris en charge
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="702"/>
         <source>Interface Improvements</source>
-        <translation>Améliorations de l'interface</translation>
-    </message>
-    <message>
-        <source>High Definition Support</source>
-        <translation type="vanished">Support de Haute Définition</translation>
+        <translation>Améliorations de l&apos;interface</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="724"/>
@@ -1051,7 +810,7 @@ Heroes® of Might and Magic® III HD n&quot;est actuellement pas pris en charge
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="772"/>
         <source>Install mod that provides various interface improvements, such as better interface for random maps and selectable actions in battles</source>
-        <translation>Installer le mod qui fournit diverses améliorations d'interface, telles qu'une meilleure interface pour les cartes aléatoires et des actions sélectionnables dans les batailles</translation>
+        <translation>Installer le mod qui fournit diverses améliorations d&apos;interface, telles qu&apos;une meilleure interface pour les cartes aléatoires et des actions sélectionnables dans les batailles</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="788"/>
@@ -1156,21 +915,26 @@ Heroes® of Might and Magic® III HD n&quot;est actuellement pas pris en charge
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
+        <source>Vietnamese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="40"/>
         <source>Other (East European)</source>
         <translation>Autre (Europe de l&apos;Est)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="40"/>
+        <location filename="../languages.cpp" line="41"/>
         <source>Other (Cyrillic Script)</source>
         <translation>Autre (Alphabet Cyrillique)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="41"/>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation>Autre (Europe de l&apos;Ouest)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation>Auto (%1)</translation>
     </message>
@@ -1335,85 +1099,6 @@ Heroes® of Might and Magic® III HD n&quot;est actuellement pas pris en charge
         <translation>Démarrer une partie</translation>
     </message>
 </context>
-<context>
-    <name>Salon</name>
-    <message>
-        <source>Connect</source>
-        <translation type="vanished">Connecter</translation>
-    </message>
-    <message>
-        <source>Username</source>
-        <translation type="vanished">Nom d&apos;utilisateur</translation>
-    </message>
-    <message>
-        <source>Server</source>
-        <translation type="vanished">Serveur</translation>
-    </message>
-    <message>
-        <source>Lobby chat</source>
-        <translation type="vanished">Discussion de salle d&apos;attente</translation>
-    </message>
-    <message>
-        <source>Session</source>
-        <translation type="vanished">Session</translation>
-    </message>
-    <message>
-        <source>Players</source>
-        <translation type="vanished">Joueurs</translation>
-    </message>
-    <message>
-        <source>Resolve</source>
-        <translation type="vanished">Résoudre</translation>
-    </message>
-    <message>
-        <source>New game</source>
-        <translation type="vanished">Nouvelle partie</translation>
-    </message>
-    <message>
-        <source>Load game</source>
-        <translation type="vanished">Charger une partie</translation>
-    </message>
-    <message>
-        <source>New room</source>
-        <translation type="vanished">Nouveau salon</translation>
-    </message>
-    <message>
-        <source>Players in lobby</source>
-        <translation type="vanished">Joueurs à la salle d&apos;attente</translation>
-    </message>
-    <message>
-        <source>Join room</source>
-        <translation type="vanished">Rejoindre le salon</translation>
-    </message>
-    <message>
-        <source>Ready</source>
-        <translation type="vanished">Prêt</translation>
-    </message>
-    <message>
-        <source>Mods mismatch</source>
-        <translation type="vanished">Incohérence de mods</translation>
-    </message>
-    <message>
-        <source>Leave</source>
-        <translation type="vanished">Quitter</translation>
-    </message>
-    <message>
-        <source>Kick player</source>
-        <translation type="vanished">Jeter le joueur</translation>
-    </message>
-    <message>
-        <source>Players in the room</source>
-        <translation type="vanished">Joueurs dans le salon</translation>
-    </message>
-    <message>
-        <source>Disconnect</source>
-        <translation type="vanished">Déconnecter</translation>
-    </message>
-    <message>
-        <source>No issues detected</source>
-        <translation type="vanished">Pas de problème détecté</translation>
-    </message>
-</context>
 <context>
     <name>UpdateDialog</name>
     <message>

+ 73 - 85
launcher/translation/german.ts

@@ -406,120 +406,123 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <source>Open</source>
-        <translation type="vanished">Öffnen</translation>
-    </message>
-    <message>
-        <source>User data directory</source>
-        <translation type="vanished">Verzeichnis der Benutzerdaten</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation>Aus</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation>Künstliche Intelligenz</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation>Mod-Repositorien</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation>Skalierung der Benutzeroberfläche</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation>Neutrale KI in Kämpfen</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation>Gegnerische KI in Kämpfen</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation>Zusätzliches Repository</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation>Abenteuerkarte Verbündete</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation>Abenteuerkarte Feinde</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation>Fenstermodus</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation>Randloser Vollbildmodus</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation>Exklusiver Vollbildmodus</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation>Freundliche KI in Kämpfen</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation>Limit der Bildrate</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
         <source>Refresh now</source>
         <translation>Jetzt aktualisieren</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
         <source>Default repository</source>
         <translation>Standard Repository</translation>
     </message>
     <message>
-        <source>Update now</source>
-        <translation type="vanished">Jetzt aktualisieren</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation>An</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation>Zeiger</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation>Sprache der Heroes III Daten</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -536,106 +539,94 @@ Randloser Fenstermodus - das Spiel läuft in einem Fenster, das den gesamten Bil
 Exklusiver Vollbildmodus - das Spiel bedeckt den gesamten Bildschirm und verwendet die gewählte Auflösung.</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation>Hardware</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation>Software</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translation>Heroes III Übersetzung</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation>Beim Start prüfen</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation>Vollbild</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation>Allgemein</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation>VCMI-Sprache</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation>Auflösung</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation>Autospeichern</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation>Anzeige-Index</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation>Netzwerk-Port</translation>
     </message>
     <message>
-        <source>Data Directories</source>
-        <translation type="vanished">Daten-Verzeichnisse</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation>Video</translation>
     </message>
     <message>
-        <source>Log files directory</source>
-        <translation type="vanished">Verzeichnis der Log-Dateien</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation>Intro anzeigen</translation>
     </message>
     <message>
-        <source>Build version</source>
-        <translation type="vanished">Version des Builds</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation>Aktiv</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation>Deaktiviert</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation>Aktivieren</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation>Nicht installiert</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation>Installieren</translation>
     </message>
@@ -676,13 +667,13 @@ Before you can start playing, there are a few more steps that need to be complet
 Please keep in mind that in order to use VCMI you must own the original data files for Heroes® of Might and Magic® III: Complete or The Shadow of Death.
 
 Heroes® of Might and Magic® III HD is currently not supported!</source>
-        <translation>Vielen Dank für die Installation von VCMI.
+        <translation>Vielen Dank für die Installation von VCMI!
 
 Es sind noch ein paar Schritte notwendig, bevor Sie mit dem Spielen beginnen können.
 
 Denken Sie daran, dass Sie die Originaldateien, Heroes III: Complete Edition oder Shadow of Death besitzen müssen, um VCMI verwenden zu können.
 
-Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
+Heroes III: HD Edition wird derzeit nicht unterstützt!</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="257"/>
@@ -717,7 +708,7 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="702"/>
         <source>Interface Improvements</source>
-        <translation type="unfinished"></translation>
+        <translation>Interface-Verbesserungen</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="740"/>
@@ -732,11 +723,7 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="772"/>
         <source>Install mod that provides various interface improvements, such as better interface for random maps and selectable actions in battles</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
-        <translation type="vanished">Installieren Sie Unterstützung für das Spielen von Heroes III in anderen Auflösungen als 800x600</translation>
+        <translation>Installiere Mod, die verschiedene Interface-Verbesserungen bietet, wie z.B. ein besseres Interface für zufällige Karten und wählbare Aktionen in Kämpfen</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="788"/>
@@ -825,10 +812,6 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
         <source>Heroes III Translation</source>
         <translation>Heroes III Übersetzung</translation>
     </message>
-    <message>
-        <source>High Definition Support</source>
-        <translation type="vanished">Unterstützung für hohe Auflösungen</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="724"/>
         <source>In The Wake of Gods</source>
@@ -927,21 +910,26 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
+        <source>Vietnamese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="40"/>
         <source>Other (East European)</source>
         <translation>Sonstige (osteuropäisch)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="40"/>
+        <location filename="../languages.cpp" line="41"/>
         <source>Other (Cyrillic Script)</source>
         <translation>Sonstige (kyrillische Schrift)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="41"/>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation>Sonstige (westeuropäisch)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation>Auto (%1)</translation>
     </message>

+ 69 - 81
launcher/translation/polish.ts

@@ -406,120 +406,123 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <source>Open</source>
-        <translation type="vanished">Otwórz</translation>
-    </message>
-    <message>
-        <source>User data directory</source>
-        <translation type="vanished">Katalog danych użytkownika</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation>Wyłączony</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation>Sztuczna Inteligencja</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation>Repozytoria modów</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation>Skala interfejsu</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation>AI bitewne jednostek neutralnych</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation>AI bitewne wrogów</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation>Dodatkowe repozytorium</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation>AI sojuszników mapy przygody</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation>AI wrogów mapy przygody</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation>Okno</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation>Pełny ekran (tryb okna)</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation>Pełny ekran klasyczny</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation>AI bitewne sojuszników</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation>Limit FPS</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
         <source>Refresh now</source>
         <translation>Odśwież</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
         <source>Default repository</source>
         <translation>Domyślne repozytorium</translation>
     </message>
     <message>
-        <source>Update now</source>
-        <translation type="vanished">Zaktualizuj teraz</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation>Włączony</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation>Kursor</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation>Język plików Heroes III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -536,106 +539,94 @@ Pełny ekran w trybie okna - gra uruchomi się w oknie przysłaniającym cały e
 Pełny ekran klasyczny - gra przysłoni cały ekran uruchamiając się w wybranej przez ciebie rozdzielczości ekranu.</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation>Sprzętowy</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation>Programowy</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translation>Tłumaczenie Heroes III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation>Sprawdzaj przy uruchomieniu</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation>Pełny ekran</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation>Ogólne</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation>Język VCMI</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation>Rozdzielczość</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation>Autozapis</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation>Numer wyświetlacza</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation>Port sieciowy</translation>
     </message>
     <message>
-        <source>Data Directories</source>
-        <translation type="vanished">Katalogi z danymi</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation>Obraz</translation>
     </message>
     <message>
-        <source>Log files directory</source>
-        <translation type="vanished">Katalog logów</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation>Pokaż intro</translation>
     </message>
     <message>
-        <source>Build version</source>
-        <translation type="vanished">Wersja programu</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation>Aktywny</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation>Wyłączone</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation>Włącz</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation>Nie zainstalowano</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation>Zainstaluj</translation>
     </message>
@@ -734,10 +725,6 @@ Heroes III: HD Edition nie jest obecnie wspierane!</translation>
         <source>Install mod that provides various interface improvements, such as better interface for random maps and selectable actions in battles</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
-        <translation type="vanished">Zainstaluj wsparcie dla grania w Heroes III w rozdzielczości innej niż 800x600</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="788"/>
         <source>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported by the VCMI team</source>
@@ -825,10 +812,6 @@ Heroes III: HD Edition nie jest obecnie wspierane!</translation>
         <source>Heroes III Translation</source>
         <translation>Tłumaczenie Heroes III</translation>
     </message>
-    <message>
-        <source>High Definition Support</source>
-        <translation type="vanished">Wsparcie High Definition</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="724"/>
         <source>In The Wake of Gods</source>
@@ -927,21 +910,26 @@ Heroes III: HD Edition nie jest obecnie wspierane!</translation>
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
-        <source>Other (East European)</source>
+        <source>Vietnamese</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../languages.cpp" line="40"/>
-        <source>Other (Cyrillic Script)</source>
+        <source>Other (East European)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../languages.cpp" line="41"/>
+        <source>Other (Cyrillic Script)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation type="unfinished"></translation>
     </message>

+ 68 - 80
launcher/translation/russian.ts

@@ -406,141 +406,144 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <source>Open</source>
-        <translation type="vanished">Открыть</translation>
-    </message>
-    <message>
-        <source>User data directory</source>
-        <translation type="vanished">Данные пользователя</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation>Отключено</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation>Включено</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation>Проверять при запуске</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation>Полноэкранный режим</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation>Общее</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation>Язык VCMI</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation>Курсор</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation>Искусственный интеллект</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation>Репозитории модов</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
         <source>Refresh now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
-        <source>Default repository</source>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Update now</source>
-        <translation type="vanished">Обновить сейчас</translation>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
+        <source>Default repository</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation>Язык данных Героев III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -551,85 +554,73 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation>Аппаратный</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation>Программный</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translation>Перевод Героев III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation>Разрешение экрана</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation>Автосохранение</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation>Дисплей</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation>Сетевой порт</translation>
     </message>
     <message>
-        <source>Data Directories</source>
-        <translation type="vanished">Директории данных</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation>Графика</translation>
     </message>
     <message>
-        <source>Log files directory</source>
-        <translation type="vanished">Журналы</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation>Вступление</translation>
     </message>
     <message>
-        <source>Build version</source>
-        <translation type="vanished">Версия сборки</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation>Активен</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation>Отключен</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation>Включить</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation>Не установлен</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation>Установить</translation>
     </message>
@@ -728,10 +719,6 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
         <source>Install mod that provides various interface improvements, such as better interface for random maps and selectable actions in battles</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
-        <translation type="vanished">Установить поддержку запуска Героев III в разрешениях, отличных от 800x600</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="788"/>
         <source>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported by the VCMI team</source>
@@ -819,10 +806,6 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
         <source>Heroes III Translation</source>
         <translation>Перевод Героев III</translation>
     </message>
-    <message>
-        <source>High Definition Support</source>
-        <translation type="vanished">Поддержка высоких разрешений</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="724"/>
         <source>In The Wake of Gods</source>
@@ -921,21 +904,26 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
+        <source>Vietnamese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="40"/>
         <source>Other (East European)</source>
         <translation>Другой (восточноевропейский)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="40"/>
+        <location filename="../languages.cpp" line="41"/>
         <source>Other (Cyrillic Script)</source>
         <translation>Другой (кириллический)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="41"/>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation>Другой (западноевропейский)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation>Авто (%1)</translation>
     </message>

+ 69 - 81
launcher/translation/spanish.ts

@@ -406,166 +406,165 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <source>Open</source>
-        <translation type="vanished">Abrir</translation>
-    </message>
-    <message>
-        <source>User data directory</source>
-        <translation type="vanished">Directorio de datos del usuario</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation>Desactivado</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation>Inteligencia Artificial</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation>Repositorios de Mods</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
-        <source>Refresh now</source>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
-        <source>Default repository</source>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
+        <source>Refresh now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Update now</source>
-        <translation type="vanished">Actualizar ahora</translation>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
+        <source>Default repository</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation>Encendido</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation>Cursor</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translation>Traducción de Heroes III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation>Pantalla completa</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation>General</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation>Idioma de VCMI</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation>Resolución</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation>Autoguardado</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation>Mostrar índice</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation>Puerto de red</translation>
     </message>
     <message>
-        <source>Data Directories</source>
-        <translation type="vanished">Directorios de datos</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation>Vídeo</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -576,60 +575,52 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation>Hardware</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation>Software</translation>
     </message>
     <message>
-        <source>Log files directory</source>
-        <translation type="vanished">Directorio de archivos de registro</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation>Mostrar introducción</translation>
     </message>
     <message>
-        <source>Build version</source>
-        <translation type="vanished">Versión</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation>Comprovar al inicio</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation>Idioma de los datos de Heroes III.</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation>Activado</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation>Desactivado</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation>Activar</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation>No Instalado</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation>Instalar</translation>
     </message>
@@ -790,10 +781,6 @@ Ten en cuenta que para usar VCMI debes ser dueño de los archivos de datos origi
         <source>Heroes III Translation</source>
         <translation>Traducción de Heroes III.</translation>
     </message>
-    <message>
-        <source>High Definition Support</source>
-        <translation type="vanished">Soporte para resoluciones en Alta Definición</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="724"/>
         <source>In The Wake of Gods</source>
@@ -809,10 +796,6 @@ Ten en cuenta que para usar VCMI debes ser dueño de los archivos de datos origi
         <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</source>
         <translation>Opcionalmente, puedes instalar mods adicionales ya sea ahora o en cualquier momento posterior, utilizando el lanzador de VCMI.</translation>
     </message>
-    <message>
-        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
-        <translation type="vanished">Instalar soporte para jugar Heroes III en resoluciones superiores a 800x600</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="788"/>
         <source>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported by the VCMI team</source>
@@ -921,21 +904,26 @@ Ten en cuenta que para usar VCMI debes ser dueño de los archivos de datos origi
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
+        <source>Vietnamese</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="40"/>
         <source>Other (East European)</source>
         <translation>Otro (Europa del Este)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="40"/>
+        <location filename="../languages.cpp" line="41"/>
         <source>Other (Cyrillic Script)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="41"/>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation>Automático (%1)</translation>
     </message>

+ 69 - 85
launcher/translation/ukrainian.ts

@@ -406,124 +406,123 @@
 <context>
     <name>CSettingsView</name>
     <message>
-        <source>Open</source>
-        <translation type="vanished">Відкрити</translation>
-    </message>
-    <message>
-        <source>User data directory</source>
-        <translation type="vanished">Тека даних користувача</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="190"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="245"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="262"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="244"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="599"/>
         <source>Off</source>
         <translation>Вимкнено</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="563"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="78"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="123"/>
         <source>Artificial Intelligence</source>
         <translation>Штучний інтелект</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="179"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="83"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="233"/>
         <source>Mod Repositories</source>
         <translation>Репозиторії модифікацій</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="448"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="305"/>
         <source>Interface Scaling</source>
         <translation>Масштабування інтерфейсу</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="398"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="278"/>
         <source>Neutral AI in battles</source>
         <translation>Нейтральний ШІ в боях</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="203"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="465"/>
         <source>Enemy AI in battles</source>
         <translation>Ворожий ШІ в боях</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="509"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
         <source>Additional repository</source>
         <translation>Додатковий репозиторій</translation>
     </message>
     <message>
-        <source>Game data directory</source>
-        <translation type="vanished">Тека даних гри</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="482"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="201"/>
         <source>Adventure Map Allies</source>
         <translation>Союзники на мапі пригод</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
         <source>Adventure Map Enemies</source>
         <translation>Вороги на мапі пригод</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="316"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="176"/>
         <source>Windowed</source>
         <translation>У вікні</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="181"/>
         <source>Borderless fullscreen</source>
         <translation>Повноекранне вікно</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="326"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="186"/>
         <source>Exclusive fullscreen</source>
         <translation>Повноекранний (ексклюзивно)</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="530"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="319"/>
+        <source>Autosave limit (0 = off)</source>
+        <translation>Кількість автозбережень</translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="329"/>
         <source>Friendly AI in battles</source>
         <translation>Дружній ШІ в боях</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="590"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="588"/>
         <source>Framerate Limit</source>
         <translation>Обмеження частоти кадрів</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="523"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="612"/>
+        <source>Autosave prefix</source>
+        <translation>Префікс назв автозбережень</translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="629"/>
+        <source>empty = map name prefix</source>
+        <translation>(використовувати назву карти)</translation>
+    </message>
+    <message>
+        <location filename="../settingsView/csettingsview_moc.ui" line="508"/>
         <source>Refresh now</source>
         <translation>Оновити зараз</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="234"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="264"/>
         <source>Default repository</source>
         <translation>Стандартний репозиторій</translation>
     </message>
     <message>
-        <source>Update now</source>
-        <translation type="vanished">Оновити зараз</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="195"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="250"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="267"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="249"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="419"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="604"/>
         <source>On</source>
         <translation>Увімкнено</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="455"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="451"/>
         <source>Cursor</source>
         <translation>Курсор</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="475"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="312"/>
         <source>Heroes III Data Language</source>
         <translation>Мова Heroes III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="303"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="163"/>
         <source>Select display mode for game
 
 Windowed - game will run inside a window that covers part of your screen
@@ -540,106 +539,94 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
 Повноекранний ексклюзивний режим - гра займатиме весь екран і використовуватиме вибрану роздільну здатність.</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="290"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="431"/>
         <source>Hardware</source>
         <translation>Апаратний</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="295"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="436"/>
         <source>Software</source>
         <translation>Програмний</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="227"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="535"/>
         <source>Heroes III Translation</source>
         <translation>Переклад Heroes III</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="516"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="472"/>
         <source>Check on startup</source>
         <translation>Перевіряти на старті</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="537"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="444"/>
         <source>Fullscreen</source>
         <translation>Повноекранний режим</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="414"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="68"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="484"/>
         <source>General</source>
         <translation>Загальні налаштування</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="344"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
         <source>VCMI Language</source>
         <translation>Мова VCMI</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="194"/>
         <source>Resolution</source>
         <translation>Роздільна здатність</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="550"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="549"/>
         <source>Autosave</source>
         <translation>Автозбереження</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="282"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="376"/>
         <source>Display index</source>
         <translation>Дісплей</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="166"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="528"/>
         <source>Network port</source>
         <translation>Мережевий порт</translation>
     </message>
     <message>
-        <source>Data Directories</source>
-        <translation type="vanished">Теки даних гри</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
-        <location filename="../settingsView/csettingsview_moc.ui" line="125"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="73"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="561"/>
         <source>Video</source>
         <translation>Графіка</translation>
     </message>
     <message>
-        <source>Log files directory</source>
-        <translation type="vanished">Тека файлів журналу</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.ui" line="364"/>
+        <location filename="../settingsView/csettingsview_moc.ui" line="403"/>
         <source>Show intro</source>
         <translation>Вступні відео</translation>
     </message>
     <message>
-        <source>Build version</source>
-        <translation type="vanished">Версія збірки</translation>
-    </message>
-    <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="401"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
         <source>Active</source>
         <translation>Активні</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="406"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
         <source>Disabled</source>
         <translation>Деактивований</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
         <source>Enable</source>
         <translation>Активувати</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
         <source>Not Installed</source>
         <translation>Не встановлено</translation>
     </message>
     <message>
-        <location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
+        <location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
         <source>Install</source>
         <translation>Встановити</translation>
     </message>
@@ -738,10 +725,6 @@ Heroes® of Might and Magic® III HD наразі не підтримуєтьс
         <source>Install mod that provides various interface improvements, such as better interface for random maps and selectable actions in battles</source>
         <translation>Встановити різноманітні покращення інтерфейсу, такі як покращений інтерфейс випадкових карт та вибір варіантів дій у боях</translation>
     </message>
-    <message>
-        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
-        <translation type="vanished">Встановити підтримку для гри в Heroes III у роздільних здатностях, більших за 800x600</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="788"/>
         <source>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported by the VCMI team</source>
@@ -829,10 +812,6 @@ Heroes® of Might and Magic® III HD наразі не підтримуєтьс
         <source>Heroes III Translation</source>
         <translation>Переклад Heroes III</translation>
     </message>
-    <message>
-        <source>High Definition Support</source>
-        <translation type="vanished">Підтримка високих роздільних здатностей</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="724"/>
         <source>In The Wake of Gods</source>
@@ -931,21 +910,26 @@ Heroes® of Might and Magic® III HD наразі не підтримуєтьс
     </message>
     <message>
         <location filename="../languages.cpp" line="39"/>
+        <source>Vietnamese</source>
+        <translation>В&apos;єтнамська</translation>
+    </message>
+    <message>
+        <location filename="../languages.cpp" line="40"/>
         <source>Other (East European)</source>
         <translation>Інша (східноєвропейська)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="40"/>
+        <location filename="../languages.cpp" line="41"/>
         <source>Other (Cyrillic Script)</source>
         <translation>Інша (кирилиця)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="41"/>
+        <location filename="../languages.cpp" line="42"/>
         <source>Other (West European)</source>
         <translation>Інша (західноєвропейська)</translation>
     </message>
     <message>
-        <location filename="../languages.cpp" line="63"/>
+        <location filename="../languages.cpp" line="64"/>
         <source>Auto (%1)</source>
         <translation>Авто (%1)</translation>
     </message>

+ 2 - 1
lib/CTownHandler.cpp

@@ -595,7 +595,8 @@ void CTownHandler::loadBuilding(CTown * town, const std::string & stringID, cons
 
 	if(ret->bid == BuildingID::NONE && !source["id"].isNull())
 	{
-		logMod->warn("Building %s: id field is deprecated", stringID);
+		// FIXME: A lot of false-positives with no clear way to handle them in mods
+		//logMod->warn("Building %s: id field is deprecated", stringID);
 		ret->bid = source["id"].isNull() ? BuildingID(BuildingID::NONE) : BuildingID(source["id"].Float());
 	}
 

+ 0 - 30
lib/GameConstants.cpp

@@ -305,44 +305,14 @@ bool operator<(const BattleField & l, const BattleField & r)
 	return l.num < r.num;
 }
 
-BattleField::operator std::string() const
-{
-	return getInfo()->identifier;
-}
-
 const BattleFieldInfo * BattleField::getInfo() const
 {
 	return VLC->battlefields()->getById(*this);
 }
 
-BattleField BattleField::fromString(const std::string & identifier)
-{
-	auto rawId = VLC->modh->identifiers.getIdentifier(CModHandler::scopeBuiltin(), "battlefield", identifier);
-
-	if(rawId)
-		return BattleField(rawId.value());
-	else
-		return BattleField::NONE;
-}
-		
 const ObstacleInfo * Obstacle::getInfo() const
 {
 	return VLC->obstacles()->getById(*this);
 }
 
-Obstacle::operator std::string() const
-{
-	return getInfo()->identifier;
-}
-
-Obstacle Obstacle::fromString(const std::string & identifier)
-{
-	auto rawId = VLC->modh->identifiers.getIdentifier(CModHandler::scopeBuiltin(), "obstacle", identifier);
-
-	if(rawId)
-		return Obstacle(rawId.value());
-	else
-		return Obstacle(-1);
-}
-
 VCMI_LIB_NAMESPACE_END

+ 0 - 5
lib/GameConstants.h

@@ -1292,10 +1292,7 @@ class BattleField : public BaseForID<BattleField, si32>
 	DLL_LINKAGE friend bool operator!=(const BattleField & l, const BattleField & r);
 	DLL_LINKAGE friend bool operator<(const BattleField & l, const BattleField & r);
 
-	DLL_LINKAGE operator std::string() const;
 	DLL_LINKAGE const BattleFieldInfo * getInfo() const;
-
-	DLL_LINKAGE static BattleField fromString(const std::string & identifier);
 };
 
 enum class EBoatId : int32_t
@@ -1336,8 +1333,6 @@ class Obstacle : public BaseForID<Obstacle, si32>
 	INSTID_LIKE_CLASS_COMMON(Obstacle, si32)
 
 	DLL_LINKAGE const ObstacleInfo * getInfo() const;
-	DLL_LINKAGE operator std::string() const;
-	DLL_LINKAGE static Obstacle fromString(const std::string & identifier);
 };
 
 enum class ESpellSchool: int8_t

+ 3 - 1
lib/Languages.h

@@ -30,6 +30,7 @@ enum class ELanguages
 	SWEDISH,
 	TURKISH,
 	UKRAINIAN,
+	VIETNAMESE,
 
 	// Pseudo-languages, that have no translations but can define H3 encoding to use
 	OTHER_CP1250,
@@ -62,7 +63,7 @@ struct Options
 
 inline const auto & getLanguageList()
 {
-	static const std::array<Options, 19> languages
+	static const std::array<Options, 20> languages
 	{ {
 		{ "czech",      "Czech",      "Čeština",    "CP1250", "cs", true },
 		{ "chinese",    "Chinese",    "简体中文",       "GBK",    "zh", true }, // Note: actually Simplified Chinese
@@ -80,6 +81,7 @@ inline const auto & getLanguageList()
 		{ "swedish",    "Swedish",    "Svenska",    "CP1252", "sv", true },
 		{ "turkish",    "Turkish",    "Türkçe",     "CP1254", "tr", true },
 		{ "ukrainian",  "Ukrainian",  "Українська", "CP1251", "uk", true },
+		{ "vietnamese",  "Vietnamese",  "Tiếng Việt", "UTF-8", "vi", true }, // Fan translation uses special encoding
 
 		{ "other_cp1250", "Other (East European)",   "", "CP1250", "", false },
 		{ "other_cp1251", "Other (Cyrillic Script)", "", "CP1251", "", false },

+ 15 - 26
lib/NetPacksLib.cpp

@@ -1390,18 +1390,7 @@ void HeroRecruited::applyGs(CGameState * gs) const
 
 	h->setOwner(player);
 	h->pos = tile;
-	bool fresh = !h->isInitialized();
-	if(fresh)
-	{ // this is a fresh hero who hasn't appeared yet
-		if (boatId >= 0) //Hero spawns on water
-		{
-			h->setMovementPoints(h->movementPointsLimit(false));
-		}
-		else
-		{
-			h->setMovementPoints(h->movementPointsLimit(true));
-		}
-	}
+	h->initObj(gs->getRandomGenerator());
 
 	if(h->id == ObjectInstanceID())
 	{
@@ -1414,16 +1403,10 @@ void HeroRecruited::applyGs(CGameState * gs) const
 	gs->map->heroesOnMap.emplace_back(h);
 	p->heroes.emplace_back(h);
 	h->attachTo(*p);
-	if(fresh)
-	{
-		h->initObj(gs->getRandomGenerator());
-	}
 	gs->map->addBlockVisTiles(h);
 
 	if(t)
-	{
 		t->setVisitingHero(h);
-	}
 }
 
 void GiveHero::applyGs(CGameState * gs) const
@@ -2208,19 +2191,25 @@ void BattleResultAccepted::applyGs(CGameState * gs) const
 			res.hero->removeBonusesRecursive(Bonus::OneBattle);
 	}
 
-	// Grow up growing artifacts
-	if(const auto hero = heroResult[winnerSide].hero)
+	if(winnerSide != 2)
 	{
-		if(hero->commander && hero->commander->alive)
+		// Grow up growing artifacts
+		const auto hero = heroResult[winnerSide].hero;
+
+		if (hero)
 		{
-			for(auto & art : hero->commander->artifactsWorn)
+			if(hero->commander && hero->commander->alive)
+			{
+				for(auto & art : hero->commander->artifactsWorn)
+					art.second.artifact->growingUp();
+			}
+			for(auto & art : hero->artifactsWorn)
+			{
 				art.second.artifact->growingUp();
-		}
-		for(auto & art : hero->artifactsWorn)
-		{
-			art.second.artifact->growingUp();
+			}
 		}
 	}
+
 	if(VLC->settings()->getBoolean(EGameSettings::MODULE_STACK_EXPERIENCE))
 	{
 		if(heroResult[0].army)

+ 4 - 11
lib/VCMI_Lib.cpp

@@ -48,17 +48,10 @@ DLL_LINKAGE void preinitDLL(CConsoleHandler * Console, bool onlyEssential, bool
 {
 	console = Console;
 	VLC = new LibClasses();
-	try
-	{
-		VLC->loadFilesystem(extractArchives);
-		settings.init();
-		VLC->loadModFilesystem(onlyEssential);
-	}
-	catch(...)
-	{
-		handleException();
-		throw;
-	}
+	VLC->loadFilesystem(extractArchives);
+	settings.init();
+	VLC->loadModFilesystem(onlyEssential);
+
 }
 
 DLL_LINKAGE void loadDLLClasses(bool onlyEssential)

+ 12 - 1
lib/battle/SideInBattle.cpp

@@ -17,7 +17,18 @@ void SideInBattle::init(const CGHeroInstance * Hero, const CArmedInstance * Army
 {
 	hero = Hero;
 	armyObject = Army;
-	color = armyObject->getOwner();
+
+	switch(armyObject->ID)
+	{
+		case Obj::CREATURE_GENERATOR1:
+		case Obj::CREATURE_GENERATOR2:
+		case Obj::CREATURE_GENERATOR3:
+		case Obj::CREATURE_GENERATOR4:
+			color = PlayerColor::NEUTRAL;
+			break;
+		default:
+			color = armyObject->getOwner();
+	}
 
 	if(color == PlayerColor::UNFLAGGABLE)
 		color = PlayerColor::NEUTRAL;

+ 2 - 4
lib/gameState/CGameState.cpp

@@ -394,8 +394,8 @@ CGameState::CGameState()
 
 CGameState::~CGameState()
 {
-	map.dellNull();
 	curB.dellNull();
+	map.dellNull();
 }
 
 void CGameState::preInit(Services * services)
@@ -569,7 +569,6 @@ void CGameState::initNewGame(const IMapService * mapService, bool allowSavingRan
 			catch(...)
 			{
 				logGlobal->error("Saving random map failed with exception");
-				handleException();
 			}
 		}
 
@@ -1245,12 +1244,11 @@ BattleField CGameState::battleGetBattlefieldType(int3 tile, CRandomGenerator & r
 	}
 
 	if(map->isCoastalTile(tile)) //coastal tile is always ground
-		return BattleField::fromString("sand_shore");
+		return BattleField(*VLC->modh->identifiers.getIdentifier("core", "battlefield.sand_shore"));
 	
 	return BattleField(*RandomGeneratorUtil::nextItem(t.terType->battleFields, rand));
 }
 
-
 void CGameState::fillUpgradeInfo(const CArmedInstance *obj, SlotID stackPos, UpgradeInfo &out) const
 {
 	assert(obj);

+ 6 - 0
lib/gameState/TavernHeroesPool.cpp

@@ -109,12 +109,18 @@ CGHeroInstance * TavernHeroesPool::takeHeroFromPool(HeroTypeID hero)
 
 void TavernHeroesPool::onNewDay()
 {
+	auto unusedHeroes = unusedHeroesFromPool();
+
 	for(auto & hero : heroesPool)
 	{
 		assert(hero.second);
 		if(!hero.second)
 			continue;
 
+		// do not access heroes who are not present in tavern of any players
+		if (vstd::contains(unusedHeroes, hero.first))
+			continue;
+
 		hero.second->setMovementPoints(hero.second->movementPointsLimit(true));
 		hero.second->mana = hero.second->manaLimit();
 	}

+ 1 - 1
lib/logging/CLogger.h

@@ -220,7 +220,7 @@ public:
 	void write(const LogRecord & record) override;
 
 private:
-	FileStream file;
+	boost::filesystem::fstream file;
 	CLogFormatter formatter;
 	mutable std::mutex mx;
 };

+ 13 - 14
lib/mapObjectConstructors/AObjectTypeHandler.cpp

@@ -13,6 +13,7 @@
 
 #include "IObjectInfo.h"
 #include "../CGeneralTextHandler.h"
+#include "../CModHandler.h"
 #include "../VCMI_Lib.h"
 #include "../mapObjects/CGObjectInstance.h"
 #include "../mapObjects/ObjectTemplate.h"
@@ -77,15 +78,8 @@ void AObjectTypeHandler::init(const JsonNode & input)
 		tmpl->id = Obj(type);
 		tmpl->subid = subtype;
 		tmpl->stringID = entry.first; // FIXME: create "fullID" - type.object.template?
-		try
-		{
-			tmpl->readJson(entry.second);
-			templates.push_back(std::shared_ptr<const ObjectTemplate>(tmpl));
-		}
-		catch (const std::exception & e)
-		{
-			logGlobal->warn("Failed to load terrains for object %s: %s", entry.first, e.what());
-		}
+		tmpl->readJson(entry.second);
+		templates.push_back(std::shared_ptr<const ObjectTemplate>(tmpl));
 	}
 
 	for(const JsonNode & node : input["sounds"]["ambient"].Vector())
@@ -102,10 +96,15 @@ void AObjectTypeHandler::init(const JsonNode & input)
 	else
 		aiValue = static_cast<std::optional<si32>>(input["aiValue"].Integer());
 
-	if(input["battleground"].getType() == JsonNode::JsonType::DATA_STRING)
-		battlefield = input["battleground"].String();
-	else
-		battlefield = std::nullopt;
+	battlefield = BattleField::NONE;
+
+	if(!input["battleground"].isNull())
+	{
+		VLC->modh->identifiers.requestIdentifier("battlefield", input["battleground"], [this](int32_t identifier)
+		{
+			battlefield = BattleField(identifier);
+		});
+	}
 
 	initTypeData(input);
 }
@@ -182,7 +181,7 @@ std::vector<std::shared_ptr<const ObjectTemplate>> AObjectTypeHandler::getTempla
 
 BattleField AObjectTypeHandler::getBattlefield() const
 {
-	return battlefield ? BattleField::fromString(battlefield.value()) : BattleField::NONE;
+	return battlefield;
 }
 
 std::vector<std::shared_ptr<const ObjectTemplate>>AObjectTypeHandler::getTemplates(TerrainId terrainType) const

+ 1 - 1
lib/mapObjectConstructors/AObjectTypeHandler.h

@@ -34,7 +34,7 @@ class DLL_LINKAGE AObjectTypeHandler : public boost::noncopyable
 	SObjectSounds sounds;
 
 	std::optional<si32> aiValue;
-	std::optional<std::string> battlefield;
+	BattleField battlefield;
 
 	std::string modScope;
 	std::string typeName;

+ 14 - 17
lib/mapObjects/CGHeroInstance.cpp

@@ -255,6 +255,7 @@ CGHeroInstance::CGHeroInstance():
 	setNodeType(HERO);
 	ID = Obj::HERO;
 	secSkills.emplace_back(SecondarySkill::DEFAULT, -1);
+	blockVisit = true;
 }
 
 PlayerColor CGHeroInstance::getOwner() const
@@ -364,8 +365,19 @@ void CGHeroInstance::initHero(CRandomGenerator & rand)
 		commander->giveStackExp (exp); //after our exp is set
 	}
 
-	if (mana < 0)
-		mana = manaLimit();
+	skillsInfo.rand.setSeed(rand.nextInt());
+	skillsInfo.resetMagicSchoolCounter();
+	skillsInfo.resetWisdomCounter();
+
+	//copy active (probably growing) bonuses from hero prototype to hero object
+	for(const std::shared_ptr<Bonus> & b : type->specialty)
+		addNewBonus(b);
+
+	//initialize bonuses
+	recreateSecondarySkillsBonuses();
+
+	movement = movementPointsLimit(true);
+	mana = manaLimit(); //after all bonuses are taken into account, make sure this line is the last one
 }
 
 void CGHeroInstance::initArmy(CRandomGenerator & rand, IArmyDescriptor * dst)
@@ -533,15 +545,9 @@ void CGHeroInstance::SecondarySkillsInfo::resetWisdomCounter()
 
 void CGHeroInstance::initObj(CRandomGenerator & rand)
 {
-	blockVisit = true;
-
 	if(!type)
 		initHero(rand); //TODO: set up everything for prison before specialties are configured
 
-	skillsInfo.rand.setSeed(rand.nextInt());
-	skillsInfo.resetMagicSchoolCounter();
-	skillsInfo.resetWisdomCounter();
-
 	if (ID != Obj::PRISON)
 	{
 		auto terrain = cb->gameState()->getTile(visitablePos())->terType->getId();
@@ -549,15 +555,6 @@ void CGHeroInstance::initObj(CRandomGenerator & rand)
 		if (customApp)
 			appearance = customApp;
 	}
-
-	//copy active (probably growing) bonuses from hero prototype to hero object
-	for(const std::shared_ptr<Bonus> & b : type->specialty)
-		addNewBonus(b);
-
-	//initialize bonuses
-	recreateSecondarySkillsBonuses();
-
-	mana = manaLimit(); //after all bonuses are taken into account, make sure this line is the last one
 }
 
 void CGHeroInstance::recreateSecondarySkillsBonuses()

+ 4 - 0
lib/mapObjects/IObjectInterface.cpp

@@ -107,6 +107,10 @@ int3 IBoatGenerator::bestLocation() const
 IBoatGenerator::EGeneratorState IBoatGenerator::shipyardStatus() const
 {
 	int3 tile = bestLocation();
+
+	if(!tile.valid())
+		return TILE_BLOCKED; //no available water
+
 	const TerrainTile *t = IObjectInterface::cb->getTile(tile);
 	if(!t)
 		return TILE_BLOCKED; //no available water

+ 2 - 2
lib/rmg/CMapGenerator.cpp

@@ -161,9 +161,9 @@ std::string CMapGenerator::getMapDescription() const
 		throw rmgException("Map template for Random Map Generator is not found. Could not start the game.");
 
     std::stringstream ss;
-    ss << boost::str(boost::format(std::string("Map created by the Random Map Generator.\nTemplate was %s, Random seed was %d, size %dx%d") +
+    ss << boost::str(boost::format(std::string("Map created by the Random Map Generator.\nTemplate was %s, size %dx%d") +
         ", levels %d, players %d, computers %d, water %s, monster %s, VCMI map") % mapTemplate->getName() %
-		randomSeed % map->width() % map->height() % static_cast<int>(map->levels()) % static_cast<int>(mapGenOptions.getPlayerCount()) %
+		map->width() % map->height() % static_cast<int>(map->levels()) % static_cast<int>(mapGenOptions.getPlayerCount()) %
 		static_cast<int>(mapGenOptions.getCompOnlyPlayerCount()) % waterContentStr[mapGenOptions.getWaterContent()] %
 		monsterStrengthStr[monsterStrengthIndex]);
 

+ 1 - 0
lib/rmg/modificators/ObjectManager.cpp

@@ -464,6 +464,7 @@ void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateD
 		objects.push_back(&instance->object());
 		if(auto * m = zone.getModificator<RoadPlacer>())
 		{
+			//FIXME: Objects that can be removed, can be trespassed. Does not include Corpse
 			if(instance->object().appearance->isVisitableFromTop())
 				m->areaForRoads().add(instance->getVisitablePosition());
 			else

+ 54 - 12
lib/rmg/modificators/RoadPlacer.cpp

@@ -31,7 +31,7 @@ void RoadPlacer::process()
 
 void RoadPlacer::init()
 {
-	if (zone.isUnderground())
+	if(zone.isUnderground())
 	{
 		DEPENDENCY_ALL(RockFiller);
 	}
@@ -54,22 +54,52 @@ const rmg::Area & RoadPlacer::getRoads() const
 
 bool RoadPlacer::createRoad(const int3 & dst)
 {
-	auto searchArea = zone.areaPossible() + areaRoads + zone.freePaths() - isolated + roads;
-	
+	auto searchArea = zone.areaPossible() + zone.freePaths() + areaRoads + roads;
+
 	rmg::Path path(searchArea);
 	path.connect(roads);
+
+	auto simpleRoutig = [this](const int3& src, const int3& dst)
+	{
+		if(areaIsolated().contains(dst))
+		{
+			return 1000.0f; //Do not route road behind objects that are not visitable from top
+		}
+		else
+		{
+			return 1.0f;
+		}
+	};
 	
-	auto res = path.search(dst, true);
+	auto res = path.search(dst, true, simpleRoutig);
 	if(!res.valid())
 	{
-		res = path.search(dst, false, [](const int3 & src, const int3 & dst)
+		auto desperateRoutig = [this](const int3& src, const int3& dst) -> float
 		{
+			//Do not allow connections straight up through object not visitable from top
+			if(std::abs((src - dst).y) == 1)
+			{
+				if(areaIsolated().contains(dst) || areaIsolated().contains(src))
+				{
+					return 1e30;
+				}
+			}
+			else
+			{
+				if(areaIsolated().contains(dst))
+				{
+					return 1e6;
+				}
+			}
+
 			float weight = dst.dist2dSQ(src);
 			return weight * weight;
-		});
+		};
+		res = path.search(dst, false, desperateRoutig);
+
 		if(!res.valid())
 		{
-			logGlobal->warn("Failed to create road");
+			logGlobal->warn("Failed to create road to node %s", dst.toString());
 			return false;
 		}
 	}
@@ -88,7 +118,7 @@ void RoadPlacer::drawRoads(bool secondary)
 		zone.freePaths().unite(roads);
 	}
 
-	if (!generator.getMapGenOptions().isRoadEnabled())
+	if(!generator.getMapGenOptions().isRoadEnabled())
 	{
 		return;
 	}
@@ -108,7 +138,7 @@ void RoadPlacer::drawRoads(bool secondary)
 	//If our road type is not enabled, choose highest below it
 	for (int8_t bestRoad = roadType.getNum(); bestRoad > RoadId(Road::NO_ROAD).getNum(); bestRoad--)
 	{
-		if (generator.getMapGenOptions().isRoadEnabled(RoadId(bestRoad)))
+		if(generator.getMapGenOptions().isRoadEnabled(RoadId(bestRoad)))
 		{
 			mapProxy->drawRoads(zone.getRand(), tiles, RoadId(bestRoad));
 			return;
@@ -126,11 +156,11 @@ void RoadPlacer::connectRoads()
 {
 	bool noRoadNodes = false;
 	//Assumes objects are already placed
-	if (roadNodes.size() < 2)
+	if(roadNodes.size() < 2)
 	{
 		//If there are no nodes, draw roads to mines
 		noRoadNodes = true;
-		if (auto* m = zone.getModificator<ObjectManager>())
+		if(auto* m = zone.getModificator<ObjectManager>())
 		{
 			for(auto * object : m->getMines())
 			{
@@ -149,7 +179,19 @@ void RoadPlacer::connectRoads()
 
 	for(const auto & node : roadNodes)
 	{
-		createRoad(node);
+		try
+		{
+			createRoad(node);
+		}
+		catch (const rmgException& e)
+		{
+			logGlobal->warn("Handled exception while drawing road to node %s: %s", node.toString(), e.what());
+		}
+		catch (const std::exception & e)
+		{
+			logGlobal->error("Unhandled exception while drawing road to node %s: %s", node.toString(), e.what());
+			throw e;
+		}
 	}
 	
 	//Draw dirt roads if there are only mines

+ 1 - 0
lib/rmg/modificators/TreasurePlacer.cpp

@@ -484,6 +484,7 @@ void TreasurePlacer::addAllPossibleObjects()
 			}
 
 			oi.probability = 10;
+			oi.maxPerZone = 1;
 			
 			oi.generateObject = [i, randomAppearance, this, qap]() -> CGObjectInstance *
 			{

+ 6 - 6
mapeditor/mainwindow.cpp

@@ -249,7 +249,7 @@ bool MainWindow::getAnswerAboutUnsavedChanges()
 {
 	if(unsaved)
 	{
-		auto sure = QMessageBox::question(this, "Confirmation", "Unsaved changes will be lost, are you sure?");
+		auto sure = QMessageBox::question(this, tr("Confirmation"), tr("Unsaved changes will be lost, are you sure?"));
 		if(sure == QMessageBox::No)
 		{
 			return false;
@@ -326,7 +326,7 @@ bool MainWindow::openMap(const QString & filenameSelect)
 	
 	if(!CResourceHandler::get("mapEditor")->existsResource(resId))
 	{
-		QMessageBox::warning(this, "Failed to open map", "Cannot open map from this folder");
+		QMessageBox::warning(this, tr("Failed to open map"), tr("Cannot open map from this folder"));
 		return false;
 	}
 	
@@ -1125,11 +1125,11 @@ void MainWindow::on_actionUpdate_appearance_triggered()
 	
 	if(controller.scene(mapLevel)->selectionObjectsView.getSelection().empty())
 	{
-		QMessageBox::information(this, "Update appearance", "No objects selected");
+		QMessageBox::information(this, tr("Update appearance"), tr("No objects selected"));
 		return;
 	}
 	
-	if(QMessageBox::Yes != QMessageBox::question(this, "Update appearance", "This operation is irreversible. Do you want to continue?"))
+	if(QMessageBox::Yes != QMessageBox::question(this, tr("Update appearance"), tr("This operation is irreversible. Do you want to continue?")))
 		return;
 	
 	controller.scene(mapLevel)->selectionTerrainView.clear();
@@ -1188,7 +1188,7 @@ void MainWindow::on_actionUpdate_appearance_triggered()
 	
 	
 	if(errors)
-		QMessageBox::warning(this, "Update appearance", QString("Errors occured. %1 objects were not updated").arg(errors));
+		QMessageBox::warning(this, tr("Update appearance"), QString(tr("Errors occured. %1 objects were not updated")).arg(errors));
 }
 
 
@@ -1228,7 +1228,7 @@ void MainWindow::on_actionPaste_triggered()
 
 void MainWindow::on_actionExport_triggered()
 {
-	QString fileName = QFileDialog::getSaveFileName(this, "Save to image", QCoreApplication::applicationDirPath(), "BMP (*.bmp);;JPEG (*.jpeg);;PNG (*.png)");
+	QString fileName = QFileDialog::getSaveFileName(this, tr("Save to image"), QCoreApplication::applicationDirPath(), "BMP (*.bmp);;JPEG (*.jpeg);;PNG (*.png)");
 	if(!fileName.isNull())
 	{
 		QImage image(ui->mapView->scene()->sceneRect().size().toSize(), QImage::Format_RGB888);

+ 1 - 1
mapeditor/mapview.cpp

@@ -468,7 +468,7 @@ void MapView::dropEvent(QDropEvent * event)
 		else
 		{
 			controller->discardObject(sc->level);
-			QMessageBox::information(this, "Can't place object", errorMsg);
+			QMessageBox::information(this, tr("Can't place object"), errorMsg);
 		}
 	}
 

+ 271 - 130
mapeditor/translation/english.ts

@@ -40,284 +40,327 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="68"/>
+        <location filename="../mainwindow.ui" line="69"/>
         <source>Map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="78"/>
+        <location filename="../mainwindow.ui" line="79"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="89"/>
+        <location filename="../mainwindow.ui" line="90"/>
         <source>View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="97"/>
+        <location filename="../mainwindow.ui" line="98"/>
         <source>Player</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="117"/>
+        <location filename="../mainwindow.ui" line="118"/>
         <source>Toolbar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="163"/>
+        <location filename="../mainwindow.ui" line="164"/>
         <source>Minimap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="239"/>
+        <location filename="../mainwindow.ui" line="240"/>
         <source>Map Objects View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="283"/>
+        <location filename="../mainwindow.ui" line="284"/>
         <source>Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="361"/>
+        <location filename="../mainwindow.ui" line="362"/>
         <source>Inspector</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="400"/>
+        <location filename="../mainwindow.ui" line="401"/>
         <source>Property</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="405"/>
+        <location filename="../mainwindow.ui" line="406"/>
         <source>Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="432"/>
+        <location filename="../mainwindow.ui" line="433"/>
         <source>Terrains View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="484"/>
+        <location filename="../mainwindow.ui" line="485"/>
         <source>Brush</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="763"/>
+        <location filename="../mainwindow.ui" line="764"/>
         <source>Terrains</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="806"/>
+        <location filename="../mainwindow.ui" line="807"/>
         <source>Roads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="842"/>
+        <location filename="../mainwindow.ui" line="843"/>
         <source>Rivers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="889"/>
+        <location filename="../mainwindow.ui" line="890"/>
         <source>Open</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="901"/>
+        <location filename="../mainwindow.ui" line="902"/>
         <source>Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="913"/>
+        <location filename="../mainwindow.ui" line="914"/>
         <source>New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="921"/>
+        <location filename="../mainwindow.ui" line="922"/>
         <source>Save as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="924"/>
+        <location filename="../mainwindow.ui" line="925"/>
         <source>Ctrl+Shift+S</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="933"/>
+        <location filename="../mainwindow.ui" line="934"/>
         <source>U/G</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="936"/>
-        <location filename="../mainwindow.cpp" line="746"/>
+        <location filename="../mainwindow.ui" line="937"/>
+        <location filename="../mainwindow.cpp" line="764"/>
         <source>View underground</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="951"/>
+        <location filename="../mainwindow.ui" line="952"/>
         <source>Pass</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="963"/>
+        <location filename="../mainwindow.ui" line="964"/>
         <source>Cut</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="975"/>
+        <location filename="../mainwindow.ui" line="976"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="987"/>
+        <location filename="../mainwindow.ui" line="988"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="999"/>
+        <location filename="../mainwindow.ui" line="1000"/>
         <source>Fill</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1002"/>
+        <location filename="../mainwindow.ui" line="1003"/>
         <source>Fills the selection with obstacles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1017"/>
+        <location filename="../mainwindow.ui" line="1018"/>
         <source>Grid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1028"/>
+        <location filename="../mainwindow.ui" line="1029"/>
         <source>General</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1031"/>
+        <location filename="../mainwindow.ui" line="1032"/>
         <source>Map title and description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1042"/>
+        <location filename="../mainwindow.ui" line="1043"/>
         <source>Players settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1057"/>
-        <location filename="../mainwindow.ui" line="1060"/>
+        <location filename="../mainwindow.ui" line="1058"/>
+        <location filename="../mainwindow.ui" line="1061"/>
         <source>Undo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1078"/>
+        <location filename="../mainwindow.ui" line="1079"/>
         <source>Redo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1096"/>
+        <location filename="../mainwindow.ui" line="1097"/>
         <source>Erase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1107"/>
+        <location filename="../mainwindow.ui" line="1108"/>
         <source>Neutral</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1115"/>
+        <location filename="../mainwindow.ui" line="1116"/>
         <source>Validate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1126"/>
+        <location filename="../mainwindow.ui" line="1127"/>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <location filename="../mainwindow.cpp" line="1191"/>
         <source>Update appearance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1137"/>
+        <location filename="../mainwindow.ui" line="1138"/>
         <source>Recreate obstacles</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1148"/>
+        <location filename="../mainwindow.ui" line="1149"/>
         <source>Player 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1159"/>
+        <location filename="../mainwindow.ui" line="1160"/>
         <source>Player 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1170"/>
+        <location filename="../mainwindow.ui" line="1171"/>
         <source>Player 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1181"/>
+        <location filename="../mainwindow.ui" line="1182"/>
         <source>Player 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1192"/>
+        <location filename="../mainwindow.ui" line="1193"/>
         <source>Player 5</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1203"/>
+        <location filename="../mainwindow.ui" line="1204"/>
         <source>Player 6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1214"/>
+        <location filename="../mainwindow.ui" line="1215"/>
         <source>Player 7</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1225"/>
+        <location filename="../mainwindow.ui" line="1226"/>
         <source>Player 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1233"/>
+        <location filename="../mainwindow.ui" line="1234"/>
         <source>Export as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="346"/>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Confirmation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Unsaved changes will be lost, are you sure?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Cannot open map from this folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="370"/>
         <source>Open map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="348"/>
+        <location filename="../mainwindow.cpp" line="372"/>
         <source>All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>Save map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>VCMI maps (*.vmap)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="582"/>
+        <location filename="../mainwindow.cpp" line="606"/>
         <source>Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="750"/>
+        <location filename="../mainwindow.cpp" line="768"/>
         <source>View surface</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <source>No objects selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <source>This operation is irreversible. Do you want to continue?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1191"/>
+        <source>Errors occured. %1 objects were not updated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1231"/>
+        <source>Save to image</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MapSettings</name>
@@ -327,162 +370,220 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="40"/>
+        <location filename="../mapsettings.ui" line="33"/>
         <source>General</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="46"/>
+        <location filename="../mapsettings.ui" line="39"/>
         <source>Map name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="56"/>
+        <location filename="../mapsettings.ui" line="49"/>
         <source>Map description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="66"/>
+        <location filename="../mapsettings.ui" line="83"/>
+        <source>Limit maximum heroes level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="92"/>
         <source>Difficulty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="111"/>
+        <location filename="../mapsettings.ui" line="137"/>
+        <source>Mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="143"/>
+        <source>Mandatory mods for playing this map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="157"/>
+        <source>Mod name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="162"/>
+        <source>Version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="172"/>
+        <source>Automatic assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="179"/>
+        <source>Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="182"/>
+        <source>Map objects mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="192"/>
+        <source>Set all mods having a game content as mandatory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="195"/>
+        <source>Full content mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="208"/>
         <source>Events</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="121"/>
+        <location filename="../mapsettings.ui" line="218"/>
         <source>Victory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="135"/>
+        <location filename="../mapsettings.ui" line="232"/>
         <source>Victory message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="150"/>
+        <location filename="../mapsettings.ui" line="247"/>
         <source>Only for human players</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="157"/>
+        <location filename="../mapsettings.ui" line="254"/>
         <source>Allow standard victory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="170"/>
-        <location filename="../mapsettings.ui" line="218"/>
+        <location filename="../mapsettings.ui" line="267"/>
+        <location filename="../mapsettings.ui" line="315"/>
         <source>Parameters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="186"/>
+        <location filename="../mapsettings.ui" line="283"/>
         <source>Loss</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="195"/>
+        <location filename="../mapsettings.ui" line="292"/>
         <source>7 days without town</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="202"/>
+        <location filename="../mapsettings.ui" line="299"/>
         <source>Defeat message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="235"/>
+        <location filename="../mapsettings.ui" line="332"/>
         <source>Abilities</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="261"/>
+        <location filename="../mapsettings.ui" line="358"/>
         <source>Spells</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="287"/>
+        <location filename="../mapsettings.ui" line="384"/>
         <source>Artifacts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="313"/>
+        <location filename="../mapsettings.ui" line="410"/>
         <source>Heroes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="29"/>
+        <location filename="../mapsettings.ui" line="439"/>
         <source>Ok</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="163"/>
+        <location filename="../mapsettings.cpp" line="174"/>
         <source>No special victory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="164"/>
+        <location filename="../mapsettings.cpp" line="175"/>
         <source>Capture artifact</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="165"/>
+        <location filename="../mapsettings.cpp" line="176"/>
         <source>Hire creatures</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="166"/>
+        <location filename="../mapsettings.cpp" line="177"/>
         <source>Accumulate resources</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="167"/>
+        <location filename="../mapsettings.cpp" line="178"/>
         <source>Construct building</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="168"/>
+        <location filename="../mapsettings.cpp" line="179"/>
         <source>Capture town</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="169"/>
+        <location filename="../mapsettings.cpp" line="180"/>
         <source>Defeat hero</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="170"/>
+        <location filename="../mapsettings.cpp" line="181"/>
         <source>Transport artifact</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="173"/>
+        <location filename="../mapsettings.cpp" line="184"/>
         <source>No special loss</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="174"/>
+        <location filename="../mapsettings.cpp" line="185"/>
         <source>Lose castle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="175"/>
+        <location filename="../mapsettings.cpp" line="186"/>
         <source>Lose hero</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="176"/>
+        <location filename="../mapsettings.cpp" line="187"/>
         <source>Time expired</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="177"/>
+        <location filename="../mapsettings.cpp" line="188"/>
         <source>Days without town</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>MapView</name>
+    <message>
+        <location filename="../mapview.cpp" line="471"/>
+        <source>Can&apos;t place object</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>MessageWidget</name>
     <message>
@@ -494,47 +595,47 @@
 <context>
     <name>PlayerParams</name>
     <message>
-        <location filename="../playerparams.ui" line="57"/>
-        <source>No team</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../playerparams.ui" line="65"/>
+        <location filename="../playerparams.ui" line="118"/>
         <source>Human/CPU</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="72"/>
+        <location filename="../playerparams.ui" line="105"/>
         <source>CPU only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="79"/>
+        <location filename="../playerparams.ui" line="92"/>
         <source>Team</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="86"/>
+        <location filename="../playerparams.ui" line="162"/>
         <source>Main town</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="93"/>
+        <location filename="../playerparams.ui" line="179"/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../playerparams.ui" line="85"/>
         <source>Random faction</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="100"/>
+        <location filename="../playerparams.ui" line="72"/>
         <source>Generate hero at main</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="108"/>
+        <location filename="../playerparams.ui" line="154"/>
         <source>(default)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="86"/>
+        <location filename="../playerparams.cpp" line="109"/>
         <source>Player ID: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -552,7 +653,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playersettings.ui" line="112"/>
+        <location filename="../playersettings.ui" line="74"/>
+        <source>1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../playersettings.ui" line="117"/>
         <source>Ok</source>
         <translation type="unfinished"></translation>
     </message>
@@ -608,6 +714,11 @@
         <source>Map is not loaded</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="70"/>
+        <source>No factions allowed for player %1</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="73"/>
         <source>No players allowed to play this map</source>
@@ -693,6 +804,11 @@
         <source>Map description is not specified</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="175"/>
+        <source>Map contains object from mod &quot;%1&quot;, but doesn&apos;t require it</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="181"/>
         <source>Exception occurs during validation: %1</source>
@@ -762,114 +878,139 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="736"/>
+        <location filename="../windownewmap.ui" line="724"/>
         <source>0</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="268"/>
+        <location filename="../windownewmap.ui" line="349"/>
         <source>Human/Computer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="288"/>
-        <location filename="../windownewmap.ui" line="357"/>
-        <location filename="../windownewmap.ui" line="455"/>
-        <location filename="../windownewmap.ui" line="596"/>
+        <location filename="../windownewmap.ui" line="221"/>
+        <location filename="../windownewmap.ui" line="289"/>
+        <location filename="../windownewmap.ui" line="443"/>
+        <location filename="../windownewmap.ui" line="584"/>
         <source>Random</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="336"/>
+        <location filename="../windownewmap.ui" line="269"/>
         <source>Computer only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="428"/>
+        <location filename="../windownewmap.ui" line="380"/>
+        <source>Human teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="399"/>
+        <source>Computer teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="416"/>
         <source>Monster strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="477"/>
+        <location filename="../windownewmap.ui" line="465"/>
         <source>Weak</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="496"/>
-        <location filename="../windownewmap.ui" line="637"/>
+        <location filename="../windownewmap.ui" line="484"/>
+        <location filename="../windownewmap.ui" line="625"/>
         <source>Normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="515"/>
+        <location filename="../windownewmap.ui" line="503"/>
         <source>Strong</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="569"/>
+        <location filename="../windownewmap.ui" line="557"/>
         <source>Water content</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="618"/>
+        <location filename="../windownewmap.ui" line="606"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="656"/>
+        <location filename="../windownewmap.ui" line="644"/>
         <source>Islands</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="701"/>
+        <location filename="../windownewmap.ui" line="689"/>
         <source>Template</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="749"/>
+        <location filename="../windownewmap.ui" line="737"/>
         <source>Custom seed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="763"/>
+        <location filename="../windownewmap.ui" line="751"/>
         <source>Generate random map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="797"/>
+        <location filename="../windownewmap.ui" line="785"/>
         <source>Ok</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="816"/>
+        <location filename="../windownewmap.ui" line="804"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template for parameters scecified. Random map cannot be generated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="291"/>
+        <source>RMG failure</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>
     <message>
-        <location filename="../mainwindow.cpp" line="98"/>
+        <location filename="../mainwindow.cpp" line="101"/>
         <source>Filepath of the map to open.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="101"/>
+        <location filename="../mainwindow.cpp" line="104"/>
         <source>Extract original H3 archives into a separate folder.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="102"/>
+        <location filename="../mainwindow.cpp" line="105"/>
         <source>From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG&apos;s.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="103"/>
+        <location filename="../mainwindow.cpp" line="106"/>
         <source>From an extracted archive, Converts single Images (found in Images folder) from .pcx to png.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="104"/>
+        <location filename="../mainwindow.cpp" line="107"/>
         <source>Delete original files, for the ones splitted / converted.</source>
         <translation type="unfinished"></translation>
     </message>

+ 264 - 131
mapeditor/translation/french.ts

@@ -27,8 +27,6 @@
         <translation>Générer une carte</translation>
     </message>
 </context>
-
-
 <context>
     <name>MainWindow</name>
     <message>
@@ -42,284 +40,327 @@
         <translation>Fichier</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="68"/>
+        <location filename="../mainwindow.ui" line="69"/>
         <source>Map</source>
         <translation>Carte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="78"/>
+        <location filename="../mainwindow.ui" line="79"/>
         <source>Edit</source>
         <translation>Édition</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="89"/>
+        <location filename="../mainwindow.ui" line="90"/>
         <source>View</source>
         <translation>Affichage</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="97"/>
+        <location filename="../mainwindow.ui" line="98"/>
         <source>Player</source>
         <translation>Joueur</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="117"/>
+        <location filename="../mainwindow.ui" line="118"/>
         <source>Toolbar</source>
         <translation>Barre d&apos;outils</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="163"/>
+        <location filename="../mainwindow.ui" line="164"/>
         <source>Minimap</source>
         <translation>Mini-carte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="239"/>
+        <location filename="../mainwindow.ui" line="240"/>
         <source>Map Objects View</source>
         <translation>Vue des objets cartographiques</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="283"/>
+        <location filename="../mainwindow.ui" line="284"/>
         <source>Browser</source>
         <translation>Navigateur</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="361"/>
+        <location filename="../mainwindow.ui" line="362"/>
         <source>Inspector</source>
         <translation>Inspecteur</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="400"/>
+        <location filename="../mainwindow.ui" line="401"/>
         <source>Property</source>
         <translation>Propriété</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="405"/>
+        <location filename="../mainwindow.ui" line="406"/>
         <source>Value</source>
         <translation>Valeur</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="432"/>
+        <location filename="../mainwindow.ui" line="433"/>
         <source>Terrains View</source>
         <translation>Vue des terrains</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="484"/>
+        <location filename="../mainwindow.ui" line="485"/>
         <source>Brush</source>
         <translation>Pinceau</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="763"/>
+        <location filename="../mainwindow.ui" line="764"/>
         <source>Terrains</source>
         <translation>Terrains</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="806"/>
+        <location filename="../mainwindow.ui" line="807"/>
         <source>Roads</source>
         <translation>Routes</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="842"/>
+        <location filename="../mainwindow.ui" line="843"/>
         <source>Rivers</source>
         <translation>Rivières</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="889"/>
+        <location filename="../mainwindow.ui" line="890"/>
         <source>Open</source>
         <translation>Ouvrir</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="901"/>
+        <location filename="../mainwindow.ui" line="902"/>
         <source>Save</source>
         <translation>Enregistrer</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="913"/>
+        <location filename="../mainwindow.ui" line="914"/>
         <source>New</source>
         <translation>Nouveau</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="921"/>
+        <location filename="../mainwindow.ui" line="922"/>
         <source>Save as...</source>
         <translation>Enregistrer sous...</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="924"/>
+        <location filename="../mainwindow.ui" line="925"/>
         <source>Ctrl+Shift+S</source>
         <translation>Ctrl+Maj+S</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="933"/>
+        <location filename="../mainwindow.ui" line="934"/>
         <source>U/G</source>
         <translation>Sous-sol/Surface</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="936"/>
-        <location filename="../mainwindow.cpp" line="746"/>
+        <location filename="../mainwindow.ui" line="937"/>
+        <location filename="../mainwindow.cpp" line="764"/>
         <source>View underground</source>
         <translation>Voir le sous-sol</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="951"/>
+        <location filename="../mainwindow.ui" line="952"/>
         <source>Pass</source>
         <translation>Passage</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="963"/>
+        <location filename="../mainwindow.ui" line="964"/>
         <source>Cut</source>
         <translation>Couper</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="975"/>
+        <location filename="../mainwindow.ui" line="976"/>
         <source>Copy</source>
         <translation>Copier</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="987"/>
+        <location filename="../mainwindow.ui" line="988"/>
         <source>Paste</source>
         <translation>Coller</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="999"/>
+        <location filename="../mainwindow.ui" line="1000"/>
         <source>Fill</source>
         <translation>Remplir</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1002"/>
+        <location filename="../mainwindow.ui" line="1003"/>
         <source>Fills the selection with obstacles</source>
         <translation>Remplir la sélection d&apos;obstacles</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1017"/>
+        <location filename="../mainwindow.ui" line="1018"/>
         <source>Grid</source>
         <translation>Grille</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1028"/>
+        <location filename="../mainwindow.ui" line="1029"/>
         <source>General</source>
         <translation>Général</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1031"/>
+        <location filename="../mainwindow.ui" line="1032"/>
         <source>Map title and description</source>
         <translation>Titre et description de la carte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1042"/>
+        <location filename="../mainwindow.ui" line="1043"/>
         <source>Players settings</source>
         <translation>Paramètres des joueurs</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1057"/>
-        <location filename="../mainwindow.ui" line="1060"/>
+        <location filename="../mainwindow.ui" line="1058"/>
+        <location filename="../mainwindow.ui" line="1061"/>
         <source>Undo</source>
         <translation>Annuler</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1078"/>
+        <location filename="../mainwindow.ui" line="1079"/>
         <source>Redo</source>
         <translation>Rétablir</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1096"/>
+        <location filename="../mainwindow.ui" line="1097"/>
         <source>Erase</source>
         <translation>Effacer</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1107"/>
+        <location filename="../mainwindow.ui" line="1108"/>
         <source>Neutral</source>
         <translation>Neutre</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1115"/>
+        <location filename="../mainwindow.ui" line="1116"/>
         <source>Validate</source>
         <translation>Valider</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1126"/>
+        <location filename="../mainwindow.ui" line="1127"/>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <location filename="../mainwindow.cpp" line="1191"/>
         <source>Update appearance</source>
         <translation>Mettre à jour l&apos;apparence</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1137"/>
+        <location filename="../mainwindow.ui" line="1138"/>
         <source>Recreate obstacles</source>
         <translation>Recréer des obstacles</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1148"/>
+        <location filename="../mainwindow.ui" line="1149"/>
         <source>Player 1</source>
         <translation>Joueur 1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1159"/>
+        <location filename="../mainwindow.ui" line="1160"/>
         <source>Player 2</source>
         <translation>Joueur 2</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1170"/>
+        <location filename="../mainwindow.ui" line="1171"/>
         <source>Player 3</source>
         <translation>Joueur 3</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1181"/>
+        <location filename="../mainwindow.ui" line="1182"/>
         <source>Player 4</source>
         <translation>Joueur 4</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1192"/>
+        <location filename="../mainwindow.ui" line="1193"/>
         <source>Player 5</source>
         <translation>Joueur 5</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1203"/>
+        <location filename="../mainwindow.ui" line="1204"/>
         <source>Player 6</source>
         <translation>Joueur 6</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1214"/>
+        <location filename="../mainwindow.ui" line="1215"/>
         <source>Player 7</source>
         <translation>Joueur 7</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1225"/>
+        <location filename="../mainwindow.ui" line="1226"/>
         <source>Player 8</source>
         <translation>Joueur 8</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1233"/>
+        <location filename="../mainwindow.ui" line="1234"/>
         <source>Export as...</source>
         <translation>Exporter sous...</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="346"/>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Confirmation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Unsaved changes will be lost, are you sure?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Cannot open map from this folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="370"/>
         <source>Open map</source>
         <translation>Ouvrir la carte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="348"/>
+        <location filename="../mainwindow.cpp" line="372"/>
         <source>All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m)</source>
         <translation>Toutes les cartes prises en charge (*.vmap *.h3m);;Cartes VCMI (*.vmap);;Cartes HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>Save map</source>
         <translation>Enregistrer la carte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>VCMI maps (*.vmap)</source>
         <translation>Cartes VCMI (*.vmap)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="582"/>
+        <location filename="../mainwindow.cpp" line="606"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="750"/>
+        <location filename="../mainwindow.cpp" line="768"/>
         <source>View surface</source>
         <translation>Afficher la surface</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <source>No objects selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <source>This operation is irreversible. Do you want to continue?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1191"/>
+        <source>Errors occured. %1 objects were not updated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1231"/>
+        <source>Save to image</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MapSettings</name>
@@ -329,162 +370,220 @@
         <translation>Paramètres de la carte</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="40"/>
+        <location filename="../mapsettings.ui" line="33"/>
         <source>General</source>
         <translation>Général</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="46"/>
+        <location filename="../mapsettings.ui" line="39"/>
         <source>Map name</source>
         <translation>Nom de la carte</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="56"/>
+        <location filename="../mapsettings.ui" line="49"/>
         <source>Map description</source>
         <translation>Description de la carte</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="66"/>
+        <location filename="../mapsettings.ui" line="83"/>
+        <source>Limit maximum heroes level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="92"/>
         <source>Difficulty</source>
         <translation>Difficulté</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="111"/>
+        <location filename="../mapsettings.ui" line="137"/>
+        <source>Mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="143"/>
+        <source>Mandatory mods for playing this map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="157"/>
+        <source>Mod name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="162"/>
+        <source>Version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="172"/>
+        <source>Automatic assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="179"/>
+        <source>Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="182"/>
+        <source>Map objects mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="192"/>
+        <source>Set all mods having a game content as mandatory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="195"/>
+        <source>Full content mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="208"/>
         <source>Events</source>
         <translation>Événements</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="121"/>
+        <location filename="../mapsettings.ui" line="218"/>
         <source>Victory</source>
         <translation>Victoire</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="135"/>
+        <location filename="../mapsettings.ui" line="232"/>
         <source>Victory message</source>
         <translation>Message de victoire</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="150"/>
+        <location filename="../mapsettings.ui" line="247"/>
         <source>Only for human players</source>
         <translation>Uniquement pour les joueurs humains</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="157"/>
+        <location filename="../mapsettings.ui" line="254"/>
         <source>Allow standard victory</source>
         <translation>Autoriser la victoire standard</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="170"/>
-        <location filename="../mapsettings.ui" line="218"/>
+        <location filename="../mapsettings.ui" line="267"/>
+        <location filename="../mapsettings.ui" line="315"/>
         <source>Parameters</source>
         <translation>Paramètres</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="186"/>
+        <location filename="../mapsettings.ui" line="283"/>
         <source>Loss</source>
         <translation>Perte</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="195"/>
+        <location filename="../mapsettings.ui" line="292"/>
         <source>7 days without town</source>
         <translation>7 jours sans ville</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="202"/>
+        <location filename="../mapsettings.ui" line="299"/>
         <source>Defeat message</source>
         <translation>Message de défaite</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="235"/>
+        <location filename="../mapsettings.ui" line="332"/>
         <source>Abilities</source>
         <translation>Capacités</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="261"/>
+        <location filename="../mapsettings.ui" line="358"/>
         <source>Spells</source>
         <translation>Sorts</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="287"/>
+        <location filename="../mapsettings.ui" line="384"/>
         <source>Artifacts</source>
         <translation>Artefacts</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="313"/>
+        <location filename="../mapsettings.ui" line="410"/>
         <source>Heroes</source>
         <translation>Héros</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="29"/>
+        <location filename="../mapsettings.ui" line="439"/>
         <source>Ok</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="163"/>
+        <location filename="../mapsettings.cpp" line="174"/>
         <source>No special victory</source>
         <translation>Pas de victoire spéciale</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="164"/>
+        <location filename="../mapsettings.cpp" line="175"/>
         <source>Capture artifact</source>
         <translation>Récupérer l&apos;artefact</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="165"/>
+        <location filename="../mapsettings.cpp" line="176"/>
         <source>Hire creatures</source>
         <translation>Engagez des créatures</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="166"/>
+        <location filename="../mapsettings.cpp" line="177"/>
         <source>Accumulate resources</source>
         <translation>Accumuler des ressources</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="167"/>
+        <location filename="../mapsettings.cpp" line="178"/>
         <source>Construct building</source>
         <translation>Construire un bâtiment</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="168"/>
+        <location filename="../mapsettings.cpp" line="179"/>
         <source>Capture town</source>
         <translation>Conquérir une ville</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="169"/>
+        <location filename="../mapsettings.cpp" line="180"/>
         <source>Defeat hero</source>
         <translation>Battre un héros</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="170"/>
+        <location filename="../mapsettings.cpp" line="181"/>
         <source>Transport artifact</source>
         <translation>Transporter un artefact</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="173"/>
+        <location filename="../mapsettings.cpp" line="184"/>
         <source>No special loss</source>
         <translation>Aucune perte spéciale</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="174"/>
+        <location filename="../mapsettings.cpp" line="185"/>
         <source>Lose castle</source>
         <translation>Perdre un château</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="175"/>
+        <location filename="../mapsettings.cpp" line="186"/>
         <source>Lose hero</source>
         <translation>Perdre un héros</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="176"/>
+        <location filename="../mapsettings.cpp" line="187"/>
         <source>Time expired</source>
         <translation>Délai expiré</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="177"/>
+        <location filename="../mapsettings.cpp" line="188"/>
         <source>Days without town</source>
         <translation>Jours sans ville</translation>
     </message>
 </context>
+<context>
+    <name>MapView</name>
+    <message>
+        <location filename="../mapview.cpp" line="471"/>
+        <source>Can&apos;t place object</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>MessageWidget</name>
     <message>
@@ -496,47 +595,51 @@
 <context>
     <name>PlayerParams</name>
     <message>
-        <location filename="../playerparams.ui" line="57"/>
         <source>No team</source>
-        <translation>Aucune équipe</translation>
+        <translation type="vanished">Aucune équipe</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="65"/>
+        <location filename="../playerparams.ui" line="118"/>
         <source>Human/CPU</source>
         <translation>Human/Ordinateur</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="72"/>
+        <location filename="../playerparams.ui" line="105"/>
         <source>CPU only</source>
         <translation>Ordinateur uniquement</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="79"/>
+        <location filename="../playerparams.ui" line="92"/>
         <source>Team</source>
         <translation>Équipe</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="86"/>
+        <location filename="../playerparams.ui" line="162"/>
         <source>Main town</source>
         <translation>Ville principale</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="93"/>
+        <location filename="../playerparams.ui" line="179"/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../playerparams.ui" line="85"/>
         <source>Random faction</source>
         <translation>Faction aléatoire</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="100"/>
+        <location filename="../playerparams.ui" line="72"/>
         <source>Generate hero at main</source>
         <translation>Générer un héros dans le principal</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="108"/>
+        <location filename="../playerparams.ui" line="154"/>
         <source>(default)</source>
         <translation>(par défaut)</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="86"/>
+        <location filename="../playerparams.cpp" line="109"/>
         <source>Player ID: %1</source>
         <translation>Identifiant du joueur : %1</translation>
     </message>
@@ -554,7 +657,12 @@
         <translation>Joueurs</translation>
     </message>
     <message>
-        <location filename="../playersettings.ui" line="112"/>
+        <location filename="../playersettings.ui" line="74"/>
+        <source>1</source>
+        <translation type="unfinished">1</translation>
+    </message>
+    <message>
+        <location filename="../playersettings.ui" line="117"/>
         <source>Ok</source>
         <translation>OK</translation>
     </message>
@@ -610,6 +718,11 @@
         <source>Map is not loaded</source>
         <translation>Aucune carte n&apos;est chargée</translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="70"/>
+        <source>No factions allowed for player %1</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="73"/>
         <source>No players allowed to play this map</source>
@@ -695,6 +808,11 @@
         <source>Map description is not specified</source>
         <translation>La description de la carte n&apos;est pas spécifiée</translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="175"/>
+        <source>Map contains object from mod &quot;%1&quot;, but doesn&apos;t require it</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="181"/>
         <source>Exception occurs during validation: %1</source>
@@ -764,124 +882,139 @@
         <translation>Joueurs</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="736"/>
+        <location filename="../windownewmap.ui" line="724"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="268"/>
+        <location filename="../windownewmap.ui" line="349"/>
         <source>Human/Computer</source>
         <translation>Humain/Ordinateur</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="220"/>
-        <location filename="../windownewmap.ui" line="288"/>
-        <location filename="../windownewmap.ui" line="442"/>
-        <location filename="../windownewmap.ui" line="583"/>
+        <location filename="../windownewmap.ui" line="221"/>
+        <location filename="../windownewmap.ui" line="289"/>
+        <location filename="../windownewmap.ui" line="443"/>
+        <location filename="../windownewmap.ui" line="584"/>
         <source>Random</source>
         <translation>Aléatoire</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="336"/>
+        <location filename="../windownewmap.ui" line="269"/>
         <source>Computer only</source>
         <translation>Ordinateur uniquement</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="379"/>
+        <location filename="../windownewmap.ui" line="380"/>
         <source>Human teams</source>
         <translation>Équipes humaines</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="398"/>
+        <location filename="../windownewmap.ui" line="399"/>
         <source>Computer teams</source>
         <translation>Équipes d&apos;ordinateur</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="428"/>
+        <location filename="../windownewmap.ui" line="416"/>
         <source>Monster strength</source>
         <translation>Force des monstres</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="477"/>
+        <location filename="../windownewmap.ui" line="465"/>
         <source>Weak</source>
         <translation>Faible</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="496"/>
-        <location filename="../windownewmap.ui" line="637"/>
+        <location filename="../windownewmap.ui" line="484"/>
+        <location filename="../windownewmap.ui" line="625"/>
         <source>Normal</source>
         <translation>Normale</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="515"/>
+        <location filename="../windownewmap.ui" line="503"/>
         <source>Strong</source>
         <translation>Forte</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="569"/>
+        <location filename="../windownewmap.ui" line="557"/>
         <source>Water content</source>
         <translation>Proportion en eau</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="618"/>
+        <location filename="../windownewmap.ui" line="606"/>
         <source>None</source>
         <translation>Aucune</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="656"/>
+        <location filename="../windownewmap.ui" line="644"/>
         <source>Islands</source>
         <translation>Îles</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="701"/>
+        <location filename="../windownewmap.ui" line="689"/>
         <source>Template</source>
         <translation>Modèle</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="749"/>
+        <location filename="../windownewmap.ui" line="737"/>
         <source>Custom seed</source>
         <translation>Graine personnalisée</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="763"/>
+        <location filename="../windownewmap.ui" line="751"/>
         <source>Generate random map</source>
         <translation>Générer une carte aléatoire</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="797"/>
+        <location filename="../windownewmap.ui" line="785"/>
         <source>Ok</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="816"/>
+        <location filename="../windownewmap.ui" line="804"/>
         <source>Cancel</source>
         <translation>Annuler</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template for parameters scecified. Random map cannot be generated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="291"/>
+        <source>RMG failure</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>
     <message>
-        <location filename="../mainwindow.cpp" line="98"/>
+        <location filename="../mainwindow.cpp" line="101"/>
         <source>Filepath of the map to open.</source>
         <translation>Chemin du fichier de la carte à ouvrir.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="101"/>
+        <location filename="../mainwindow.cpp" line="104"/>
         <source>Extract original H3 archives into a separate folder.</source>
         <translation>Extraire les archives H3 d&apos;origine dans un dossier séparé.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="102"/>
+        <location filename="../mainwindow.cpp" line="105"/>
         <source>From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG&apos;s.</source>
         <translation>À partir d&apos;une archive extraite, il divise TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 et Un44 en fichiers PNG individuels.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="103"/>
+        <location filename="../mainwindow.cpp" line="106"/>
         <source>From an extracted archive, Converts single Images (found in Images folder) from .pcx to png.</source>
         <translation>À partir d&apos;une archive extraite, convertit des images uniques (trouvées dans le dossier Images) de .pcx en png.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="104"/>
+        <location filename="../mainwindow.cpp" line="107"/>
         <source>Delete original files, for the ones splitted / converted.</source>
         <translation>Supprimer les fichiers d&apos;origine, pour ceux fractionnés/convertis.</translation>
     </message>

+ 314 - 169
mapeditor/translation/german.ts

@@ -40,284 +40,327 @@
         <translation>Datei</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="68"/>
+        <location filename="../mainwindow.ui" line="69"/>
         <source>Map</source>
         <translation>Karte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="78"/>
+        <location filename="../mainwindow.ui" line="79"/>
         <source>Edit</source>
         <translation>Bearbeiten</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="89"/>
+        <location filename="../mainwindow.ui" line="90"/>
         <source>View</source>
         <translation>Ansicht</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="97"/>
+        <location filename="../mainwindow.ui" line="98"/>
         <source>Player</source>
         <translation>Spieler</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="117"/>
+        <location filename="../mainwindow.ui" line="118"/>
         <source>Toolbar</source>
-        <translation type="unfinished"></translation>
+        <translation>Werkzeugleiste</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="163"/>
+        <location filename="../mainwindow.ui" line="164"/>
         <source>Minimap</source>
-        <translation type="unfinished"></translation>
+        <translation>Minikarte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="239"/>
+        <location filename="../mainwindow.ui" line="240"/>
         <source>Map Objects View</source>
-        <translation type="unfinished"></translation>
+        <translation>Kartenobjekte-Ansicht</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="283"/>
+        <location filename="../mainwindow.ui" line="284"/>
         <source>Browser</source>
         <translation>Browser</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="361"/>
+        <location filename="../mainwindow.ui" line="362"/>
         <source>Inspector</source>
         <translation>Inspektor</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="400"/>
+        <location filename="../mainwindow.ui" line="401"/>
         <source>Property</source>
         <translation>Eigenschaft</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="405"/>
+        <location filename="../mainwindow.ui" line="406"/>
         <source>Value</source>
         <translation>Wert</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="432"/>
+        <location filename="../mainwindow.ui" line="433"/>
         <source>Terrains View</source>
-        <translation type="unfinished"></translation>
+        <translation>Terrain-Ansicht</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="484"/>
+        <location filename="../mainwindow.ui" line="485"/>
         <source>Brush</source>
         <translation>Pinsel</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="763"/>
+        <location filename="../mainwindow.ui" line="764"/>
         <source>Terrains</source>
         <translation>Terrains</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="806"/>
+        <location filename="../mainwindow.ui" line="807"/>
         <source>Roads</source>
         <translation>Straßen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="842"/>
+        <location filename="../mainwindow.ui" line="843"/>
         <source>Rivers</source>
         <translation>Flüsse</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="889"/>
+        <location filename="../mainwindow.ui" line="890"/>
         <source>Open</source>
         <translation>Öffnen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="901"/>
+        <location filename="../mainwindow.ui" line="902"/>
         <source>Save</source>
         <translation>Speichern</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="913"/>
+        <location filename="../mainwindow.ui" line="914"/>
         <source>New</source>
         <translation>Neu</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="921"/>
+        <location filename="../mainwindow.ui" line="922"/>
         <source>Save as...</source>
-        <translation>Speichern unter</translation>
+        <translation>Speichern unter...</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="924"/>
+        <location filename="../mainwindow.ui" line="925"/>
         <source>Ctrl+Shift+S</source>
         <translation>Strg+Shift+S</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="933"/>
+        <location filename="../mainwindow.ui" line="934"/>
         <source>U/G</source>
         <translation>U/G</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="936"/>
-        <location filename="../mainwindow.cpp" line="746"/>
+        <location filename="../mainwindow.ui" line="937"/>
+        <location filename="../mainwindow.cpp" line="764"/>
         <source>View underground</source>
         <translation>Ansicht Untergrund</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="951"/>
+        <location filename="../mainwindow.ui" line="952"/>
         <source>Pass</source>
         <translation>Passierbar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="963"/>
+        <location filename="../mainwindow.ui" line="964"/>
         <source>Cut</source>
         <translation>Ausschneiden</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="975"/>
+        <location filename="../mainwindow.ui" line="976"/>
         <source>Copy</source>
         <translation>Kopieren</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="987"/>
+        <location filename="../mainwindow.ui" line="988"/>
         <source>Paste</source>
         <translation>Einfügen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="999"/>
+        <location filename="../mainwindow.ui" line="1000"/>
         <source>Fill</source>
         <translation>Füllen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1002"/>
+        <location filename="../mainwindow.ui" line="1003"/>
         <source>Fills the selection with obstacles</source>
         <translation>Füllt die Auswahl mit Hindernissen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1017"/>
+        <location filename="../mainwindow.ui" line="1018"/>
         <source>Grid</source>
         <translation>Raster</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1028"/>
+        <location filename="../mainwindow.ui" line="1029"/>
         <source>General</source>
         <translation>Allgemein</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1031"/>
+        <location filename="../mainwindow.ui" line="1032"/>
         <source>Map title and description</source>
         <translation>Titel und Beschreibung der Karte</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1042"/>
+        <location filename="../mainwindow.ui" line="1043"/>
         <source>Players settings</source>
         <translation>Spieler-Einstellungen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1057"/>
-        <location filename="../mainwindow.ui" line="1060"/>
+        <location filename="../mainwindow.ui" line="1058"/>
+        <location filename="../mainwindow.ui" line="1061"/>
         <source>Undo</source>
         <translation>Rückgängig</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1078"/>
+        <location filename="../mainwindow.ui" line="1079"/>
         <source>Redo</source>
         <translation>Wiederholen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1096"/>
+        <location filename="../mainwindow.ui" line="1097"/>
         <source>Erase</source>
         <translation>Löschen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1107"/>
+        <location filename="../mainwindow.ui" line="1108"/>
         <source>Neutral</source>
         <translation>Neutral</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1115"/>
+        <location filename="../mainwindow.ui" line="1116"/>
         <source>Validate</source>
         <translation>Validieren</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1126"/>
+        <location filename="../mainwindow.ui" line="1127"/>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <location filename="../mainwindow.cpp" line="1191"/>
         <source>Update appearance</source>
         <translation>Aussehen aktualisieren</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1137"/>
+        <location filename="../mainwindow.ui" line="1138"/>
         <source>Recreate obstacles</source>
         <translation>Hindernisse neu erschaffen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1148"/>
+        <location filename="../mainwindow.ui" line="1149"/>
         <source>Player 1</source>
         <translation>Spieler 1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1159"/>
+        <location filename="../mainwindow.ui" line="1160"/>
         <source>Player 2</source>
         <translation>Spieler 2</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1170"/>
+        <location filename="../mainwindow.ui" line="1171"/>
         <source>Player 3</source>
         <translation>Spieler 3</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1181"/>
+        <location filename="../mainwindow.ui" line="1182"/>
         <source>Player 4</source>
         <translation>Spieler 4</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1192"/>
+        <location filename="../mainwindow.ui" line="1193"/>
         <source>Player 5</source>
         <translation>Spieler 5</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1203"/>
+        <location filename="../mainwindow.ui" line="1204"/>
         <source>Player 6</source>
         <translation>Spieler 6</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1214"/>
+        <location filename="../mainwindow.ui" line="1215"/>
         <source>Player 7</source>
         <translation>Spieler 7</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1225"/>
+        <location filename="../mainwindow.ui" line="1226"/>
         <source>Player 8</source>
         <translation>Spieler 8</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1233"/>
+        <location filename="../mainwindow.ui" line="1234"/>
         <source>Export as...</source>
+        <translation>Exportieren als...</translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Confirmation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Unsaved changes will be lost, are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="346"/>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Cannot open map from this folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="370"/>
         <source>Open map</source>
         <translation>Karte öffnen</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="348"/>
+        <location filename="../mainwindow.cpp" line="372"/>
         <source>All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m)</source>
         <translation>Alle unterstützten Karten (*.vmap *.h3m);;VCMI-Karten (*.vmap);;HoMM3-Karten (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>Save map</source>
         <translation>Karte speichern</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>VCMI maps (*.vmap)</source>
         <translation>VCMI-Karten (*.vmap)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="582"/>
+        <location filename="../mainwindow.cpp" line="606"/>
         <source>Type</source>
         <translation>Typ</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="750"/>
+        <location filename="../mainwindow.cpp" line="768"/>
         <source>View surface</source>
         <translation>Oberfläche anzeigen</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <source>No objects selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <source>This operation is irreversible. Do you want to continue?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1191"/>
+        <source>Errors occured. %1 objects were not updated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1231"/>
+        <source>Save to image</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MapSettings</name>
@@ -327,159 +370,217 @@
         <translation>Karteneinstellungen</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="40"/>
+        <location filename="../mapsettings.ui" line="33"/>
         <source>General</source>
         <translation>Allgemein</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="46"/>
+        <location filename="../mapsettings.ui" line="39"/>
         <source>Map name</source>
         <translation>Kartenname</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="56"/>
+        <location filename="../mapsettings.ui" line="49"/>
         <source>Map description</source>
         <translation>Kartenbeschreibung</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="66"/>
+        <location filename="../mapsettings.ui" line="83"/>
+        <source>Limit maximum heroes level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="92"/>
         <source>Difficulty</source>
+        <translation>Schwierigkeit</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="137"/>
+        <source>Mods</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="111"/>
-        <source>Events</source>
+        <location filename="../mapsettings.ui" line="143"/>
+        <source>Mandatory mods for playing this map</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="121"/>
-        <source>Victory</source>
+        <location filename="../mapsettings.ui" line="157"/>
+        <source>Mod name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="135"/>
-        <source>Victory message</source>
+        <location filename="../mapsettings.ui" line="162"/>
+        <source>Version</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="150"/>
-        <source>Only for human players</source>
+        <location filename="../mapsettings.ui" line="172"/>
+        <source>Automatic assignment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="157"/>
-        <source>Allow standard victory</source>
+        <location filename="../mapsettings.ui" line="179"/>
+        <source>Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="170"/>
-        <location filename="../mapsettings.ui" line="218"/>
-        <source>Parameters</source>
+        <location filename="../mapsettings.ui" line="182"/>
+        <source>Map objects mods</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="186"/>
-        <source>Loss</source>
+        <location filename="../mapsettings.ui" line="192"/>
+        <source>Set all mods having a game content as mandatory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../mapsettings.ui" line="195"/>
-        <source>7 days without town</source>
+        <source>Full content mods</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="202"/>
+        <location filename="../mapsettings.ui" line="208"/>
+        <source>Events</source>
+        <translation>Ereignisse</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="218"/>
+        <source>Victory</source>
+        <translation>Sieg</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="232"/>
+        <source>Victory message</source>
+        <translation>Sieg-Nachricht</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="247"/>
+        <source>Only for human players</source>
+        <translation>Nur für menschliche Spieler</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="254"/>
+        <source>Allow standard victory</source>
+        <translation>Standardsieg zulassen</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="267"/>
+        <location filename="../mapsettings.ui" line="315"/>
+        <source>Parameters</source>
+        <translation>Parameter</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="283"/>
+        <source>Loss</source>
+        <translation>Niederlage</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="292"/>
+        <source>7 days without town</source>
+        <translation>7 Tage ohne Stadt</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="299"/>
         <source>Defeat message</source>
-        <translation type="unfinished"></translation>
+        <translation>Niederlage-Nachricht</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="235"/>
+        <location filename="../mapsettings.ui" line="332"/>
         <source>Abilities</source>
         <translation>Fähigkeiten</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="261"/>
+        <location filename="../mapsettings.ui" line="358"/>
         <source>Spells</source>
         <translation>Zaubersprüche</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="287"/>
+        <location filename="../mapsettings.ui" line="384"/>
         <source>Artifacts</source>
         <translation>Artefakte</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="313"/>
+        <location filename="../mapsettings.ui" line="410"/>
         <source>Heroes</source>
         <translation>Helden</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="29"/>
+        <location filename="../mapsettings.ui" line="439"/>
         <source>Ok</source>
         <translation>Ok</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="163"/>
+        <location filename="../mapsettings.cpp" line="174"/>
         <source>No special victory</source>
-        <translation type="unfinished"></translation>
+        <translation>Kein besonderer Sieg</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="164"/>
+        <location filename="../mapsettings.cpp" line="175"/>
         <source>Capture artifact</source>
-        <translation type="unfinished"></translation>
+        <translation>Artefakt sammeln</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="165"/>
+        <location filename="../mapsettings.cpp" line="176"/>
         <source>Hire creatures</source>
-        <translation type="unfinished"></translation>
+        <translation>Kreaturen anheuern</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="166"/>
+        <location filename="../mapsettings.cpp" line="177"/>
         <source>Accumulate resources</source>
-        <translation type="unfinished"></translation>
+        <translation>Ressourcen ansammeln</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="167"/>
+        <location filename="../mapsettings.cpp" line="178"/>
         <source>Construct building</source>
-        <translation type="unfinished"></translation>
+        <translation>Gebäude errichten</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="168"/>
+        <location filename="../mapsettings.cpp" line="179"/>
         <source>Capture town</source>
-        <translation type="unfinished"></translation>
+        <translation>Stadt einnehmen</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="169"/>
+        <location filename="../mapsettings.cpp" line="180"/>
         <source>Defeat hero</source>
-        <translation type="unfinished"></translation>
+        <translation>Held besiegen</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="170"/>
+        <location filename="../mapsettings.cpp" line="181"/>
         <source>Transport artifact</source>
-        <translation type="unfinished"></translation>
+        <translation>Artefakt transportieren</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="173"/>
+        <location filename="../mapsettings.cpp" line="184"/>
         <source>No special loss</source>
-        <translation type="unfinished"></translation>
+        <translation>Keine besondere Niederlage</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="174"/>
+        <location filename="../mapsettings.cpp" line="185"/>
         <source>Lose castle</source>
-        <translation type="unfinished"></translation>
+        <translation>Schloss verlieren</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="175"/>
+        <location filename="../mapsettings.cpp" line="186"/>
         <source>Lose hero</source>
-        <translation type="unfinished"></translation>
+        <translation>Held verlieren</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="176"/>
+        <location filename="../mapsettings.cpp" line="187"/>
         <source>Time expired</source>
-        <translation type="unfinished"></translation>
+        <translation>Zeit abgelaufen</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="177"/>
+        <location filename="../mapsettings.cpp" line="188"/>
         <source>Days without town</source>
+        <translation>Tage ohne Stadt</translation>
+    </message>
+</context>
+<context>
+    <name>MapView</name>
+    <message>
+        <location filename="../mapview.cpp" line="471"/>
+        <source>Can&apos;t place object</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -494,47 +595,51 @@
 <context>
     <name>PlayerParams</name>
     <message>
-        <location filename="../playerparams.ui" line="57"/>
         <source>No team</source>
-        <translation>Kein Team</translation>
+        <translation type="vanished">Kein Team</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="65"/>
+        <location filename="../playerparams.ui" line="118"/>
         <source>Human/CPU</source>
         <translation>Mensch/CPU</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="72"/>
+        <location filename="../playerparams.ui" line="105"/>
         <source>CPU only</source>
         <translation>Nur CPU</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="79"/>
+        <location filename="../playerparams.ui" line="92"/>
         <source>Team</source>
         <translation>Team</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="86"/>
+        <location filename="../playerparams.ui" line="162"/>
         <source>Main town</source>
         <translation>Hauptstadt</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="93"/>
+        <location filename="../playerparams.ui" line="179"/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../playerparams.ui" line="85"/>
         <source>Random faction</source>
         <translation>Zufällige Fraktion</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="100"/>
+        <location filename="../playerparams.ui" line="72"/>
         <source>Generate hero at main</source>
         <translation>Held am Hauptplatz generieren</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="108"/>
+        <location filename="../playerparams.ui" line="154"/>
         <source>(default)</source>
         <translation>(Standard)</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="86"/>
+        <location filename="../playerparams.cpp" line="109"/>
         <source>Player ID: %1</source>
         <translation>Spieler-ID: %1</translation>
     </message>
@@ -552,7 +657,12 @@
         <translation>Spieler</translation>
     </message>
     <message>
-        <location filename="../playersettings.ui" line="112"/>
+        <location filename="../playersettings.ui" line="74"/>
+        <source>1</source>
+        <translation type="unfinished">1</translation>
+    </message>
+    <message>
+        <location filename="../playersettings.ui" line="117"/>
         <source>Ok</source>
         <translation>Ok</translation>
     </message>
@@ -606,32 +716,37 @@
     <message>
         <location filename="../validator.cpp" line="50"/>
         <source>Map is not loaded</source>
+        <translation>Karte ist nicht geladen</translation>
+    </message>
+    <message>
+        <location filename="../validator.cpp" line="70"/>
+        <source>No factions allowed for player %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="73"/>
         <source>No players allowed to play this map</source>
-        <translation type="unfinished"></translation>
+        <translation>Keine Spieler dürfen diese Karte spielen</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="75"/>
         <source>Map is allowed for one player and cannot be started</source>
-        <translation type="unfinished"></translation>
+        <translation>Karte ist für einen Spieler erlaubt und kann nicht gestartet werden</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="77"/>
         <source>No human players allowed to play this map</source>
-        <translation type="unfinished"></translation>
+        <translation>Keine menschlichen Spieler dürfen diese Karte spielen</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="93"/>
         <source>Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner</source>
-        <translation type="unfinished"></translation>
+        <translation>Gepanzerte Instanz %1 ist UNFLAGGABLE, muss aber NEUTRAL oder Spielerbesitzer haben</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="99"/>
         <source>Object %1 is assigned to non-playable player %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Objekt %1 ist dem nicht spielbaren Spieler %2 zugewiesen</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="106"/>
@@ -641,67 +756,72 @@
     <message>
         <location filename="../validator.cpp" line="116"/>
         <source>Prison %1 must be a NEUTRAL</source>
-        <translation type="unfinished"></translation>
+        <translation>Gefängnis %1 muss NEUTRAL sein</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="122"/>
         <source>Hero %1 must have an owner</source>
-        <translation type="unfinished"></translation>
+        <translation>Held %1 muss einen Besitzer haben</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="127"/>
         <source>Hero %1 is prohibited by map settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Held %1 ist durch Karteneinstellungen verboten</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="130"/>
         <source>Hero %1 has duplicate on map</source>
-        <translation type="unfinished"></translation>
+        <translation>Held %1 hat Duplikat auf Karte</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="133"/>
         <source>Hero %1 has an empty type and must be removed</source>
-        <translation type="unfinished"></translation>
+        <translation>Held %1 hat einen leeren Typ und muss entfernt werden</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="144"/>
         <source>Spell scroll %1 is prohibited by map settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Zauberschriftrolle %1 ist durch Karteneinstellungen verboten</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="147"/>
         <source>Spell scroll %1 doesn&apos;t have instance assigned and must be removed</source>
-        <translation type="unfinished"></translation>
+        <translation>Zauberschriftrolle %1 hat keine Instanz zugewiesen und muss entfernt werden</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="153"/>
         <source>Artifact %1 is prohibited by map settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Artefakt %1 ist durch Karteneinstellungen verboten</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="162"/>
         <source>Player %1 doesn&apos;t have any starting town</source>
-        <translation type="unfinished"></translation>
+        <translation>Spieler %1 hat keine Startstadt</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="166"/>
         <source>Map name is not specified</source>
-        <translation type="unfinished"></translation>
+        <translation>Kartenname ist nicht angegeben</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="168"/>
         <source>Map description is not specified</source>
+        <translation>Kartenbeschreibung ist nicht angegeben</translation>
+    </message>
+    <message>
+        <location filename="../validator.cpp" line="175"/>
+        <source>Map contains object from mod &quot;%1&quot;, but doesn&apos;t require it</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="181"/>
         <source>Exception occurs during validation: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Bei der Validierung ist eine Ausnahme aufgetreten: %1</translation>
     </message>
     <message>
         <location filename="../validator.cpp" line="185"/>
         <source>Unknown exception occurs during validation</source>
-        <translation type="unfinished"></translation>
+        <translation>Unbekannte Ausnahme trat während der Validierung auf</translation>
     </message>
 </context>
 <context>
@@ -762,114 +882,139 @@
         <translation>Spieler</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="736"/>
+        <location filename="../windownewmap.ui" line="724"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="268"/>
+        <location filename="../windownewmap.ui" line="349"/>
         <source>Human/Computer</source>
         <translation>Mensch/Computer</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="288"/>
-        <location filename="../windownewmap.ui" line="357"/>
-        <location filename="../windownewmap.ui" line="455"/>
-        <location filename="../windownewmap.ui" line="596"/>
+        <location filename="../windownewmap.ui" line="221"/>
+        <location filename="../windownewmap.ui" line="289"/>
+        <location filename="../windownewmap.ui" line="443"/>
+        <location filename="../windownewmap.ui" line="584"/>
         <source>Random</source>
         <translation>Zufall</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="336"/>
+        <location filename="../windownewmap.ui" line="269"/>
         <source>Computer only</source>
         <translation>Nur Computer</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="428"/>
+        <location filename="../windownewmap.ui" line="380"/>
+        <source>Human teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="399"/>
+        <source>Computer teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="416"/>
         <source>Monster strength</source>
         <translation>Monster-Stärke</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="477"/>
+        <location filename="../windownewmap.ui" line="465"/>
         <source>Weak</source>
         <translation>Schwach</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="496"/>
-        <location filename="../windownewmap.ui" line="637"/>
+        <location filename="../windownewmap.ui" line="484"/>
+        <location filename="../windownewmap.ui" line="625"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="515"/>
+        <location filename="../windownewmap.ui" line="503"/>
         <source>Strong</source>
         <translation>Stark</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="569"/>
+        <location filename="../windownewmap.ui" line="557"/>
         <source>Water content</source>
         <translation>Wasseranteil</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="618"/>
+        <location filename="../windownewmap.ui" line="606"/>
         <source>None</source>
         <translation>Keine</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="656"/>
+        <location filename="../windownewmap.ui" line="644"/>
         <source>Islands</source>
         <translation>Inseln</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="701"/>
+        <location filename="../windownewmap.ui" line="689"/>
         <source>Template</source>
         <translation>Vorlage</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="749"/>
+        <location filename="../windownewmap.ui" line="737"/>
         <source>Custom seed</source>
         <translation>Benutzerdefiniertes Seed</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="763"/>
+        <location filename="../windownewmap.ui" line="751"/>
         <source>Generate random map</source>
         <translation>Zufällige Karte generieren</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="797"/>
+        <location filename="../windownewmap.ui" line="785"/>
         <source>Ok</source>
         <translation>Ok</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="816"/>
+        <location filename="../windownewmap.ui" line="804"/>
         <source>Cancel</source>
         <translation>Abbrechen</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template for parameters scecified. Random map cannot be generated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="291"/>
+        <source>RMG failure</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>
     <message>
-        <location filename="../mainwindow.cpp" line="98"/>
+        <location filename="../mainwindow.cpp" line="101"/>
         <source>Filepath of the map to open.</source>
         <translation>Dateipfad der zu öffnenden Karte.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="101"/>
+        <location filename="../mainwindow.cpp" line="104"/>
         <source>Extract original H3 archives into a separate folder.</source>
         <translation>Extrahieren Sie die Original-H3-Archive in einen separaten Ordner.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="102"/>
+        <location filename="../mainwindow.cpp" line="105"/>
         <source>From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG&apos;s.</source>
         <translation>Aus einem extrahierten Archiv zerlegt es TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 und Un44 in einzelne PNGs.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="103"/>
+        <location filename="../mainwindow.cpp" line="106"/>
         <source>From an extracted archive, Converts single Images (found in Images folder) from .pcx to png.</source>
         <translation>Aus einem extrahierten Archiv werden einzelne Bilder (aus dem Ordner &quot;Images&quot;) von .pcx in png konvertiert.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="104"/>
+        <location filename="../mainwindow.cpp" line="107"/>
         <source>Delete original files, for the ones splitted / converted.</source>
         <translation>Löschen Sie die Originaldateien für die gesplitteten/konvertierten Dateien.</translation>
     </message>

+ 272 - 127
mapeditor/translation/polish.ts

@@ -40,284 +40,327 @@
         <translation>Plik</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="68"/>
+        <location filename="../mainwindow.ui" line="69"/>
         <source>Map</source>
         <translation>Mapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="78"/>
+        <location filename="../mainwindow.ui" line="79"/>
         <source>Edit</source>
         <translation>Edycja</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="89"/>
+        <location filename="../mainwindow.ui" line="90"/>
         <source>View</source>
         <translation>Widok</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="97"/>
+        <location filename="../mainwindow.ui" line="98"/>
         <source>Player</source>
         <translation>Gracz</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="117"/>
+        <location filename="../mainwindow.ui" line="118"/>
         <source>Toolbar</source>
         <translation>Przybornik</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="163"/>
+        <location filename="../mainwindow.ui" line="164"/>
         <source>Minimap</source>
         <translation>Minimapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="239"/>
+        <location filename="../mainwindow.ui" line="240"/>
         <source>Map Objects View</source>
         <translation>Widok obiektów</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="283"/>
+        <location filename="../mainwindow.ui" line="284"/>
         <source>Browser</source>
         <translation>Przeglądarka</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="361"/>
+        <location filename="../mainwindow.ui" line="362"/>
         <source>Inspector</source>
         <translation>Inspektor</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="400"/>
+        <location filename="../mainwindow.ui" line="401"/>
         <source>Property</source>
         <translation>Właściwość</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="405"/>
+        <location filename="../mainwindow.ui" line="406"/>
         <source>Value</source>
         <translation>Wartość</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="432"/>
+        <location filename="../mainwindow.ui" line="433"/>
         <source>Terrains View</source>
         <translation>Widok terenów</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="484"/>
+        <location filename="../mainwindow.ui" line="485"/>
         <source>Brush</source>
         <translation>Pędzel</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="763"/>
+        <location filename="../mainwindow.ui" line="764"/>
         <source>Terrains</source>
         <translation>Tereny</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="806"/>
+        <location filename="../mainwindow.ui" line="807"/>
         <source>Roads</source>
         <translation>Drogi</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="842"/>
+        <location filename="../mainwindow.ui" line="843"/>
         <source>Rivers</source>
         <translation>Rzeki</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="889"/>
+        <location filename="../mainwindow.ui" line="890"/>
         <source>Open</source>
         <translation>Otwórz</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="901"/>
+        <location filename="../mainwindow.ui" line="902"/>
         <source>Save</source>
         <translation>Zapisz</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="913"/>
+        <location filename="../mainwindow.ui" line="914"/>
         <source>New</source>
         <translation>Nowy</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="921"/>
+        <location filename="../mainwindow.ui" line="922"/>
         <source>Save as...</source>
         <translation>Zapisz jako</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="924"/>
+        <location filename="../mainwindow.ui" line="925"/>
         <source>Ctrl+Shift+S</source>
         <translation>Ctrl+Shift+S</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="933"/>
+        <location filename="../mainwindow.ui" line="934"/>
         <source>U/G</source>
         <translation>Podziemia</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="936"/>
-        <location filename="../mainwindow.cpp" line="746"/>
+        <location filename="../mainwindow.ui" line="937"/>
+        <location filename="../mainwindow.cpp" line="764"/>
         <source>View underground</source>
         <translation>Pokaż podziemia</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="951"/>
+        <location filename="../mainwindow.ui" line="952"/>
         <source>Pass</source>
         <translation>Przejścia</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="963"/>
+        <location filename="../mainwindow.ui" line="964"/>
         <source>Cut</source>
         <translation>Wytnij</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="975"/>
+        <location filename="../mainwindow.ui" line="976"/>
         <source>Copy</source>
         <translation>Kopiuj</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="987"/>
+        <location filename="../mainwindow.ui" line="988"/>
         <source>Paste</source>
         <translation>Wklej</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="999"/>
+        <location filename="../mainwindow.ui" line="1000"/>
         <source>Fill</source>
         <translation>Wypełnij</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1002"/>
+        <location filename="../mainwindow.ui" line="1003"/>
         <source>Fills the selection with obstacles</source>
         <translation>Wypełnia zaznaczony obszar przeszkodami</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1017"/>
+        <location filename="../mainwindow.ui" line="1018"/>
         <source>Grid</source>
         <translation>Siatka</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1028"/>
+        <location filename="../mainwindow.ui" line="1029"/>
         <source>General</source>
         <translation>Ogólne</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1031"/>
+        <location filename="../mainwindow.ui" line="1032"/>
         <source>Map title and description</source>
         <translation>Nazwa i opis mapy</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1042"/>
+        <location filename="../mainwindow.ui" line="1043"/>
         <source>Players settings</source>
         <translation>Ustawienia graczy</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1057"/>
-        <location filename="../mainwindow.ui" line="1060"/>
+        <location filename="../mainwindow.ui" line="1058"/>
+        <location filename="../mainwindow.ui" line="1061"/>
         <source>Undo</source>
         <translation>Cofnij</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1078"/>
+        <location filename="../mainwindow.ui" line="1079"/>
         <source>Redo</source>
         <translation>Przywróć</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1096"/>
+        <location filename="../mainwindow.ui" line="1097"/>
         <source>Erase</source>
         <translation>Wymaż</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1107"/>
+        <location filename="../mainwindow.ui" line="1108"/>
         <source>Neutral</source>
         <translation>Neutralny</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1115"/>
+        <location filename="../mainwindow.ui" line="1116"/>
         <source>Validate</source>
         <translation>Sprawdź</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1126"/>
+        <location filename="../mainwindow.ui" line="1127"/>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <location filename="../mainwindow.cpp" line="1191"/>
         <source>Update appearance</source>
         <translation>Aktualizuj wygląd</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1137"/>
+        <location filename="../mainwindow.ui" line="1138"/>
         <source>Recreate obstacles</source>
         <translation>Powtórnie stwórz przeszkody</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1148"/>
+        <location filename="../mainwindow.ui" line="1149"/>
         <source>Player 1</source>
         <translation>Gracz 1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1159"/>
+        <location filename="../mainwindow.ui" line="1160"/>
         <source>Player 2</source>
         <translation>Gracz 2</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1170"/>
+        <location filename="../mainwindow.ui" line="1171"/>
         <source>Player 3</source>
         <translation>Gracz 3</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1181"/>
+        <location filename="../mainwindow.ui" line="1182"/>
         <source>Player 4</source>
         <translation>Gracz 4</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1192"/>
+        <location filename="../mainwindow.ui" line="1193"/>
         <source>Player 5</source>
         <translation>Gracz 5</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1203"/>
+        <location filename="../mainwindow.ui" line="1204"/>
         <source>Player 6</source>
         <translation>Gracz 6</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1214"/>
+        <location filename="../mainwindow.ui" line="1215"/>
         <source>Player 7</source>
         <translation>Gracz 7</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1225"/>
+        <location filename="../mainwindow.ui" line="1226"/>
         <source>Player 8</source>
         <translation>Gracz 8</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1233"/>
+        <location filename="../mainwindow.ui" line="1234"/>
         <source>Export as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="346"/>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Confirmation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Unsaved changes will be lost, are you sure?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Cannot open map from this folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="370"/>
         <source>Open map</source>
         <translation>Otwórz mapę</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="348"/>
+        <location filename="../mainwindow.cpp" line="372"/>
         <source>All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m)</source>
         <translation>Wszystkie wspierane mapy (*.vmap *.h3m);;Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>Save map</source>
         <translation>Zapisz mapę</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>VCMI maps (*.vmap)</source>
         <translation>Mapy VCMI (*.vmap)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="582"/>
+        <location filename="../mainwindow.cpp" line="606"/>
         <source>Type</source>
         <translation>Typ</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="750"/>
+        <location filename="../mainwindow.cpp" line="768"/>
         <source>View surface</source>
         <translation>Pokaż powierzchnię</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <source>No objects selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <source>This operation is irreversible. Do you want to continue?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1191"/>
+        <source>Errors occured. %1 objects were not updated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1231"/>
+        <source>Save to image</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MapSettings</name>
@@ -327,162 +370,220 @@
         <translation>Ustawienia mapy</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="40"/>
+        <location filename="../mapsettings.ui" line="33"/>
         <source>General</source>
         <translation>Ogólne</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="46"/>
+        <location filename="../mapsettings.ui" line="39"/>
         <source>Map name</source>
         <translation>Nazwa mapy</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="56"/>
+        <location filename="../mapsettings.ui" line="49"/>
         <source>Map description</source>
         <translation>Opis mapy</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="66"/>
+        <location filename="../mapsettings.ui" line="83"/>
+        <source>Limit maximum heroes level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="92"/>
         <source>Difficulty</source>
         <translation>Poziom trudności</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="111"/>
+        <location filename="../mapsettings.ui" line="137"/>
+        <source>Mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="143"/>
+        <source>Mandatory mods for playing this map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="157"/>
+        <source>Mod name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="162"/>
+        <source>Version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="172"/>
+        <source>Automatic assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="179"/>
+        <source>Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="182"/>
+        <source>Map objects mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="192"/>
+        <source>Set all mods having a game content as mandatory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="195"/>
+        <source>Full content mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="208"/>
         <source>Events</source>
         <translation>Zdarzenia</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="121"/>
+        <location filename="../mapsettings.ui" line="218"/>
         <source>Victory</source>
         <translation>Zwycięstwo</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="135"/>
+        <location filename="../mapsettings.ui" line="232"/>
         <source>Victory message</source>
         <translation>Komunikat zwycięstwa</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="150"/>
+        <location filename="../mapsettings.ui" line="247"/>
         <source>Only for human players</source>
         <translation>Dotyczy tylko graczy ludzkich</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="157"/>
+        <location filename="../mapsettings.ui" line="254"/>
         <source>Allow standard victory</source>
         <translation>Także standardowy warunek zwycięstwa</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="170"/>
-        <location filename="../mapsettings.ui" line="218"/>
+        <location filename="../mapsettings.ui" line="267"/>
+        <location filename="../mapsettings.ui" line="315"/>
         <source>Parameters</source>
         <translation>Parametry</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="186"/>
+        <location filename="../mapsettings.ui" line="283"/>
         <source>Loss</source>
         <translation>Porażka</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="195"/>
+        <location filename="../mapsettings.ui" line="292"/>
         <source>7 days without town</source>
         <translation>7 dni bez miasta</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="202"/>
+        <location filename="../mapsettings.ui" line="299"/>
         <source>Defeat message</source>
         <translation>Komunikat o porażce</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="235"/>
+        <location filename="../mapsettings.ui" line="332"/>
         <source>Abilities</source>
         <translation>Umiejętności</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="261"/>
+        <location filename="../mapsettings.ui" line="358"/>
         <source>Spells</source>
         <translation>Zaklęcia</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="287"/>
+        <location filename="../mapsettings.ui" line="384"/>
         <source>Artifacts</source>
         <translation>Artefakty</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="313"/>
+        <location filename="../mapsettings.ui" line="410"/>
         <source>Heroes</source>
         <translation>Bohaterowie</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="29"/>
+        <location filename="../mapsettings.ui" line="439"/>
         <source>Ok</source>
         <translation>Ok</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="163"/>
+        <location filename="../mapsettings.cpp" line="174"/>
         <source>No special victory</source>
         <translation type="unfinished">Bez specjalnych warunków zwycięstwa</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="164"/>
+        <location filename="../mapsettings.cpp" line="175"/>
         <source>Capture artifact</source>
         <translation>Zdobądź artefakt</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="165"/>
+        <location filename="../mapsettings.cpp" line="176"/>
         <source>Hire creatures</source>
         <translation type="unfinished">Zdobądź stworzenia</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="166"/>
+        <location filename="../mapsettings.cpp" line="177"/>
         <source>Accumulate resources</source>
         <translation type="unfinished">Zbierz zasoby</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="167"/>
+        <location filename="../mapsettings.cpp" line="178"/>
         <source>Construct building</source>
         <translation type="unfinished">Zbuduj budynek</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="168"/>
+        <location filename="../mapsettings.cpp" line="179"/>
         <source>Capture town</source>
         <translation type="unfinished">Zdobądź miasto</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="169"/>
+        <location filename="../mapsettings.cpp" line="180"/>
         <source>Defeat hero</source>
         <translation type="unfinished">Pokonaj bohatera</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="170"/>
+        <location filename="../mapsettings.cpp" line="181"/>
         <source>Transport artifact</source>
         <translation type="unfinished">Przenieś artefakt</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="173"/>
+        <location filename="../mapsettings.cpp" line="184"/>
         <source>No special loss</source>
         <translation type="unfinished">Bez specjalnych warunków porażki</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="174"/>
+        <location filename="../mapsettings.cpp" line="185"/>
         <source>Lose castle</source>
         <translation type="unfinished">Utrata miasta</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="175"/>
+        <location filename="../mapsettings.cpp" line="186"/>
         <source>Lose hero</source>
         <translation type="unfinished">Utrata bohatera</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="176"/>
+        <location filename="../mapsettings.cpp" line="187"/>
         <source>Time expired</source>
         <translation type="unfinished">Upłynięcie czasu</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="177"/>
+        <location filename="../mapsettings.cpp" line="188"/>
         <source>Days without town</source>
         <translation type="unfinished">Dni bez miasta</translation>
     </message>
 </context>
+<context>
+    <name>MapView</name>
+    <message>
+        <location filename="../mapview.cpp" line="471"/>
+        <source>Can&apos;t place object</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>MessageWidget</name>
     <message>
@@ -494,47 +595,51 @@
 <context>
     <name>PlayerParams</name>
     <message>
-        <location filename="../playerparams.ui" line="57"/>
         <source>No team</source>
-        <translation>Brak drużyny</translation>
+        <translation type="vanished">Brak drużyny</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="65"/>
+        <location filename="../playerparams.ui" line="118"/>
         <source>Human/CPU</source>
         <translation>Człowiek/Komputer</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="72"/>
+        <location filename="../playerparams.ui" line="105"/>
         <source>CPU only</source>
         <translation>Tylko komputer</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="79"/>
+        <location filename="../playerparams.ui" line="92"/>
         <source>Team</source>
         <translation>Drużyna</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="86"/>
+        <location filename="../playerparams.ui" line="162"/>
         <source>Main town</source>
         <translation>Główne miasto</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="93"/>
+        <location filename="../playerparams.ui" line="179"/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../playerparams.ui" line="85"/>
         <source>Random faction</source>
         <translation>Losowe miasto</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="100"/>
+        <location filename="../playerparams.ui" line="72"/>
         <source>Generate hero at main</source>
         <translation>Generuj bohatera w głównym</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="108"/>
+        <location filename="../playerparams.ui" line="154"/>
         <source>(default)</source>
         <translation>(domyślny)</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="86"/>
+        <location filename="../playerparams.cpp" line="109"/>
         <source>Player ID: %1</source>
         <translation>ID gracza: %1</translation>
     </message>
@@ -552,7 +657,12 @@
         <translation>Gracze</translation>
     </message>
     <message>
-        <location filename="../playersettings.ui" line="112"/>
+        <location filename="../playersettings.ui" line="74"/>
+        <source>1</source>
+        <translation type="unfinished">1</translation>
+    </message>
+    <message>
+        <location filename="../playersettings.ui" line="117"/>
         <source>Ok</source>
         <translation>Ok</translation>
     </message>
@@ -608,6 +718,11 @@
         <source>Map is not loaded</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="70"/>
+        <source>No factions allowed for player %1</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="73"/>
         <source>No players allowed to play this map</source>
@@ -693,6 +808,11 @@
         <source>Map description is not specified</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="175"/>
+        <source>Map contains object from mod &quot;%1&quot;, but doesn&apos;t require it</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="181"/>
         <source>Exception occurs during validation: %1</source>
@@ -762,114 +882,139 @@
         <translation>Gracze</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="736"/>
+        <location filename="../windownewmap.ui" line="724"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="268"/>
+        <location filename="../windownewmap.ui" line="349"/>
         <source>Human/Computer</source>
         <translation>Człowiek/Komputer</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="288"/>
-        <location filename="../windownewmap.ui" line="357"/>
-        <location filename="../windownewmap.ui" line="455"/>
-        <location filename="../windownewmap.ui" line="596"/>
+        <location filename="../windownewmap.ui" line="221"/>
+        <location filename="../windownewmap.ui" line="289"/>
+        <location filename="../windownewmap.ui" line="443"/>
+        <location filename="../windownewmap.ui" line="584"/>
         <source>Random</source>
         <translation>Losowo</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="336"/>
+        <location filename="../windownewmap.ui" line="269"/>
         <source>Computer only</source>
         <translation>Tylko komputer</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="428"/>
+        <location filename="../windownewmap.ui" line="380"/>
+        <source>Human teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="399"/>
+        <source>Computer teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="416"/>
         <source>Monster strength</source>
         <translation>Siła potworów</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="477"/>
+        <location filename="../windownewmap.ui" line="465"/>
         <source>Weak</source>
         <translation>Słaba</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="496"/>
-        <location filename="../windownewmap.ui" line="637"/>
+        <location filename="../windownewmap.ui" line="484"/>
+        <location filename="../windownewmap.ui" line="625"/>
         <source>Normal</source>
         <translation>Normalna</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="515"/>
+        <location filename="../windownewmap.ui" line="503"/>
         <source>Strong</source>
         <translation>Silna</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="569"/>
+        <location filename="../windownewmap.ui" line="557"/>
         <source>Water content</source>
         <translation>Powierzchnia wody</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="618"/>
+        <location filename="../windownewmap.ui" line="606"/>
         <source>None</source>
         <translation>Brak</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="656"/>
+        <location filename="../windownewmap.ui" line="644"/>
         <source>Islands</source>
         <translation>Wyspy</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="701"/>
+        <location filename="../windownewmap.ui" line="689"/>
         <source>Template</source>
         <translation>Szablon</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="749"/>
+        <location filename="../windownewmap.ui" line="737"/>
         <source>Custom seed</source>
         <translation>Własny seed</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="763"/>
+        <location filename="../windownewmap.ui" line="751"/>
         <source>Generate random map</source>
         <translation>Generuj mapę losową</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="797"/>
+        <location filename="../windownewmap.ui" line="785"/>
         <source>Ok</source>
         <translation>Ok</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="816"/>
+        <location filename="../windownewmap.ui" line="804"/>
         <source>Cancel</source>
         <translation>Anuluj</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template for parameters scecified. Random map cannot be generated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="291"/>
+        <source>RMG failure</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>
     <message>
-        <location filename="../mainwindow.cpp" line="98"/>
+        <location filename="../mainwindow.cpp" line="101"/>
         <source>Filepath of the map to open.</source>
         <translation>Lokalizacja pliku mapy do otworzenia.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="101"/>
+        <location filename="../mainwindow.cpp" line="104"/>
         <source>Extract original H3 archives into a separate folder.</source>
         <translation>Wyodrębnij oryginalne archiwa H3 do osobnego folderu.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="102"/>
+        <location filename="../mainwindow.cpp" line="105"/>
         <source>From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG&apos;s.</source>
         <translation>Z wyodrębnionego archiwum, rozdzielenie TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 i Un44 do poszczególnych plików PNG.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="103"/>
+        <location filename="../mainwindow.cpp" line="106"/>
         <source>From an extracted archive, Converts single Images (found in Images folder) from .pcx to png.</source>
         <translation>Z wyodrębnionego archiwum, konwersja pojedynczych obrazków (znalezionych w folderze Images) z .pcx do .png.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="104"/>
+        <location filename="../mainwindow.cpp" line="107"/>
         <source>Delete original files, for the ones splitted / converted.</source>
         <translation>Usuń oryginalne pliki, dla już rozdzielonych / skonwertowanych.</translation>
     </message>

+ 272 - 127
mapeditor/translation/russian.ts

@@ -40,284 +40,327 @@
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="68"/>
+        <location filename="../mainwindow.ui" line="69"/>
         <source>Map</source>
         <translation>Карта</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="78"/>
+        <location filename="../mainwindow.ui" line="79"/>
         <source>Edit</source>
         <translation>Правка</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="89"/>
+        <location filename="../mainwindow.ui" line="90"/>
         <source>View</source>
         <translation>Вид</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="97"/>
+        <location filename="../mainwindow.ui" line="98"/>
         <source>Player</source>
         <translation>Игрок</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="117"/>
+        <location filename="../mainwindow.ui" line="118"/>
         <source>Toolbar</source>
         <translation>Панель инструментов</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="163"/>
+        <location filename="../mainwindow.ui" line="164"/>
         <source>Minimap</source>
         <translation>Мини-карта</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="239"/>
+        <location filename="../mainwindow.ui" line="240"/>
         <source>Map Objects View</source>
         <translation>Объекты карты</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="283"/>
+        <location filename="../mainwindow.ui" line="284"/>
         <source>Browser</source>
         <translation>Навигатор</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="361"/>
+        <location filename="../mainwindow.ui" line="362"/>
         <source>Inspector</source>
         <translation>Инспектор</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="400"/>
+        <location filename="../mainwindow.ui" line="401"/>
         <source>Property</source>
         <translation>Свойство</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="405"/>
+        <location filename="../mainwindow.ui" line="406"/>
         <source>Value</source>
         <translation>Значение</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="432"/>
+        <location filename="../mainwindow.ui" line="433"/>
         <source>Terrains View</source>
         <translation>Кисти земель</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="484"/>
+        <location filename="../mainwindow.ui" line="485"/>
         <source>Brush</source>
         <translation>Кисть</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="763"/>
+        <location filename="../mainwindow.ui" line="764"/>
         <source>Terrains</source>
         <translation>Земли</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="806"/>
+        <location filename="../mainwindow.ui" line="807"/>
         <source>Roads</source>
         <translation>Дороги</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="842"/>
+        <location filename="../mainwindow.ui" line="843"/>
         <source>Rivers</source>
         <translation>Реки</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="889"/>
+        <location filename="../mainwindow.ui" line="890"/>
         <source>Open</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="901"/>
+        <location filename="../mainwindow.ui" line="902"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="913"/>
+        <location filename="../mainwindow.ui" line="914"/>
         <source>New</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="921"/>
+        <location filename="../mainwindow.ui" line="922"/>
         <source>Save as...</source>
         <translation>Сохранить как</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="924"/>
+        <location filename="../mainwindow.ui" line="925"/>
         <source>Ctrl+Shift+S</source>
         <translation>Ctrl+Shift+S</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="933"/>
+        <location filename="../mainwindow.ui" line="934"/>
         <source>U/G</source>
         <translation>П/Н</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="936"/>
-        <location filename="../mainwindow.cpp" line="746"/>
+        <location filename="../mainwindow.ui" line="937"/>
+        <location filename="../mainwindow.cpp" line="764"/>
         <source>View underground</source>
         <translation>Вид на подземелье</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="951"/>
+        <location filename="../mainwindow.ui" line="952"/>
         <source>Pass</source>
         <translation>Проходимость</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="963"/>
+        <location filename="../mainwindow.ui" line="964"/>
         <source>Cut</source>
         <translation>Вырезать</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="975"/>
+        <location filename="../mainwindow.ui" line="976"/>
         <source>Copy</source>
         <translation>Копировать</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="987"/>
+        <location filename="../mainwindow.ui" line="988"/>
         <source>Paste</source>
         <translation>Вставить</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="999"/>
+        <location filename="../mainwindow.ui" line="1000"/>
         <source>Fill</source>
         <translation>Заливка</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1002"/>
+        <location filename="../mainwindow.ui" line="1003"/>
         <source>Fills the selection with obstacles</source>
         <translation>Заливает выбранное препятствиями</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1017"/>
+        <location filename="../mainwindow.ui" line="1018"/>
         <source>Grid</source>
         <translation>Сетка</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1028"/>
+        <location filename="../mainwindow.ui" line="1029"/>
         <source>General</source>
         <translation>Общее</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1031"/>
+        <location filename="../mainwindow.ui" line="1032"/>
         <source>Map title and description</source>
         <translation>Название и описание карты</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1042"/>
+        <location filename="../mainwindow.ui" line="1043"/>
         <source>Players settings</source>
         <translation>Настройки игроков</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1057"/>
-        <location filename="../mainwindow.ui" line="1060"/>
+        <location filename="../mainwindow.ui" line="1058"/>
+        <location filename="../mainwindow.ui" line="1061"/>
         <source>Undo</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1078"/>
+        <location filename="../mainwindow.ui" line="1079"/>
         <source>Redo</source>
         <translation>Повторить</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1096"/>
+        <location filename="../mainwindow.ui" line="1097"/>
         <source>Erase</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1107"/>
+        <location filename="../mainwindow.ui" line="1108"/>
         <source>Neutral</source>
         <translation>Нейтральный</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1115"/>
+        <location filename="../mainwindow.ui" line="1116"/>
         <source>Validate</source>
         <translation>Проверить</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1126"/>
+        <location filename="../mainwindow.ui" line="1127"/>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <location filename="../mainwindow.cpp" line="1191"/>
         <source>Update appearance</source>
         <translation>Обновить вид</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1137"/>
+        <location filename="../mainwindow.ui" line="1138"/>
         <source>Recreate obstacles</source>
         <translation>Обновить препятствия</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1148"/>
+        <location filename="../mainwindow.ui" line="1149"/>
         <source>Player 1</source>
         <translation>Игрок 1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1159"/>
+        <location filename="../mainwindow.ui" line="1160"/>
         <source>Player 2</source>
         <translation>Игрок 2</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1170"/>
+        <location filename="../mainwindow.ui" line="1171"/>
         <source>Player 3</source>
         <translation>Игрок 3</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1181"/>
+        <location filename="../mainwindow.ui" line="1182"/>
         <source>Player 4</source>
         <translation>Игрок 4</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1192"/>
+        <location filename="../mainwindow.ui" line="1193"/>
         <source>Player 5</source>
         <translation>Игрок 5</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1203"/>
+        <location filename="../mainwindow.ui" line="1204"/>
         <source>Player 6</source>
         <translation>Игрок 6</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1214"/>
+        <location filename="../mainwindow.ui" line="1215"/>
         <source>Player 7</source>
         <translation>Игрок 7</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1225"/>
+        <location filename="../mainwindow.ui" line="1226"/>
         <source>Player 8</source>
         <translation>Игрок 8</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1233"/>
+        <location filename="../mainwindow.ui" line="1234"/>
         <source>Export as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="346"/>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Confirmation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Unsaved changes will be lost, are you sure?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Cannot open map from this folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="370"/>
         <source>Open map</source>
         <translation>Открыть карту</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="348"/>
+        <location filename="../mainwindow.cpp" line="372"/>
         <source>All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m)</source>
         <translation>Все поддерживаемые карты  (*.vmap *.h3m);;Карты VCMI (*.vmap);;Карты Героев III (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>Save map</source>
         <translation>Сохранить карту</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>VCMI maps (*.vmap)</source>
         <translation>Карты VCMI (*.vmap)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="582"/>
+        <location filename="../mainwindow.cpp" line="606"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="750"/>
+        <location filename="../mainwindow.cpp" line="768"/>
         <source>View surface</source>
         <translation>Вид на поверхность</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <source>No objects selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <source>This operation is irreversible. Do you want to continue?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1191"/>
+        <source>Errors occured. %1 objects were not updated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1231"/>
+        <source>Save to image</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MapSettings</name>
@@ -327,162 +370,220 @@
         <translation>Настройки карты</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="40"/>
+        <location filename="../mapsettings.ui" line="33"/>
         <source>General</source>
         <translation>Общее</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="46"/>
+        <location filename="../mapsettings.ui" line="39"/>
         <source>Map name</source>
         <translation>Название карты</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="56"/>
+        <location filename="../mapsettings.ui" line="49"/>
         <source>Map description</source>
         <translation>Описание карты</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="66"/>
+        <location filename="../mapsettings.ui" line="83"/>
+        <source>Limit maximum heroes level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="92"/>
         <source>Difficulty</source>
         <translation>Сложность</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="111"/>
+        <location filename="../mapsettings.ui" line="137"/>
+        <source>Mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="143"/>
+        <source>Mandatory mods for playing this map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="157"/>
+        <source>Mod name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="162"/>
+        <source>Version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="172"/>
+        <source>Automatic assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="179"/>
+        <source>Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="182"/>
+        <source>Map objects mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="192"/>
+        <source>Set all mods having a game content as mandatory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="195"/>
+        <source>Full content mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="208"/>
         <source>Events</source>
         <translation>События</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="121"/>
+        <location filename="../mapsettings.ui" line="218"/>
         <source>Victory</source>
         <translation>Победа</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="135"/>
+        <location filename="../mapsettings.ui" line="232"/>
         <source>Victory message</source>
         <translation>Сообщение о победе</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="150"/>
+        <location filename="../mapsettings.ui" line="247"/>
         <source>Only for human players</source>
         <translation>Только для игроков-людей</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="157"/>
+        <location filename="../mapsettings.ui" line="254"/>
         <source>Allow standard victory</source>
         <translation>Разрешить стандартную победу</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="170"/>
-        <location filename="../mapsettings.ui" line="218"/>
+        <location filename="../mapsettings.ui" line="267"/>
+        <location filename="../mapsettings.ui" line="315"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="186"/>
+        <location filename="../mapsettings.ui" line="283"/>
         <source>Loss</source>
         <translation>Поражение</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="195"/>
+        <location filename="../mapsettings.ui" line="292"/>
         <source>7 days without town</source>
         <translation>7 дней без городов</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="202"/>
+        <location filename="../mapsettings.ui" line="299"/>
         <source>Defeat message</source>
         <translation>Сообщение о поражении</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="235"/>
+        <location filename="../mapsettings.ui" line="332"/>
         <source>Abilities</source>
         <translation>Способности</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="261"/>
+        <location filename="../mapsettings.ui" line="358"/>
         <source>Spells</source>
         <translation>Заклинания</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="287"/>
+        <location filename="../mapsettings.ui" line="384"/>
         <source>Artifacts</source>
         <translation>Артефакты</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="313"/>
+        <location filename="../mapsettings.ui" line="410"/>
         <source>Heroes</source>
         <translation>Герои</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="29"/>
+        <location filename="../mapsettings.ui" line="439"/>
         <source>Ok</source>
         <translation>ОК</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="163"/>
+        <location filename="../mapsettings.cpp" line="174"/>
         <source>No special victory</source>
         <translation>Нет специальной победы</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="164"/>
+        <location filename="../mapsettings.cpp" line="175"/>
         <source>Capture artifact</source>
         <translation>Взять артефакт</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="165"/>
+        <location filename="../mapsettings.cpp" line="176"/>
         <source>Hire creatures</source>
         <translation>Нанять существ</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="166"/>
+        <location filename="../mapsettings.cpp" line="177"/>
         <source>Accumulate resources</source>
         <translation>Собрать ресурсы</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="167"/>
+        <location filename="../mapsettings.cpp" line="178"/>
         <source>Construct building</source>
         <translation>Построить</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="168"/>
+        <location filename="../mapsettings.cpp" line="179"/>
         <source>Capture town</source>
         <translation>Захватить город</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="169"/>
+        <location filename="../mapsettings.cpp" line="180"/>
         <source>Defeat hero</source>
         <translation>Победить героя</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="170"/>
+        <location filename="../mapsettings.cpp" line="181"/>
         <source>Transport artifact</source>
         <translation>Переместить артефакт</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="173"/>
+        <location filename="../mapsettings.cpp" line="184"/>
         <source>No special loss</source>
         <translation>Нет специального поражения</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="174"/>
+        <location filename="../mapsettings.cpp" line="185"/>
         <source>Lose castle</source>
         <translation>Потерять город</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="175"/>
+        <location filename="../mapsettings.cpp" line="186"/>
         <source>Lose hero</source>
         <translation>Потерять героя</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="176"/>
+        <location filename="../mapsettings.cpp" line="187"/>
         <source>Time expired</source>
         <translation>Не успеть ко времени</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="177"/>
+        <location filename="../mapsettings.cpp" line="188"/>
         <source>Days without town</source>
         <translation>Провести без городов</translation>
     </message>
 </context>
+<context>
+    <name>MapView</name>
+    <message>
+        <location filename="../mapview.cpp" line="471"/>
+        <source>Can&apos;t place object</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>MessageWidget</name>
     <message>
@@ -494,47 +595,51 @@
 <context>
     <name>PlayerParams</name>
     <message>
-        <location filename="../playerparams.ui" line="57"/>
         <source>No team</source>
-        <translation>Без команды</translation>
+        <translation type="vanished">Без команды</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="65"/>
+        <location filename="../playerparams.ui" line="118"/>
         <source>Human/CPU</source>
         <translation>Человек/ИИ</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="72"/>
+        <location filename="../playerparams.ui" line="105"/>
         <source>CPU only</source>
         <translation>Только ИИ</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="79"/>
+        <location filename="../playerparams.ui" line="92"/>
         <source>Team</source>
         <translation>Команда</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="86"/>
+        <location filename="../playerparams.ui" line="162"/>
         <source>Main town</source>
         <translation>Главный город</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="93"/>
+        <location filename="../playerparams.ui" line="179"/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../playerparams.ui" line="85"/>
         <source>Random faction</source>
         <translation>Случайная фракция</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="100"/>
+        <location filename="../playerparams.ui" line="72"/>
         <source>Generate hero at main</source>
         <translation>Создать героя</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="108"/>
+        <location filename="../playerparams.ui" line="154"/>
         <source>(default)</source>
         <translation>(по умолчанию)</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="86"/>
+        <location filename="../playerparams.cpp" line="109"/>
         <source>Player ID: %1</source>
         <translation>Игрок: %1</translation>
     </message>
@@ -552,7 +657,12 @@
         <translation>Игрок</translation>
     </message>
     <message>
-        <location filename="../playersettings.ui" line="112"/>
+        <location filename="../playersettings.ui" line="74"/>
+        <source>1</source>
+        <translation type="unfinished">1</translation>
+    </message>
+    <message>
+        <location filename="../playersettings.ui" line="117"/>
         <source>Ok</source>
         <translation>ОК</translation>
     </message>
@@ -608,6 +718,11 @@
         <source>Map is not loaded</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="70"/>
+        <source>No factions allowed for player %1</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="73"/>
         <source>No players allowed to play this map</source>
@@ -693,6 +808,11 @@
         <source>Map description is not specified</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="175"/>
+        <source>Map contains object from mod &quot;%1&quot;, but doesn&apos;t require it</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="181"/>
         <source>Exception occurs during validation: %1</source>
@@ -762,114 +882,139 @@
         <translation>Игроки</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="736"/>
+        <location filename="../windownewmap.ui" line="724"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="268"/>
+        <location filename="../windownewmap.ui" line="349"/>
         <source>Human/Computer</source>
         <translation>Человек/ИИ</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="288"/>
-        <location filename="../windownewmap.ui" line="357"/>
-        <location filename="../windownewmap.ui" line="455"/>
-        <location filename="../windownewmap.ui" line="596"/>
+        <location filename="../windownewmap.ui" line="221"/>
+        <location filename="../windownewmap.ui" line="289"/>
+        <location filename="../windownewmap.ui" line="443"/>
+        <location filename="../windownewmap.ui" line="584"/>
         <source>Random</source>
         <translation>Случайно</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="336"/>
+        <location filename="../windownewmap.ui" line="269"/>
         <source>Computer only</source>
         <translation>Только ИИ</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="428"/>
+        <location filename="../windownewmap.ui" line="380"/>
+        <source>Human teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="399"/>
+        <source>Computer teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="416"/>
         <source>Monster strength</source>
         <translation>Сила монстров</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="477"/>
+        <location filename="../windownewmap.ui" line="465"/>
         <source>Weak</source>
         <translation>Слабо</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="496"/>
-        <location filename="../windownewmap.ui" line="637"/>
+        <location filename="../windownewmap.ui" line="484"/>
+        <location filename="../windownewmap.ui" line="625"/>
         <source>Normal</source>
         <translation>Нормально</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="515"/>
+        <location filename="../windownewmap.ui" line="503"/>
         <source>Strong</source>
         <translation>Сильно</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="569"/>
+        <location filename="../windownewmap.ui" line="557"/>
         <source>Water content</source>
         <translation>Вода</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="618"/>
+        <location filename="../windownewmap.ui" line="606"/>
         <source>None</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="656"/>
+        <location filename="../windownewmap.ui" line="644"/>
         <source>Islands</source>
         <translation>Острова</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="701"/>
+        <location filename="../windownewmap.ui" line="689"/>
         <source>Template</source>
         <translation>Шаблон</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="749"/>
+        <location filename="../windownewmap.ui" line="737"/>
         <source>Custom seed</source>
         <translation>Пользовательское зерно</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="763"/>
+        <location filename="../windownewmap.ui" line="751"/>
         <source>Generate random map</source>
         <translation>Сгенерировать случайную карту</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="797"/>
+        <location filename="../windownewmap.ui" line="785"/>
         <source>Ok</source>
         <translation>ОК</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="816"/>
+        <location filename="../windownewmap.ui" line="804"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template for parameters scecified. Random map cannot be generated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="291"/>
+        <source>RMG failure</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>
     <message>
-        <location filename="../mainwindow.cpp" line="98"/>
+        <location filename="../mainwindow.cpp" line="101"/>
         <source>Filepath of the map to open.</source>
         <translation>Путь к файлу карты для открытия.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="101"/>
+        <location filename="../mainwindow.cpp" line="104"/>
         <source>Extract original H3 archives into a separate folder.</source>
         <translation>Распаковать архивы оригинальных Героев III в отдельную папку.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="102"/>
+        <location filename="../mainwindow.cpp" line="105"/>
         <source>From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG&apos;s.</source>
         <translation>Разделение в распакованном архиве TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 и Un44 на отдельные PNG.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="103"/>
+        <location filename="../mainwindow.cpp" line="106"/>
         <source>From an extracted archive, Converts single Images (found in Images folder) from .pcx to png.</source>
         <translation>Преобразование в расспакованном архиве изображений .pcx в .png.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="104"/>
+        <location filename="../mainwindow.cpp" line="107"/>
         <source>Delete original files, for the ones splitted / converted.</source>
         <translation>Удалить оригиналы для преобразованных файлов.</translation>
     </message>

+ 272 - 129
mapeditor/translation/spanish.ts

@@ -27,8 +27,6 @@
         <translation>Generando mapa</translation>
     </message>
 </context>
-
-
 <context>
     <name>MainWindow</name>
     <message>
@@ -42,284 +40,327 @@
         <translation>Archivo</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="68"/>
+        <location filename="../mainwindow.ui" line="69"/>
         <source>Map</source>
         <translation>Mapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="78"/>
+        <location filename="../mainwindow.ui" line="79"/>
         <source>Edit</source>
         <translation>Editar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="89"/>
+        <location filename="../mainwindow.ui" line="90"/>
         <source>View</source>
         <translation>Ver</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="97"/>
+        <location filename="../mainwindow.ui" line="98"/>
         <source>Player</source>
         <translation>Jugador</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="117"/>
+        <location filename="../mainwindow.ui" line="118"/>
         <source>Toolbar</source>
         <translation>Barra de herramientas</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="163"/>
+        <location filename="../mainwindow.ui" line="164"/>
         <source>Minimap</source>
         <translation>Miniatura del mapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="239"/>
+        <location filename="../mainwindow.ui" line="240"/>
         <source>Map Objects View</source>
         <translation>Vista de Objetos del Mapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="283"/>
+        <location filename="../mainwindow.ui" line="284"/>
         <source>Browser</source>
         <translation>Navegador</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="361"/>
+        <location filename="../mainwindow.ui" line="362"/>
         <source>Inspector</source>
         <translation>Inspector</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="400"/>
+        <location filename="../mainwindow.ui" line="401"/>
         <source>Property</source>
         <translation>Propiedad</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="405"/>
+        <location filename="../mainwindow.ui" line="406"/>
         <source>Value</source>
         <translation>Valor</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="432"/>
+        <location filename="../mainwindow.ui" line="433"/>
         <source>Terrains View</source>
         <translation>Vista de Terrenos</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="484"/>
+        <location filename="../mainwindow.ui" line="485"/>
         <source>Brush</source>
         <translation>Pincel</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="763"/>
+        <location filename="../mainwindow.ui" line="764"/>
         <source>Terrains</source>
         <translation>Terrenos</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="806"/>
+        <location filename="../mainwindow.ui" line="807"/>
         <source>Roads</source>
         <translation>Caminos</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="842"/>
+        <location filename="../mainwindow.ui" line="843"/>
         <source>Rivers</source>
         <translation>Ríos</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="889"/>
+        <location filename="../mainwindow.ui" line="890"/>
         <source>Open</source>
         <translation>Abrir</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="901"/>
+        <location filename="../mainwindow.ui" line="902"/>
         <source>Save</source>
         <translation>Guardar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="913"/>
+        <location filename="../mainwindow.ui" line="914"/>
         <source>New</source>
         <translation>Nuevo</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="921"/>
+        <location filename="../mainwindow.ui" line="922"/>
         <source>Save as...</source>
         <translation>Guardar como...</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="924"/>
+        <location filename="../mainwindow.ui" line="925"/>
         <source>Ctrl+Shift+S</source>
         <translation>Ctrl+Shift+S</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="933"/>
+        <location filename="../mainwindow.ui" line="934"/>
         <source>U/G</source>
         <translation>Subterráneo/Superficie</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="936"/>
-        <location filename="../mainwindow.cpp" line="746"/>
+        <location filename="../mainwindow.ui" line="937"/>
+        <location filename="../mainwindow.cpp" line="764"/>
         <source>View underground</source>
         <translation>Ver subterráneo</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="951"/>
+        <location filename="../mainwindow.ui" line="952"/>
         <source>Pass</source>
         <translation>Pasar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="963"/>
+        <location filename="../mainwindow.ui" line="964"/>
         <source>Cut</source>
         <translation>Cortar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="975"/>
+        <location filename="../mainwindow.ui" line="976"/>
         <source>Copy</source>
         <translation>Copiar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="987"/>
+        <location filename="../mainwindow.ui" line="988"/>
         <source>Paste</source>
         <translation>Pegar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="999"/>
+        <location filename="../mainwindow.ui" line="1000"/>
         <source>Fill</source>
         <translation>Rellenar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1002"/>
+        <location filename="../mainwindow.ui" line="1003"/>
         <source>Fills the selection with obstacles</source>
         <translation>Rellena la selección con obstáculos</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1017"/>
+        <location filename="../mainwindow.ui" line="1018"/>
         <source>Grid</source>
         <translation>Rejilla</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1028"/>
+        <location filename="../mainwindow.ui" line="1029"/>
         <source>General</source>
         <translation>General</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1031"/>
+        <location filename="../mainwindow.ui" line="1032"/>
         <source>Map title and description</source>
         <translation>Título y descripción del mapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1042"/>
+        <location filename="../mainwindow.ui" line="1043"/>
         <source>Players settings</source>
         <translation>Configuración de jugadores</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1057"/>
-        <location filename="../mainwindow.ui" line="1060"/>
+        <location filename="../mainwindow.ui" line="1058"/>
+        <location filename="../mainwindow.ui" line="1061"/>
         <source>Undo</source>
         <translation>Deshacer</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1078"/>
+        <location filename="../mainwindow.ui" line="1079"/>
         <source>Redo</source>
         <translation>Rehacer</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1096"/>
+        <location filename="../mainwindow.ui" line="1097"/>
         <source>Erase</source>
         <translation>Borrar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1107"/>
+        <location filename="../mainwindow.ui" line="1108"/>
         <source>Neutral</source>
         <translation>Neutral</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1115"/>
+        <location filename="../mainwindow.ui" line="1116"/>
         <source>Validate</source>
         <translation>Validar</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1126"/>
+        <location filename="../mainwindow.ui" line="1127"/>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <location filename="../mainwindow.cpp" line="1191"/>
         <source>Update appearance</source>
         <translation>Actualizar apariencia</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1137"/>
+        <location filename="../mainwindow.ui" line="1138"/>
         <source>Recreate obstacles</source>
         <translation>Recrear obstáculos</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1148"/>
+        <location filename="../mainwindow.ui" line="1149"/>
         <source>Player 1</source>
         <translation>Jugador 1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1159"/>
+        <location filename="../mainwindow.ui" line="1160"/>
         <source>Player 2</source>
         <translation>Jugador 2</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1170"/>
+        <location filename="../mainwindow.ui" line="1171"/>
         <source>Player 3</source>
         <translation>Jugador 3</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1181"/>
+        <location filename="../mainwindow.ui" line="1182"/>
         <source>Player 4</source>
         <translation>Jugador 4</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1192"/>
+        <location filename="../mainwindow.ui" line="1193"/>
         <source>Player 5</source>
         <translation>Jugador 5</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1203"/>
+        <location filename="../mainwindow.ui" line="1204"/>
         <source>Player 6</source>
         <translation>Jugador 6</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1214"/>
+        <location filename="../mainwindow.ui" line="1215"/>
         <source>Player 7</source>
         <translation>Jugador 7</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1225"/>
+        <location filename="../mainwindow.ui" line="1226"/>
         <source>Player 8</source>
         <translation>Jugador 8</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1233"/>
+        <location filename="../mainwindow.ui" line="1234"/>
         <source>Export as...</source>
         <translation>Exportar como...</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="346"/>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Confirmation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Unsaved changes will be lost, are you sure?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Cannot open map from this folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="370"/>
         <source>Open map</source>
         <translation>Abrir mapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="348"/>
+        <location filename="../mainwindow.cpp" line="372"/>
         <source>All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m)</source>
         <translation>Todos los mapas soportados (*.vmap *.h3m);;Mapas VCMI (*.vmap);;Mapas HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>Save map</source>
         <translation>Guardar mapa</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>VCMI maps (*.vmap)</source>
         <translation>Mapas VCMI (*.vmap)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="582"/>
+        <location filename="../mainwindow.cpp" line="606"/>
         <source>Type</source>
         <translation>Tipo</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="750"/>
+        <location filename="../mainwindow.cpp" line="768"/>
         <source>View surface</source>
         <translation>Ver superficie</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <source>No objects selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <source>This operation is irreversible. Do you want to continue?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1191"/>
+        <source>Errors occured. %1 objects were not updated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1231"/>
+        <source>Save to image</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MapSettings</name>
@@ -329,162 +370,220 @@
         <translation>Configuración del mapa</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="40"/>
+        <location filename="../mapsettings.ui" line="33"/>
         <source>General</source>
         <translation>General</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="46"/>
+        <location filename="../mapsettings.ui" line="39"/>
         <source>Map name</source>
         <translation>Nombre del mapa</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="56"/>
+        <location filename="../mapsettings.ui" line="49"/>
         <source>Map description</source>
         <translation>Descripción del mapa</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="66"/>
+        <location filename="../mapsettings.ui" line="83"/>
+        <source>Limit maximum heroes level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="92"/>
         <source>Difficulty</source>
         <translation>Dificultad</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="111"/>
+        <location filename="../mapsettings.ui" line="137"/>
+        <source>Mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="143"/>
+        <source>Mandatory mods for playing this map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="157"/>
+        <source>Mod name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="162"/>
+        <source>Version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="172"/>
+        <source>Automatic assignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="179"/>
+        <source>Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="182"/>
+        <source>Map objects mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="192"/>
+        <source>Set all mods having a game content as mandatory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="195"/>
+        <source>Full content mods</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="208"/>
         <source>Events</source>
         <translation>Eventos</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="121"/>
+        <location filename="../mapsettings.ui" line="218"/>
         <source>Victory</source>
         <translation>Victoria</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="135"/>
+        <location filename="../mapsettings.ui" line="232"/>
         <source>Victory message</source>
         <translation>Mensaje de victoria</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="150"/>
+        <location filename="../mapsettings.ui" line="247"/>
         <source>Only for human players</source>
         <translation>Solo para jugadores humanos</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="157"/>
+        <location filename="../mapsettings.ui" line="254"/>
         <source>Allow standard victory</source>
         <translation>Permitir victoria estándar</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="170"/>
-        <location filename="../mapsettings.ui" line="218"/>
+        <location filename="../mapsettings.ui" line="267"/>
+        <location filename="../mapsettings.ui" line="315"/>
         <source>Parameters</source>
         <translation>Parámetros</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="186"/>
+        <location filename="../mapsettings.ui" line="283"/>
         <source>Loss</source>
         <translation>Derrota</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="195"/>
+        <location filename="../mapsettings.ui" line="292"/>
         <source>7 days without town</source>
         <translation>7 días sin ciudad</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="202"/>
+        <location filename="../mapsettings.ui" line="299"/>
         <source>Defeat message</source>
         <translation>Mensaje de derrota</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="235"/>
+        <location filename="../mapsettings.ui" line="332"/>
         <source>Abilities</source>
         <translation>Habilidades</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="261"/>
+        <location filename="../mapsettings.ui" line="358"/>
         <source>Spells</source>
         <translation>Hechizos</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="287"/>
+        <location filename="../mapsettings.ui" line="384"/>
         <source>Artifacts</source>
         <translation>Artefactos</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="313"/>
+        <location filename="../mapsettings.ui" line="410"/>
         <source>Heroes</source>
         <translation>Héroes</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="29"/>
+        <location filename="../mapsettings.ui" line="439"/>
         <source>Ok</source>
         <translation>Aceptar</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="163"/>
+        <location filename="../mapsettings.cpp" line="174"/>
         <source>No special victory</source>
         <translation>Sin victoria especial</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="164"/>
+        <location filename="../mapsettings.cpp" line="175"/>
         <source>Capture artifact</source>
         <translation>Capturar artefacto</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="165"/>
+        <location filename="../mapsettings.cpp" line="176"/>
         <source>Hire creatures</source>
         <translation>Contratar criaturas</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="166"/>
+        <location filename="../mapsettings.cpp" line="177"/>
         <source>Accumulate resources</source>
         <translation>Acumular recursos</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="167"/>
+        <location filename="../mapsettings.cpp" line="178"/>
         <source>Construct building</source>
         <translation>Construir edificio</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="168"/>
+        <location filename="../mapsettings.cpp" line="179"/>
         <source>Capture town</source>
         <translation>Capturar ciudad</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="169"/>
+        <location filename="../mapsettings.cpp" line="180"/>
         <source>Defeat hero</source>
         <translation>Vencer héroe</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="170"/>
+        <location filename="../mapsettings.cpp" line="181"/>
         <source>Transport artifact</source>
         <translation>Transportar artefacto</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="173"/>
+        <location filename="../mapsettings.cpp" line="184"/>
         <source>No special loss</source>
         <translation>Sin pérdida especial</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="174"/>
+        <location filename="../mapsettings.cpp" line="185"/>
         <source>Lose castle</source>
         <translation>Perder castillo</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="175"/>
+        <location filename="../mapsettings.cpp" line="186"/>
         <source>Lose hero</source>
         <translation>Perder héroe</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="176"/>
+        <location filename="../mapsettings.cpp" line="187"/>
         <source>Time expired</source>
         <translation>Expiró el tiempo</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="177"/>
+        <location filename="../mapsettings.cpp" line="188"/>
         <source>Days without town</source>
         <translation>Días sin ciudad</translation>
     </message>
 </context>
+<context>
+    <name>MapView</name>
+    <message>
+        <location filename="../mapview.cpp" line="471"/>
+        <source>Can&apos;t place object</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>MessageWidget</name>
     <message>
@@ -496,47 +595,51 @@
 <context>
     <name>PlayerParams</name>
     <message>
-        <location filename="../playerparams.ui" line="57"/>
         <source>No team</source>
-        <translation>Sin equipo</translation>
+        <translation type="vanished">Sin equipo</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="65"/>
+        <location filename="../playerparams.ui" line="118"/>
         <source>Human/CPU</source>
         <translation>Humano/CPU</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="72"/>
+        <location filename="../playerparams.ui" line="105"/>
         <source>CPU only</source>
         <translation>Sólo CPU</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="79"/>
+        <location filename="../playerparams.ui" line="92"/>
         <source>Team</source>
         <translation>Equipo</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="86"/>
+        <location filename="../playerparams.ui" line="162"/>
         <source>Main town</source>
         <translation>Ciudad principal</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="93"/>
+        <location filename="../playerparams.ui" line="179"/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../playerparams.ui" line="85"/>
         <source>Random faction</source>
         <translation>Facción aleatoria</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="100"/>
+        <location filename="../playerparams.ui" line="72"/>
         <source>Generate hero at main</source>
         <translation>Generar héroe en la ciudad principal</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="108"/>
+        <location filename="../playerparams.ui" line="154"/>
         <source>(default)</source>
         <translation>(predeterminado)</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="86"/>
+        <location filename="../playerparams.cpp" line="109"/>
         <source>Player ID: %1</source>
         <translation>ID de jugador: %1</translation>
     </message>
@@ -554,7 +657,12 @@
         <translation>Jugadores</translation>
     </message>
     <message>
-        <location filename="../playersettings.ui" line="112"/>
+        <location filename="../playersettings.ui" line="74"/>
+        <source>1</source>
+        <translation type="unfinished">1</translation>
+    </message>
+    <message>
+        <location filename="../playersettings.ui" line="117"/>
         <source>Ok</source>
         <translation>Aceptar</translation>
     </message>
@@ -610,6 +718,11 @@
         <source>Map is not loaded</source>
         <translation>No se ha cargado ningún mapa</translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="70"/>
+        <source>No factions allowed for player %1</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="73"/>
         <source>No players allowed to play this map</source>
@@ -695,6 +808,11 @@
         <source>Map description is not specified</source>
         <translation>No se especifica la descripción del mapa</translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="175"/>
+        <source>Map contains object from mod &quot;%1&quot;, but doesn&apos;t require it</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="181"/>
         <source>Exception occurs during validation: %1</source>
@@ -764,114 +882,139 @@
         <translation>Jugadores</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="736"/>
+        <location filename="../windownewmap.ui" line="724"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="268"/>
+        <location filename="../windownewmap.ui" line="349"/>
         <source>Human/Computer</source>
         <translation>Humano/Ordenador</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="288"/>
-        <location filename="../windownewmap.ui" line="357"/>
-        <location filename="../windownewmap.ui" line="455"/>
-        <location filename="../windownewmap.ui" line="596"/>
+        <location filename="../windownewmap.ui" line="221"/>
+        <location filename="../windownewmap.ui" line="289"/>
+        <location filename="../windownewmap.ui" line="443"/>
+        <location filename="../windownewmap.ui" line="584"/>
         <source>Random</source>
         <translation>Aleatorio</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="336"/>
+        <location filename="../windownewmap.ui" line="269"/>
         <source>Computer only</source>
         <translation>Sólo ordenador</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="428"/>
+        <location filename="../windownewmap.ui" line="380"/>
+        <source>Human teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="399"/>
+        <source>Computer teams</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="416"/>
         <source>Monster strength</source>
         <translation>Fuerza de monstruos</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="477"/>
+        <location filename="../windownewmap.ui" line="465"/>
         <source>Weak</source>
         <translation>Débil</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="496"/>
-        <location filename="../windownewmap.ui" line="637"/>
+        <location filename="../windownewmap.ui" line="484"/>
+        <location filename="../windownewmap.ui" line="625"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="515"/>
+        <location filename="../windownewmap.ui" line="503"/>
         <source>Strong</source>
         <translation>Fuerte</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="569"/>
+        <location filename="../windownewmap.ui" line="557"/>
         <source>Water content</source>
         <translation>Contenido del agua</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="618"/>
+        <location filename="../windownewmap.ui" line="606"/>
         <source>None</source>
         <translation>Ninguno</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="656"/>
+        <location filename="../windownewmap.ui" line="644"/>
         <source>Islands</source>
         <translation>Islas</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="701"/>
+        <location filename="../windownewmap.ui" line="689"/>
         <source>Template</source>
         <translation>Plantilla</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="749"/>
+        <location filename="../windownewmap.ui" line="737"/>
         <source>Custom seed</source>
         <translation>Semilla personalizada</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="763"/>
+        <location filename="../windownewmap.ui" line="751"/>
         <source>Generate random map</source>
         <translation>Generar un mapa aleatorio</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="797"/>
+        <location filename="../windownewmap.ui" line="785"/>
         <source>Ok</source>
         <translation>Aceptar</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="816"/>
+        <location filename="../windownewmap.ui" line="804"/>
         <source>Cancel</source>
         <translation>Cancelar</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template for parameters scecified. Random map cannot be generated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="291"/>
+        <source>RMG failure</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>
     <message>
-        <location filename="../mainwindow.cpp" line="98"/>
+        <location filename="../mainwindow.cpp" line="101"/>
         <source>Filepath of the map to open.</source>
         <translation>Ruta del archivo del mapa a abrir.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="101"/>
+        <location filename="../mainwindow.cpp" line="104"/>
         <source>Extract original H3 archives into a separate folder.</source>
         <translation>Extraer archivos originales de H3 en una carpeta separada.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="102"/>
+        <location filename="../mainwindow.cpp" line="105"/>
         <source>From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG&apos;s.</source>
         <translation>Desde un archivo extraído, separa TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 y Un44 en imágenes PNG individuales.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="103"/>
+        <location filename="../mainwindow.cpp" line="106"/>
         <source>From an extracted archive, Converts single Images (found in Images folder) from .pcx to png.</source>
         <translation>Desde un archivo extraído, convierte imágenes individuales (encontradas en la carpeta Imágenes) de .pcx a png.</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="104"/>
+        <location filename="../mainwindow.cpp" line="107"/>
         <source>Delete original files, for the ones splitted / converted.</source>
         <translation>Eliminar archivos originales, por los que se han separado / convertido.</translation>
     </message>

+ 272 - 131
mapeditor/translation/ukrainian.ts

@@ -40,284 +40,327 @@
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="68"/>
+        <location filename="../mainwindow.ui" line="69"/>
         <source>Map</source>
         <translation>Мапа</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="78"/>
+        <location filename="../mainwindow.ui" line="79"/>
         <source>Edit</source>
         <translation>Редагування</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="89"/>
+        <location filename="../mainwindow.ui" line="90"/>
         <source>View</source>
         <translation>Вигляд</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="97"/>
+        <location filename="../mainwindow.ui" line="98"/>
         <source>Player</source>
         <translation>Гравець</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="117"/>
+        <location filename="../mainwindow.ui" line="118"/>
         <source>Toolbar</source>
         <translation>Панель інструментів</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="163"/>
+        <location filename="../mainwindow.ui" line="164"/>
         <source>Minimap</source>
         <translation>Мінімапа</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="239"/>
+        <location filename="../mainwindow.ui" line="240"/>
         <source>Map Objects View</source>
         <translation>Перегляд об&apos;єктів мапи</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="283"/>
+        <location filename="../mainwindow.ui" line="284"/>
         <source>Browser</source>
         <translation>Навігатор</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="361"/>
+        <location filename="../mainwindow.ui" line="362"/>
         <source>Inspector</source>
         <translation>Інспектор</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="400"/>
+        <location filename="../mainwindow.ui" line="401"/>
         <source>Property</source>
         <translation>Властивість</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="405"/>
+        <location filename="../mainwindow.ui" line="406"/>
         <source>Value</source>
         <translation>Значення</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="432"/>
+        <location filename="../mainwindow.ui" line="433"/>
         <source>Terrains View</source>
         <translation>Перегляд поверхні</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="484"/>
+        <location filename="../mainwindow.ui" line="485"/>
         <source>Brush</source>
         <translation>Кисть</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="763"/>
+        <location filename="../mainwindow.ui" line="764"/>
         <source>Terrains</source>
         <translation>Землі</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="806"/>
+        <location filename="../mainwindow.ui" line="807"/>
         <source>Roads</source>
         <translation>Шляхи</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="842"/>
+        <location filename="../mainwindow.ui" line="843"/>
         <source>Rivers</source>
         <translation>Річки</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="889"/>
+        <location filename="../mainwindow.ui" line="890"/>
         <source>Open</source>
         <translation>Відкрити</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="901"/>
+        <location filename="../mainwindow.ui" line="902"/>
         <source>Save</source>
         <translation>Зберегти</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="913"/>
+        <location filename="../mainwindow.ui" line="914"/>
         <source>New</source>
         <translation>Створити</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="921"/>
+        <location filename="../mainwindow.ui" line="922"/>
         <source>Save as...</source>
-        <translation>Зберегти як</translation>
+        <translation>Зберегти як...</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="924"/>
+        <location filename="../mainwindow.ui" line="925"/>
         <source>Ctrl+Shift+S</source>
         <translation>Ctrl+Shift+S</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="933"/>
+        <location filename="../mainwindow.ui" line="934"/>
         <source>U/G</source>
         <translation>П/З</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="936"/>
-        <location filename="../mainwindow.cpp" line="746"/>
+        <location filename="../mainwindow.ui" line="937"/>
+        <location filename="../mainwindow.cpp" line="764"/>
         <source>View underground</source>
         <translation>Дивитись підземелля</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="951"/>
+        <location filename="../mainwindow.ui" line="952"/>
         <source>Pass</source>
         <translation>Прохідність</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="963"/>
+        <location filename="../mainwindow.ui" line="964"/>
         <source>Cut</source>
         <translation>Вирізати</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="975"/>
+        <location filename="../mainwindow.ui" line="976"/>
         <source>Copy</source>
         <translation>Скопіювати</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="987"/>
+        <location filename="../mainwindow.ui" line="988"/>
         <source>Paste</source>
         <translation>Вставити</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="999"/>
+        <location filename="../mainwindow.ui" line="1000"/>
         <source>Fill</source>
         <translation>Заповнити</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1002"/>
+        <location filename="../mainwindow.ui" line="1003"/>
         <source>Fills the selection with obstacles</source>
         <translation>Заповнити перешкодами</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1017"/>
+        <location filename="../mainwindow.ui" line="1018"/>
         <source>Grid</source>
         <translation>Сітка</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1028"/>
+        <location filename="../mainwindow.ui" line="1029"/>
         <source>General</source>
         <translation>Загальний</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1031"/>
+        <location filename="../mainwindow.ui" line="1032"/>
         <source>Map title and description</source>
         <translation>Назва та опис мапи</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1042"/>
+        <location filename="../mainwindow.ui" line="1043"/>
         <source>Players settings</source>
         <translation>Налаштування гравців</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1057"/>
-        <location filename="../mainwindow.ui" line="1060"/>
+        <location filename="../mainwindow.ui" line="1058"/>
+        <location filename="../mainwindow.ui" line="1061"/>
         <source>Undo</source>
         <translation>Відмінити</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1078"/>
+        <location filename="../mainwindow.ui" line="1079"/>
         <source>Redo</source>
         <translation>Повторити</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1096"/>
+        <location filename="../mainwindow.ui" line="1097"/>
         <source>Erase</source>
         <translation>Стерти</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1107"/>
+        <location filename="../mainwindow.ui" line="1108"/>
         <source>Neutral</source>
         <translation>Нейтральний</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1115"/>
+        <location filename="../mainwindow.ui" line="1116"/>
         <source>Validate</source>
         <translation>Перевірити</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1126"/>
+        <location filename="../mainwindow.ui" line="1127"/>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <location filename="../mainwindow.cpp" line="1191"/>
         <source>Update appearance</source>
         <translation>Оновити вигляд</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1137"/>
+        <location filename="../mainwindow.ui" line="1138"/>
         <source>Recreate obstacles</source>
         <translation>Оновити перешкоди</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1148"/>
+        <location filename="../mainwindow.ui" line="1149"/>
         <source>Player 1</source>
         <translation>Гравець 1</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1159"/>
+        <location filename="../mainwindow.ui" line="1160"/>
         <source>Player 2</source>
         <translation>Гравець 2</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1170"/>
+        <location filename="../mainwindow.ui" line="1171"/>
         <source>Player 3</source>
         <translation>Гравець 3</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1181"/>
+        <location filename="../mainwindow.ui" line="1182"/>
         <source>Player 4</source>
         <translation>Гравець 4</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1192"/>
+        <location filename="../mainwindow.ui" line="1193"/>
         <source>Player 5</source>
         <translation>Гравець 5</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1203"/>
+        <location filename="../mainwindow.ui" line="1204"/>
         <source>Player 6</source>
         <translation>Гравець 6</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1214"/>
+        <location filename="../mainwindow.ui" line="1215"/>
         <source>Player 7</source>
         <translation>Гравець 7</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1225"/>
+        <location filename="../mainwindow.ui" line="1226"/>
         <source>Player 8</source>
         <translation>Гравець 8</translation>
     </message>
     <message>
-        <location filename="../mainwindow.ui" line="1233"/>
+        <location filename="../mainwindow.ui" line="1234"/>
         <source>Export as...</source>
+        <translation>Експортувати як...</translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Confirmation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="252"/>
+        <source>Unsaved changes will be lost, are you sure?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="329"/>
+        <source>Cannot open map from this folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="346"/>
+        <location filename="../mainwindow.cpp" line="370"/>
         <source>Open map</source>
         <translation>Відкрити мапу</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="348"/>
+        <location filename="../mainwindow.cpp" line="372"/>
         <source>All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m)</source>
         <translation>Всі підтримувані мапи (*.vmap *.h3m);;Мапи VCMI (*.vmap);;Мапи HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>Save map</source>
         <translation>Зберегти мапу</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="397"/>
-        <location filename="../mainwindow.cpp" line="424"/>
+        <location filename="../mainwindow.cpp" line="421"/>
+        <location filename="../mainwindow.cpp" line="448"/>
         <source>VCMI maps (*.vmap)</source>
         <translation>Мапи VCMI</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="582"/>
+        <location filename="../mainwindow.cpp" line="606"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="750"/>
+        <location filename="../mainwindow.cpp" line="768"/>
         <source>View surface</source>
         <translation>Дивитись поверхню</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1128"/>
+        <source>No objects selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1132"/>
+        <source>This operation is irreversible. Do you want to continue?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1191"/>
+        <source>Errors occured. %1 objects were not updated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="1231"/>
+        <source>Save to image</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MapSettings</name>
@@ -327,162 +370,220 @@
         <translation>Налаштування мапи</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="40"/>
+        <location filename="../mapsettings.ui" line="33"/>
         <source>General</source>
         <translation>Загальний</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="46"/>
+        <location filename="../mapsettings.ui" line="39"/>
         <source>Map name</source>
         <translation>Назва мапи</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="56"/>
+        <location filename="../mapsettings.ui" line="49"/>
         <source>Map description</source>
         <translation>Опис мапи</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="66"/>
+        <location filename="../mapsettings.ui" line="83"/>
+        <source>Limit maximum heroes level</source>
+        <translation>Обмежити максимальний рівень героїв</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="92"/>
         <source>Difficulty</source>
         <translation>Складність</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="111"/>
+        <location filename="../mapsettings.ui" line="137"/>
+        <source>Mods</source>
+        <translation>Модифікації</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="143"/>
+        <source>Mandatory mods for playing this map</source>
+        <translation>Модифікації необхідні для гри на мапи</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="157"/>
+        <source>Mod name</source>
+        <translation>Назва модифікації</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="162"/>
+        <source>Version</source>
+        <translation>Версія</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="172"/>
+        <source>Automatic assignment</source>
+        <translation>Автоматичне визначення</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="179"/>
+        <source>Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods</source>
+        <translation>Встановити необхідні модифікації на основі об&apos;єктів, розміщених на мапі. Цей метод може викликати проблеми, якщо у вас є налаштовані нагороди, гарнізони тощо з модів</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="182"/>
+        <source>Map objects mods</source>
+        <translation>Моди з об&apos;єктами мапи</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="192"/>
+        <source>Set all mods having a game content as mandatory</source>
+        <translation>Встановити усі моди з ігровим контентом як обов&apos;язкові</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="195"/>
+        <source>Full content mods</source>
+        <translation>Усі модифікації</translation>
+    </message>
+    <message>
+        <location filename="../mapsettings.ui" line="208"/>
         <source>Events</source>
         <translation>Події</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="121"/>
+        <location filename="../mapsettings.ui" line="218"/>
         <source>Victory</source>
         <translation>Перемога</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="135"/>
+        <location filename="../mapsettings.ui" line="232"/>
         <source>Victory message</source>
         <translation>Повідомлення про перемогу</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="150"/>
+        <location filename="../mapsettings.ui" line="247"/>
         <source>Only for human players</source>
         <translation>Тільки для гравців-людей</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="157"/>
+        <location filename="../mapsettings.ui" line="254"/>
         <source>Allow standard victory</source>
         <translation>Дозволити типову перемогу</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="170"/>
-        <location filename="../mapsettings.ui" line="218"/>
+        <location filename="../mapsettings.ui" line="267"/>
+        <location filename="../mapsettings.ui" line="315"/>
         <source>Parameters</source>
         <translation>Параметри</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="186"/>
+        <location filename="../mapsettings.ui" line="283"/>
         <source>Loss</source>
         <translation>Програш</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="195"/>
+        <location filename="../mapsettings.ui" line="292"/>
         <source>7 days without town</source>
         <translation>7 днів без міста</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="202"/>
+        <location filename="../mapsettings.ui" line="299"/>
         <source>Defeat message</source>
         <translation>Повідомлення про програш</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="235"/>
+        <location filename="../mapsettings.ui" line="332"/>
         <source>Abilities</source>
         <translation>Уміння</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="261"/>
+        <location filename="../mapsettings.ui" line="358"/>
         <source>Spells</source>
         <translation>Закляття</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="287"/>
+        <location filename="../mapsettings.ui" line="384"/>
         <source>Artifacts</source>
         <translation>Артефакти</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="313"/>
+        <location filename="../mapsettings.ui" line="410"/>
         <source>Heroes</source>
         <translation>Герої</translation>
     </message>
     <message>
-        <location filename="../mapsettings.ui" line="29"/>
+        <location filename="../mapsettings.ui" line="439"/>
         <source>Ok</source>
         <translation>Підтвердити</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="163"/>
+        <location filename="../mapsettings.cpp" line="174"/>
         <source>No special victory</source>
         <translation>Немає особливої перемоги</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="164"/>
+        <location filename="../mapsettings.cpp" line="175"/>
         <source>Capture artifact</source>
         <translation>Отримати артефакт</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="165"/>
+        <location filename="../mapsettings.cpp" line="176"/>
         <source>Hire creatures</source>
         <translation>Найняти істот</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="166"/>
+        <location filename="../mapsettings.cpp" line="177"/>
         <source>Accumulate resources</source>
         <translation>Накопичити ресурси</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="167"/>
+        <location filename="../mapsettings.cpp" line="178"/>
         <source>Construct building</source>
         <translation>Побудувати будівлю</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="168"/>
+        <location filename="../mapsettings.cpp" line="179"/>
         <source>Capture town</source>
         <translation>Захопити місто</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="169"/>
+        <location filename="../mapsettings.cpp" line="180"/>
         <source>Defeat hero</source>
         <translation>Перемогти героя</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="170"/>
+        <location filename="../mapsettings.cpp" line="181"/>
         <source>Transport artifact</source>
         <translation>Доставити артефакт</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="173"/>
+        <location filename="../mapsettings.cpp" line="184"/>
         <source>No special loss</source>
         <translation>Немає особливої поразки</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="174"/>
+        <location filename="../mapsettings.cpp" line="185"/>
         <source>Lose castle</source>
         <translation>Втратити місто</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="175"/>
+        <location filename="../mapsettings.cpp" line="186"/>
         <source>Lose hero</source>
         <translation>Втратити героя</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="176"/>
+        <location filename="../mapsettings.cpp" line="187"/>
         <source>Time expired</source>
         <translation>Закінчився час</translation>
     </message>
     <message>
-        <location filename="../mapsettings.cpp" line="177"/>
+        <location filename="../mapsettings.cpp" line="188"/>
         <source>Days without town</source>
         <translation>Дні без міста</translation>
     </message>
 </context>
+<context>
+    <name>MapView</name>
+    <message>
+        <location filename="../mapview.cpp" line="471"/>
+        <source>Can&apos;t place object</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>MessageWidget</name>
     <message>
@@ -494,47 +595,47 @@
 <context>
     <name>PlayerParams</name>
     <message>
-        <location filename="../playerparams.ui" line="57"/>
-        <source>No team</source>
-        <translation>Без команди</translation>
-    </message>
-    <message>
-        <location filename="../playerparams.ui" line="65"/>
+        <location filename="../playerparams.ui" line="118"/>
         <source>Human/CPU</source>
         <translation>Людина/Комп&apos;ютер</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="72"/>
+        <location filename="../playerparams.ui" line="105"/>
         <source>CPU only</source>
         <translation>Тільки комп&apos;ютер</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="79"/>
+        <location filename="../playerparams.ui" line="92"/>
         <source>Team</source>
         <translation>Команда</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="86"/>
+        <location filename="../playerparams.ui" line="162"/>
         <source>Main town</source>
         <translation>Головне місто</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="93"/>
+        <location filename="../playerparams.ui" line="179"/>
+        <source>Color</source>
+        <translation>Колір</translation>
+    </message>
+    <message>
+        <location filename="../playerparams.ui" line="85"/>
         <source>Random faction</source>
         <translation>Випадкова фракція</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="100"/>
+        <location filename="../playerparams.ui" line="72"/>
         <source>Generate hero at main</source>
         <translation>Згенерувати героя</translation>
     </message>
     <message>
-        <location filename="../playerparams.ui" line="108"/>
+        <location filename="../playerparams.ui" line="154"/>
         <source>(default)</source>
         <translation>(за замовчуванням)</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="86"/>
+        <location filename="../playerparams.cpp" line="109"/>
         <source>Player ID: %1</source>
         <translation>Гравець %1</translation>
     </message>
@@ -552,7 +653,12 @@
         <translation>Гравці</translation>
     </message>
     <message>
-        <location filename="../playersettings.ui" line="112"/>
+        <location filename="../playersettings.ui" line="74"/>
+        <source>1</source>
+        <translation>1</translation>
+    </message>
+    <message>
+        <location filename="../playersettings.ui" line="117"/>
         <source>Ok</source>
         <translation>Підтвердити</translation>
     </message>
@@ -608,6 +714,11 @@
         <source>Map is not loaded</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="70"/>
+        <source>No factions allowed for player %1</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="73"/>
         <source>No players allowed to play this map</source>
@@ -693,6 +804,11 @@
         <source>Map description is not specified</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../validator.cpp" line="175"/>
+        <source>Map contains object from mod &quot;%1&quot;, but doesn&apos;t require it</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../validator.cpp" line="181"/>
         <source>Exception occurs during validation: %1</source>
@@ -762,114 +878,139 @@
         <translation>Гравців</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="736"/>
+        <location filename="../windownewmap.ui" line="724"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="268"/>
+        <location filename="../windownewmap.ui" line="349"/>
         <source>Human/Computer</source>
         <translation>Людина/Комп&apos;ютер</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="288"/>
-        <location filename="../windownewmap.ui" line="357"/>
-        <location filename="../windownewmap.ui" line="455"/>
-        <location filename="../windownewmap.ui" line="596"/>
+        <location filename="../windownewmap.ui" line="221"/>
+        <location filename="../windownewmap.ui" line="289"/>
+        <location filename="../windownewmap.ui" line="443"/>
+        <location filename="../windownewmap.ui" line="584"/>
         <source>Random</source>
         <translation>Випадково</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="336"/>
+        <location filename="../windownewmap.ui" line="269"/>
         <source>Computer only</source>
         <translation>Тільки комп&apos;ютер</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="428"/>
+        <location filename="../windownewmap.ui" line="380"/>
+        <source>Human teams</source>
+        <translation>Команди людей</translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="399"/>
+        <source>Computer teams</source>
+        <translation>Команди комп&apos;ютерів</translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.ui" line="416"/>
         <source>Monster strength</source>
         <translation>Сила монстрів</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="477"/>
+        <location filename="../windownewmap.ui" line="465"/>
         <source>Weak</source>
         <translation>Слабкі</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="496"/>
-        <location filename="../windownewmap.ui" line="637"/>
+        <location filename="../windownewmap.ui" line="484"/>
+        <location filename="../windownewmap.ui" line="625"/>
         <source>Normal</source>
         <translation>Типова</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="515"/>
+        <location filename="../windownewmap.ui" line="503"/>
         <source>Strong</source>
         <translation>Сильні</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="569"/>
+        <location filename="../windownewmap.ui" line="557"/>
         <source>Water content</source>
         <translation>Наявність води</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="618"/>
+        <location filename="../windownewmap.ui" line="606"/>
         <source>None</source>
         <translation>Відсутня</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="656"/>
+        <location filename="../windownewmap.ui" line="644"/>
         <source>Islands</source>
         <translation>Острови</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="701"/>
+        <location filename="../windownewmap.ui" line="689"/>
         <source>Template</source>
         <translation>Шаблон</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="749"/>
+        <location filename="../windownewmap.ui" line="737"/>
         <source>Custom seed</source>
         <translation>Користувацьке зерно</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="763"/>
+        <location filename="../windownewmap.ui" line="751"/>
         <source>Generate random map</source>
         <translation>Згенерувати випадкову карту</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="797"/>
+        <location filename="../windownewmap.ui" line="785"/>
         <source>Ok</source>
         <translation>Підтвердити</translation>
     </message>
     <message>
-        <location filename="../windownewmap.ui" line="816"/>
+        <location filename="../windownewmap.ui" line="804"/>
         <source>Cancel</source>
         <translation>Скасувати</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="271"/>
+        <source>No template for parameters scecified. Random map cannot be generated.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="291"/>
+        <source>RMG failure</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>
     <message>
-        <location filename="../mainwindow.cpp" line="98"/>
+        <location filename="../mainwindow.cpp" line="101"/>
         <source>Filepath of the map to open.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="101"/>
+        <location filename="../mainwindow.cpp" line="104"/>
         <source>Extract original H3 archives into a separate folder.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="102"/>
+        <location filename="../mainwindow.cpp" line="105"/>
         <source>From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG&apos;s.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="103"/>
+        <location filename="../mainwindow.cpp" line="106"/>
         <source>From an extracted archive, Converts single Images (found in Images folder) from .pcx to png.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="104"/>
+        <location filename="../mainwindow.cpp" line="107"/>
         <source>Delete original files, for the ones splitted / converted.</source>
         <translation type="unfinished"></translation>
     </message>

+ 21 - 21
mapeditor/validator.cpp

@@ -47,7 +47,7 @@ std::list<Validator::Issue> Validator::validate(const CMap * map)
 	
 	if(!map)
 	{
-		issues.emplace_back("Map is not loaded", true);
+		issues.emplace_back(tr("Map is not loaded"), true);
 		return issues;
 	}
 	
@@ -67,14 +67,14 @@ std::list<Validator::Issue> Validator::validate(const CMap * map)
 			if(p.canHumanPlay)
 				++hplayers;
 			if(p.allowedFactions.empty())
-				issues.emplace_back(QString("No factions allowed for player %1").arg(i), true);
+				issues.emplace_back(QString(tr("No factions allowed for player %1")).arg(i), true);
 		}
 		if(hplayers + cplayers == 0)
-			issues.emplace_back("No players allowed to play this map", true);
+			issues.emplace_back(tr("No players allowed to play this map"), true);
 		if(hplayers + cplayers == 1)
-			issues.emplace_back("Map is allowed for one player and cannot be started", true);
+			issues.emplace_back(tr("Map is allowed for one player and cannot be started"), true);
 		if(!hplayers)
-			issues.emplace_back("No human players allowed to play this map", true);
+			issues.emplace_back(tr("No human players allowed to play this map"), true);
 
 		std::set<CHero*> allHeroesOnMap; //used to find hero duplicated
 		
@@ -90,13 +90,13 @@ std::list<Validator::Issue> Validator::validate(const CMap * map)
 				   dynamic_cast<CGGarrison*>(o.get()) ||
 				   dynamic_cast<CGHeroInstance*>(o.get()))
 				{
-					issues.emplace_back(QString("Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner").arg(o->instanceName.c_str()), true);
+					issues.emplace_back(QString(tr("Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner")).arg(o->instanceName.c_str()), true);
 				}
 			}
 			if(o->getOwner() != PlayerColor::NEUTRAL && o->getOwner().getNum() < map->players.size())
 			{
 				if(!map->players[o->getOwner().getNum()].canAnyonePlay())
-					issues.emplace_back(QString("Object %1 is assigned to non-playable player %2").arg(o->instanceName.c_str(), o->getOwner().getStr().c_str()), true);
+					issues.emplace_back(QString(tr("Object %1 is assigned to non-playable player %2")).arg(o->instanceName.c_str(), o->getOwner().getStr().c_str()), true);
 			}
 			//checking towns
 			if(auto * ins = dynamic_cast<CGTownInstance*>(o.get()))
@@ -113,24 +113,24 @@ std::list<Validator::Issue> Validator::validate(const CMap * map)
 				if(ins->ID == Obj::PRISON)
 				{
 					if(ins->getOwner() != PlayerColor::NEUTRAL)
-						issues.emplace_back(QString("Prison %1 must be a NEUTRAL").arg(ins->instanceName.c_str()), true);
+						issues.emplace_back(QString(tr("Prison %1 must be a NEUTRAL")).arg(ins->instanceName.c_str()), true);
 				}
 				else
 				{
 					bool has = amountOfCastles.count(ins->getOwner().getNum());
 					if(!has)
-						issues.emplace_back(QString("Hero %1 must have an owner").arg(ins->instanceName.c_str()), true);
+						issues.emplace_back(QString(tr("Hero %1 must have an owner")).arg(ins->instanceName.c_str()), true);
 				}
 				if(ins->type)
 				{
 					if(!map->allowedHeroes[ins->type->getId().getNum()])
-						issues.emplace_back(QString("Hero %1 is prohibited by map settings").arg(ins->type->getNameTranslated().c_str()), false);
+						issues.emplace_back(QString(tr("Hero %1 is prohibited by map settings")).arg(ins->type->getNameTranslated().c_str()), false);
 					
 					if(!allHeroesOnMap.insert(ins->type).second)
-						issues.emplace_back(QString("Hero %1 has duplicate on map").arg(ins->type->getNameTranslated().c_str()), false);
+						issues.emplace_back(QString(tr("Hero %1 has duplicate on map")).arg(ins->type->getNameTranslated().c_str()), false);
 				}
 				else
-					issues.emplace_back(QString("Hero %1 has an empty type and must be removed").arg(ins->instanceName.c_str()), true);
+					issues.emplace_back(QString(tr("Hero %1 has an empty type and must be removed")).arg(ins->instanceName.c_str()), true);
 			}
 			
 			//checking for arts
@@ -141,16 +141,16 @@ std::list<Validator::Issue> Validator::validate(const CMap * map)
 					if(ins->storedArtifact)
 					{
 						if(!map->allowedSpells[ins->storedArtifact->getId().getNum()])
-							issues.emplace_back(QString("Spell scroll %1 is prohibited by map settings").arg(ins->getObjectName().c_str()), false);
+							issues.emplace_back(QString(tr("Spell scroll %1 is prohibited by map settings")).arg(ins->getObjectName().c_str()), false);
 					}
 					else
-						issues.emplace_back(QString("Spell scroll %1 doesn't have instance assigned and must be removed").arg(ins->instanceName.c_str()), true);
+						issues.emplace_back(QString(tr("Spell scroll %1 doesn't have instance assigned and must be removed")).arg(ins->instanceName.c_str()), true);
 				}
 				else
 				{
 					if(ins->ID == Obj::ARTIFACT && !map->allowedArtifact[ins->subID])
 					{
-						issues.emplace_back(QString("Artifact %1 is prohibited by map settings").arg(ins->getObjectName().c_str()), false);
+						issues.emplace_back(QString(tr("Artifact %1 is prohibited by map settings")).arg(ins->getObjectName().c_str()), false);
 					}
 				}
 			}
@@ -159,30 +159,30 @@ std::list<Validator::Issue> Validator::validate(const CMap * map)
 		//verification of starting towns
 		for(auto & mp : amountOfCastles)
 			if(mp.second == 0)
-				issues.emplace_back(QString("Player %1 doesn't have any starting town").arg(mp.first), false);
+				issues.emplace_back(QString(tr("Player %1 doesn't have any starting town")).arg(mp.first), false);
 
 		//verification of map name and description
 		if(map->name.empty())
-			issues.emplace_back("Map name is not specified", false);
+			issues.emplace_back(tr("Map name is not specified"), false);
 		if(map->description.empty())
-			issues.emplace_back("Map description is not specified", false);
+			issues.emplace_back(tr("Map description is not specified"), false);
 		
 		//verificationfor mods
 		for(auto & mod : MapController::modAssessmentMap(*map))
 		{
 			if(!map->mods.count(mod.first))
 			{
-				issues.emplace_back(QString("Map contains object from mod \"%1\", but doesn't require it").arg(QString::fromStdString(VLC->modh->getModInfo(mod.first).name)), true);
+				issues.emplace_back(QString(tr("Map contains object from mod \"%1\", but doesn't require it")).arg(QString::fromStdString(VLC->modh->getModInfo(mod.first).name)), true);
 			}
 		}
 	}
 	catch(const std::exception & e)
 	{
-		issues.emplace_back(QString("Exception occurs during validation: %1").arg(e.what()), true);
+		issues.emplace_back(QString(tr("Exception occurs during validation: %1")).arg(e.what()), true);
 	}
 	catch(...)
 	{
-		issues.emplace_back("Unknown exception occurs during validation", true);
+		issues.emplace_back(tr("Unknown exception occurs during validation"), true);
 	}
 	
 	return issues;

+ 2 - 2
mapeditor/windownewmap.cpp

@@ -268,7 +268,7 @@ void WindowNewMap::on_okButton_clicked()
 		//verify map template
 		if(mapGenOptions.getPossibleTemplates().empty())
 		{
-			QMessageBox::warning(this, "No template", "No template for parameters scecified. Random map cannot be generated.");
+			QMessageBox::warning(this, tr("No template"), tr("No template for parameters scecified. Random map cannot be generated."));
 			return;
 		}
 		
@@ -288,7 +288,7 @@ void WindowNewMap::on_okButton_clicked()
 		}
 		catch(const std::exception & e)
 		{
-			QMessageBox::critical(this, "RMG failure", e.what());
+			QMessageBox::critical(this, tr("RMG failure"), e.what());
 		}
 	}
 	else

+ 7 - 15
server/CGameHandler.cpp

@@ -109,10 +109,6 @@ public:
             (void)e;
 			return false;
 		}
-		catch(...)
-		{
-			throw;
-		}
 	}
 };
 
@@ -635,11 +631,9 @@ void CGameHandler::endBattleConfirm(const BattleInfo * battleInfo)
 		return;
 	}
 	
-	const CArmedInstance *bEndArmy1 = battleInfo->sides.at(0).armyObject;
-	const CArmedInstance *bEndArmy2 = battleInfo->sides.at(1).armyObject;
 	const BattleResult::EResult result = battleResult.get()->result;
 	
-	CasualtiesAfterBattle cab1(bEndArmy1, battleInfo), cab2(bEndArmy2, battleInfo); //calculate casualties before deleting battle
+	CasualtiesAfterBattle cab1(battleInfo->sides.at(0), battleInfo), cab2(battleInfo->sides.at(1), battleInfo); //calculate casualties before deleting battle
 	ChangeSpells cs; //for Eagle Eye
 
 	if(!finishingBattle->isDraw() && finishingBattle->winnerHero)
@@ -816,8 +810,8 @@ void CGameHandler::endBattleConfirm(const BattleInfo * battleInfo)
 		changePrimSkill(finishingBattle->winnerHero, PrimarySkill::EXPERIENCE, battleResult.data->exp[finishingBattle->winnerSide]);
 	
 	BattleResultAccepted raccepted;
-	raccepted.heroResult[0].army = const_cast<CArmedInstance*>(bEndArmy1);
-	raccepted.heroResult[1].army = const_cast<CArmedInstance*>(bEndArmy2);
+	raccepted.heroResult[0].army = const_cast<CArmedInstance*>(battleInfo->sides.at(0).armyObject);
+	raccepted.heroResult[1].army = const_cast<CArmedInstance*>(battleInfo->sides.at(1).armyObject);
 	raccepted.heroResult[0].hero = const_cast<CGHeroInstance*>(battleInfo->sides.at(0).hero);
 	raccepted.heroResult[1].hero = const_cast<CGHeroInstance*>(battleInfo->sides.at(1).hero);
 	raccepted.heroResult[0].exp = battleResult.data->exp[0];
@@ -2119,7 +2113,7 @@ void CGameHandler::setupBattle(int3 tile, const CArmedInstance *armies[2], const
 
 	BattleField terType = gs->battleGetBattlefieldType(tile, getRandomGenerator());
 	if (heroes[0] && heroes[0]->boat && heroes[1] && heroes[1]->boat)
-		terType = BattleField::fromString("ship_to_ship");
+		terType = BattleField(*VLC->modh->identifiers.getIdentifier("core", "battlefield", "ship_to_ship"));
 
 	//send info about battles
 	BattleStart bs;
@@ -6684,14 +6678,12 @@ void CGameHandler::showInfoDialog(const std::string & msg, PlayerColor player)
 	showInfoDialog(&iw);
 }
 
-CasualtiesAfterBattle::CasualtiesAfterBattle(const CArmedInstance * _army, const BattleInfo * bat):
-	army(_army)
+CasualtiesAfterBattle::CasualtiesAfterBattle(const SideInBattle & battleSide, const BattleInfo * bat):
+	army(battleSide.armyObject)
 {
 	heroWithDeadCommander = ObjectInstanceID();
 
-	PlayerColor color = army->tempOwner;
-	if(color == PlayerColor::UNFLAGGABLE)
-		color = PlayerColor::NEUTRAL;
+	PlayerColor color = battleSide.color;
 
 	for(CStack * st : bat->stacks)
 	{

+ 2 - 1
server/CGameHandler.h

@@ -23,6 +23,7 @@ VCMI_LIB_NAMESPACE_BEGIN
 class CGameState;
 struct StartInfo;
 struct BattleResult;
+struct SideInBattle;
 struct BattleAttack;
 struct BattleStackAttacked;
 struct CPack;
@@ -90,7 +91,7 @@ struct CasualtiesAfterBattle
 	TSummoned summoned;
 	ObjectInstanceID heroWithDeadCommander; //TODO: unify stack locations
 
-	CasualtiesAfterBattle(const CArmedInstance * _army, const BattleInfo * bat);
+	CasualtiesAfterBattle(const SideInBattle & battleSide, const BattleInfo * bat);
 	void updateArmy(CGameHandler *gh);
 };
 

+ 24 - 43
server/CVCMIServer.cpp

@@ -409,51 +409,36 @@ void CVCMIServer::threadHandleClient(std::shared_ptr<CConnection> c)
 	setThreadName("CVCMIServer::handleConnection");
 	c->enterLobbyConnectionMode();
 
-#ifndef _MSC_VER
-	try
+	while(c->connected)
 	{
-#endif
-		while(c->connected)
+		CPack * pack;
+
+		try
 		{
-			CPack * pack;
-			
-			try
-			{
-				pack = c->retrievePack();
-			}
-			catch(boost::system::system_error & e)
-			{
+			pack = c->retrievePack();
+		}
+		catch(boost::system::system_error & e)
+		{
+			if (e.code() == boost::asio::error::eof)
+				logNetwork->error("Network error receiving a pack. Connection has been closed");
+			else
 				logNetwork->error("Network error receiving a pack. Connection %s dies. What happened: %s", c->toString(), e.what());
-				hangingConnections.insert(c);
-				connections.erase(c);
-				if(connections.empty() || hostClient == c)
-					state = EServerState::SHUTDOWN;
 
-				if(gh && state == EServerState::GAMEPLAY)
-				{
-					gh->handleClientDisconnection(c);
-				}
-				break;
-			}
+			hangingConnections.insert(c);
+			connections.erase(c);
+			if(connections.empty() || hostClient == c)
+				state = EServerState::SHUTDOWN;
 
-			CVCMIServerPackVisitor visitor(*this, this->gh);
-			pack->visit(visitor);
+			if(gh && state == EServerState::GAMEPLAY)
+			{
+				gh->handleClientDisconnection(c);
+			}
+			break;
 		}
-#ifndef _MSC_VER
-	}
-	catch(const std::exception & e)
-	{
-		(void)e;
-		boost::unique_lock<boost::recursive_mutex> queueLock(mx);
-		logNetwork->error("%s dies... \nWhat happened: %s", c->toString(), e.what());
-	}
-	catch(...)
-	{
-		state = EServerState::SHUTDOWN;
-		handleException();
-		throw;
+
+		CVCMIServerPackVisitor visitor(*this, this->gh);
+		pack->visit(visitor);
 	}
-#endif
 
 	boost::unique_lock<boost::recursive_mutex> queueLock(mx);
 
@@ -1022,7 +1007,7 @@ static void handleCommandOptions(int argc, const char * argv[], boost::program_o
 		{
 			po::store(po::parse_command_line(argc, argv, opts), options);
 		}
-		catch(std::exception & e)
+		catch(po::error & e)
 		{
 			std::cerr << "Failure during parsing command-line options:\n" << e.what() << std::endl;
 		}
@@ -1113,10 +1098,6 @@ int main(int argc, const char * argv[])
 			logNetwork->error(e.what());
 			server.state = EServerState::SHUTDOWN;
 		}
-		catch(...)
-		{
-			handleException();
-		}
 	}
 	catch(boost::system::system_error & e)
 	{

+ 5 - 5
server/PlayerMessageProcessor.cpp

@@ -175,7 +175,7 @@ void PlayerMessageProcessor::cheatGiveArmy(PlayerColor player, const CGHeroInsta
 	{
 		amountPerSlot = std::stol(words.at(1));
 	}
-	catch(std::exception&)
+	catch(std::logic_error&)
 	{
 	}
 
@@ -233,7 +233,7 @@ void PlayerMessageProcessor::cheatLevelup(PlayerColor player, const CGHeroInstan
 	{
 		levelsToGain = std::stol(words.at(0));
 	}
-	catch(std::exception&)
+	catch(std::logic_error&)
 	{
 		levelsToGain = 1;
 	}
@@ -252,7 +252,7 @@ void PlayerMessageProcessor::cheatExperience(PlayerColor player, const CGHeroIns
 	{
 		expAmountProcessed = std::stol(words.at(0));
 	}
-	catch(std::exception&)
+	catch(std::logic_error&)
 	{
 		expAmountProcessed = 10000;
 	}
@@ -271,7 +271,7 @@ void PlayerMessageProcessor::cheatMovement(PlayerColor player, const CGHeroInsta
 	{
 		smp.val = std::stol(words.at(0));;
 	}
-	catch(std::exception&)
+	catch(std::logic_error&)
 	{
 		smp.val = 1000000;
 	}
@@ -293,7 +293,7 @@ void PlayerMessageProcessor::cheatResources(PlayerColor player, std::vector<std:
 	{
 		baseResourceAmount = std::stol(words.at(0));;
 	}
-	catch(std::exception&)
+	catch(std::logic_error&)
 	{
 		baseResourceAmount = 100;
 	}

+ 1 - 1
test/game/CGameStateTest.cpp

@@ -195,7 +195,7 @@ public:
 		const auto & t = *gameCallback->getTile(tile);
 
 		auto terrain = t.terType->getId();
-		BattleField terType = BattleField::fromString("grass_hills");
+		BattleField terType(0);
 
 		//send info about battles
 

+ 1 - 1
test/mock/BattleFake.cpp

@@ -94,7 +94,7 @@ void BattleFake::setupEmptyBattlefield()
 {
 	EXPECT_CALL(*this, getDefendedTown()).WillRepeatedly(Return(nullptr));
 	EXPECT_CALL(*this, getAllObstacles()).WillRepeatedly(Return(IBattleInfo::ObstacleCList()));
-	EXPECT_CALL(*this, getBattlefieldType()).WillRepeatedly(Return(BattleField::fromString("grass_hills")));
+	EXPECT_CALL(*this, getBattlefieldType()).WillRepeatedly(Return(BattleField(0)));
 }
 
 #if SCRIPTING_ENABLED