Browse Source

Merge remote-tracking branch 'origin/beta' into object_distribution

Tomasz Zieliński 2 years ago
parent
commit
1e18887c9c
49 changed files with 689 additions and 629 deletions
  1. 12 4
      AI/BattleAI/BattleAI.cpp
  2. 1 1
      AI/Nullkiller/Analyzers/DangerHitMapAnalyzer.cpp
  3. 21 3
      AI/Nullkiller/Behaviors/DefenceBehavior.cpp
  4. 28 15
      AI/Nullkiller/Behaviors/GatherArmyBehavior.cpp
  5. 1 2
      AI/Nullkiller/Engine/FuzzyHelper.cpp
  6. 3 1
      AI/Nullkiller/Engine/Nullkiller.cpp
  7. 9 4
      AI/Nullkiller/Engine/PriorityEvaluator.cpp
  8. 4 2
      AI/Nullkiller/Pathfinding/Rules/AILayerTransitionRule.cpp
  9. 1 1
      AI/VCAI/VCAI.cpp
  10. 4 0
      ChangeLog.md
  11. 0 2
      Mods/vcmi/config/vcmi/chinese.json
  12. 0 2
      Mods/vcmi/config/vcmi/english.json
  13. 0 2
      Mods/vcmi/config/vcmi/german.json
  14. 7 7
      Mods/vcmi/config/vcmi/polish.json
  15. 0 2
      Mods/vcmi/config/vcmi/russian.json
  16. 0 2
      Mods/vcmi/config/vcmi/spanish.json
  17. 0 2
      Mods/vcmi/config/vcmi/ukrainian.json
  18. 8 0
      client/adventureMap/CAdvMapInt.cpp
  19. 8 7
      client/battle/BattleActionsController.cpp
  20. 3 0
      client/battle/BattleActionsController.h
  21. 0 11
      client/battle/BattleStacksController.cpp
  22. 0 5
      client/battle/BattleStacksController.h
  23. 7 0
      client/mapView/MapViewController.cpp
  24. 3 2
      client/widgets/CArtifactHolder.cpp
  25. 2 0
      client/windows/CCastleInterface.cpp
  26. 3 0
      config/ai/object-priorities.txt
  27. 1 4
      config/bonuses.json
  28. 1 1
      config/schemas/settings.json
  29. 0 3
      config/skills.json
  30. 16 16
      launcher/firstLaunch/firstlaunch_moc.ui
  31. 1 1
      launcher/lobby/lobby_moc.ui
  32. 5 5
      launcher/modManager/cmodlistview_moc.cpp
  33. 67 67
      launcher/translation/english.ts
  34. 84 84
      launcher/translation/german.ts
  35. 110 104
      launcher/translation/polish.ts
  36. 74 74
      launcher/translation/russian.ts
  37. 63 63
      launcher/translation/spanish.ts
  38. 77 77
      launcher/translation/ukrainian.ts
  39. 2 2
      launcher/updatedialog_moc.ui
  40. 3 3
      lib/CCreatureHandler.cpp
  41. 1 1
      lib/CCreatureSet.h
  42. 18 14
      lib/CGameState.cpp
  43. 0 9
      lib/CTownHandler.cpp
  44. 9 0
      lib/GameConstants.h
  45. 10 9
      lib/mapping/MapFormatH3M.cpp
  46. 16 12
      server/CGameHandler.cpp
  47. 1 1
      server/CGameHandler.h
  48. 1 1
      server/NetPacksServer.cpp
  49. 4 1
      vcmibuilder

+ 12 - 4
AI/BattleAI/BattleAI.cpp

@@ -596,9 +596,18 @@ void CBattleAI::attemptCastingSpell()
 
 		size_t ourUnits = 0;
 
-		for(auto unit : all)
+		std::set<uint32_t> unitIds;
+
+		state.battleGetUnitsIf([&](const battle::Unit * u)->bool
+		{
+			if(!u->isGhost() && !u->isTurret())
+				unitIds.insert(u->unitId());
+
+			return false;
+		});
+
+		for(auto unitId : unitIds)
 		{
-			auto unitId = unit->unitId();
 			auto localUnit = state.battleGetUnitByID(unitId);
 
 			newHealthOfStack[unitId] = localUnit->getAvailableHealth();
@@ -620,9 +629,8 @@ void CBattleAI::attemptCastingSpell()
 		{
 			int64_t totalGain = 0;
 
-			for(auto unit : all)
+			for(auto unitId : unitIds)
 			{
-				auto unitId = unit->unitId();
 				auto localUnit = state.battleGetUnitByID(unitId);
 
 				auto newValue = getValOr(newValueOfStack, unitId, 0);

+ 1 - 1
AI/Nullkiller/Analyzers/DangerHitMapAnalyzer.cpp

@@ -70,7 +70,7 @@ void DangerHitMapAnalyzer::updateHitMap()
 				auto turn = path.turn();
 				auto & node = hitMap[pos.x][pos.y][pos.z];
 
-				if(tileDanger > node.maximumDanger.danger
+				if(tileDanger / (turn / 3 + 1) > node.maximumDanger.danger / (node.maximumDanger.turn / 3 + 1)
 					|| (tileDanger == node.maximumDanger.danger && node.maximumDanger.turn > turn))
 				{
 					node.maximumDanger.danger = tileDanger;

+ 21 - 3
AI/Nullkiller/Behaviors/DefenceBehavior.cpp

@@ -30,7 +30,7 @@ namespace NKAI
 extern boost::thread_specific_ptr<CCallback> cb;
 extern boost::thread_specific_ptr<AIGateway> ai;
 
-const double TREAT_IGNORE_RATIO = 0.5;
+const float TREAT_IGNORE_RATIO = 2;
 
 using namespace Goals;
 
@@ -133,7 +133,7 @@ void DefenceBehavior::evaluateDefence(Goals::TGoalVec & tasks, const CGTownInsta
 				tasks.push_back(Goals::sptr(composition));
 			}
 
-			bool treatIsWeak = path.getHeroStrength() / treat.danger > TREAT_IGNORE_RATIO;
+			bool treatIsWeak = path.getHeroStrength() / (float)treat.danger > TREAT_IGNORE_RATIO;
 			bool needToSaveGrowth = treat.turn == 0 && dayOfWeek == 7;
 
 			if(treatIsWeak && !needToSaveGrowth)
@@ -244,7 +244,7 @@ void DefenceBehavior::evaluateDefence(Goals::TGoalVec & tasks, const CGTownInsta
 				continue;
 			}
 
-			if(path.targetHero == town->visitingHero && path.exchangeCount == 1)
+			if(path.targetHero == town->visitingHero.get() && path.exchangeCount == 1)
 			{
 #if NKAI_TRACE_LEVEL >= 1
 				logAi->trace("Put %s to garrison of town %s",
@@ -265,6 +265,24 @@ void DefenceBehavior::evaluateDefence(Goals::TGoalVec & tasks, const CGTownInsta
 
 				continue;
 			}
+
+			// main without army and visiting scout with army, very specific case
+			if(town->visitingHero && town->getUpperArmy()->stacksCount() == 0
+				&& path.targetHero != town->visitingHero.get() && path.exchangeCount == 1 && path.turn() == 0
+				&& ai->nullkiller->heroManager->evaluateHero(path.targetHero) > ai->nullkiller->heroManager->evaluateHero(town->visitingHero.get())
+				&& 10 * path.targetHero->getTotalStrength() < town->visitingHero->getTotalStrength())
+			{
+				path.heroArmy = town->visitingHero.get();
+
+				tasks.push_back(
+					Goals::sptr(Composition()
+						.addNext(DefendTown(town, treat, path))
+						.addNext(ExchangeSwapTownHeroes(town, town->visitingHero.get()))
+						.addNext(ExecuteHeroChain(path, town))
+						.addNext(ExchangeSwapTownHeroes(town, path.targetHero, HeroLockedReason::DEFENCE))));
+
+				continue;
+			}
 				
 			if(treat.turn == 0 || (path.turn() <= treat.turn && path.getHeroStrength() * SAFE_ATTACK_CONSTANT >= treat.danger))
 			{

+ 28 - 15
AI/Nullkiller/Behaviors/GatherArmyBehavior.cpp

@@ -65,6 +65,7 @@ Goals::TGoalVec GatherArmyBehavior::deliverArmyToHero(const CGHeroInstance * her
 {
 	Goals::TGoalVec tasks;
 	const int3 pos = hero->visitablePos();
+	auto targetHeroScore = ai->nullkiller->heroManager->evaluateHero(hero);
 
 #if NKAI_TRACE_LEVEL >= 1
 	logAi->trace("Checking ways to gaher army for hero %s, %s", hero->getObjectName(), pos.toString());
@@ -113,7 +114,7 @@ Goals::TGoalVec GatherArmyBehavior::deliverArmyToHero(const CGHeroInstance * her
 		float armyValue = (float)heroExchange.getReinforcementArmyStrength() / hero->getArmyStrength();
 
 		// avoid transferring very small amount of army
-		if(armyValue < 0.1f)
+		if(armyValue < 0.1f && armyValue < 20000)
 		{
 #if NKAI_TRACE_LEVEL >= 2
 			logAi->trace("Army value is too small.");
@@ -122,31 +123,33 @@ Goals::TGoalVec GatherArmyBehavior::deliverArmyToHero(const CGHeroInstance * her
 		}
 
 		// avoid trying to move bigger army to the weaker one.
-		if(armyValue > 1)
+		bool hasOtherMainInPath = false;
+
+		for(auto node : path.nodes)
 		{
-			bool hasOtherMainInPath = false;
+			if(!node.targetHero) continue;
 
-			for(auto node : path.nodes)
-			{
-				if(!node.targetHero) continue;
+			auto heroRole = ai->nullkiller->heroManager->getHeroRole(node.targetHero);
 
-				auto heroRole = ai->nullkiller->heroManager->getHeroRole(node.targetHero);
+			if(heroRole == HeroRole::MAIN)
+			{
+				auto score = ai->nullkiller->heroManager->evaluateHero(node.targetHero);
 
-				if(heroRole == HeroRole::MAIN)
+				if(score >= targetHeroScore)
 				{
 					hasOtherMainInPath = true;
 
 					break;
 				}
 			}
+		}
 
-			if(hasOtherMainInPath)
-			{
+		if(hasOtherMainInPath)
+		{
 #if NKAI_TRACE_LEVEL >= 2
-				logAi->trace("Army value is too large.");
+			logAi->trace("Army value is too large.");
 #endif
-				continue;
-			}
+			continue;
 		}
 
 		auto danger = path.getTotalDanger();
@@ -180,7 +183,17 @@ Goals::TGoalVec GatherArmyBehavior::deliverArmyToHero(const CGHeroInstance * her
 	#if NKAI_TRACE_LEVEL >= 2
 				logAi->trace("Action is blocked. Considering decomposition.");
 	#endif
-				composition.addNext(blockedAction->decompose(path.targetHero));
+				auto subGoal = blockedAction->decompose(path.targetHero);
+
+				if(subGoal->invalid())
+				{
+#if NKAI_TRACE_LEVEL >= 1
+					logAi->trace("Path is invalid. Skipping");
+#endif
+					continue;
+				}
+
+				composition.addNext(subGoal);
 			}
 			
 			tasks.push_back(sptr(composition));
@@ -261,7 +274,7 @@ Goals::TGoalVec GatherArmyBehavior::upgradeArmy(const CGTownInstance * upgrader)
 
 		auto armyValue = (float)upgrade.upgradeValue / path.getHeroStrength();
 
-		if(armyValue < 0.25f || upgrade.upgradeValue < 300) // avoid small upgrades
+		if((armyValue < 0.1f && armyValue < 20000) || upgrade.upgradeValue < 300) // avoid small upgrades
 		{
 #if NKAI_TRACE_LEVEL >= 2
 			logAi->trace("Ignore path. Army value is too small (%f)", armyValue);

+ 1 - 2
AI/Nullkiller/Engine/FuzzyHelper.cpp

@@ -130,8 +130,6 @@ ui64 FuzzyHelper::evaluateDanger(const CGObjectInstance * obj)
 
 		return danger;
 	}
-	case Obj::PANDORAS_BOX:
-		return 10000; //Who knows what awaits us there
 
 	case Obj::ARTIFACT:
 	case Obj::RESOURCE:
@@ -148,6 +146,7 @@ ui64 FuzzyHelper::evaluateDanger(const CGObjectInstance * obj)
 	case Obj::CREATURE_GENERATOR4:
 	case Obj::MINE:
 	case Obj::ABANDONED_MINE:
+	case Obj::PANDORAS_BOX:
 	{
 		const CArmedInstance * a = dynamic_cast<const CArmedInstance *>(obj);
 		return a->getArmyStrength();

+ 3 - 1
AI/Nullkiller/Engine/Nullkiller.cpp

@@ -299,6 +299,7 @@ void Nullkiller::makeTurn()
 
 void Nullkiller::executeTask(Goals::TTask task)
 {
+	auto start = std::chrono::high_resolution_clock::now();
 	std::string taskDescr = task->toString();
 
 	boost::this_thread::interruption_point();
@@ -307,10 +308,11 @@ void Nullkiller::executeTask(Goals::TTask task)
 	try
 	{
 		task->accept(ai.get());
+		logAi->trace("Task %s completed in %lld", taskDescr, timeElapsed(start));
 	}
 	catch(goalFulfilledException &)
 	{
-		logAi->trace("Task %s completed", task->toString());
+		logAi->trace("Task %s completed in %lld", taskDescr, timeElapsed(start));
 	}
 	catch(cannotFulfillGoalException & e)
 	{

+ 9 - 4
AI/Nullkiller/Engine/PriorityEvaluator.cpp

@@ -591,7 +591,7 @@ public:
 		uint64_t upgradeValue = armyUpgrade.getUpgradeValue();
 
 		evaluationContext.armyReward += upgradeValue;
-		evaluationContext.strategicalValue += upgradeValue / armyUpgrade.hero->getTotalStrength();
+		evaluationContext.strategicalValue += upgradeValue / (float)armyUpgrade.hero->getArmyStrength();
 	}
 };
 
@@ -627,7 +627,7 @@ private:
 				continue;
 
 			auto creature = creatureInfo.second.back().toCreature();
-			result += creature->AIValue * town->getGrowthInfo(creature->level).totalGrowth();
+			result += creature->AIValue * town->getGrowthInfo(creature->getLevel() - 1).totalGrowth();
 		}
 
 		return result;
@@ -648,6 +648,9 @@ public:
 
 		auto strategicalValue = std::sqrt(armyIncome / 20000.0f) + dailyIncome / 3000.0f;
 
+		if(evaluationContext.evaluator.ai->buildAnalyzer->getDevelopmentInfo().size() == 1)
+			strategicalValue = 1;
+
 		float multiplier = 1;
 
 		if(treat.turn < defendTown.getTurn())
@@ -781,9 +784,11 @@ public:
 		if(garrisonHero && swapCommand.getLockingReason() == HeroLockedReason::DEFENCE)
 		{
 			auto defenderRole = evaluationContext.evaluator.ai->heroManager->getHeroRole(garrisonHero);
+			auto mpLeft = garrisonHero->movement / (float)garrisonHero->maxMovePoints(true);
 
-			evaluationContext.movementCost += garrisonHero->movement;
-			evaluationContext.movementCostByRole[defenderRole] += garrisonHero->movement;
+			evaluationContext.movementCost += mpLeft;
+			evaluationContext.movementCostByRole[defenderRole] += mpLeft;
+			evaluationContext.heroRole = defenderRole;
 		}
 	}
 };

+ 4 - 2
AI/Nullkiller/Pathfinding/Rules/AILayerTransitionRule.cpp

@@ -53,13 +53,15 @@ namespace AIPathfinding
 
 		for(const CGTownInstance * t : cb->getTownsInfo())
 		{
-			if(t->hasBuilt(BuildingID::SHIPYARD))
+			// do not allow ally shipyards because of bug
+			if(t->hasBuilt(BuildingID::SHIPYARD) && t->getOwner() == ai->playerID)
 				shipyards.push_back(t);
 		}
 
 		for(const CGObjectInstance * obj : ai->memory->visitableObjs)
 		{
-			if(obj->ID != Obj::TOWN) //towns were handled in the previous loop
+			// do not allow ally shipyards because of bug
+			if(obj->ID != Obj::TOWN && obj->getOwner() == ai->playerID) //towns were handled in the previous loop
 			{
 				if(const IShipyard * shipyard = IShipyard::castFrom(obj))
 					shipyards.push_back(shipyard);

+ 1 - 1
AI/VCAI/VCAI.cpp

@@ -863,7 +863,7 @@ void VCAI::mainLoop()
 
 	invalidPathHeroes.clear();
 
-	while (basicGoals.size())
+	for (int pass = 0; pass< 30 && basicGoals.size(); pass++)
 	{
 		vstd::removeDuplicates(basicGoals); //TODO: container which does this automagically without has would be nice
 		goalsToAdd.clear();

+ 4 - 0
ChangeLog.md

@@ -22,6 +22,7 @@
 * Implemented cut/copy/paste operations
 * Implemented lasso brush for terrain editing
 * Toolbar actions now have names
+* Added basic victory and lose conditions
 
 ### LAUNCHER:
 * Added initial Welcome/Setup screen for new players
@@ -31,6 +32,7 @@
 * Mods tab layout has been adjusted based on feedback from players
 * Settings tab layout has been redesigned to support longer texts
 * Added button to start map editor directly from Launcher
+* Simplified game starting flow from online lobby
 
 ### AI PLAYER:
 * AI should now be more active in destroying heroes causing treat on AI towns
@@ -67,6 +69,7 @@
 * It is now possible to use in-game console for vcmi commands
 * Stacks sized 1000-9999 units will not be displayed as "1k"
 * It is now possible to select destination town for Town Portal via double-click
+* Implemented extended options for random map tab: generate G+U size, select RMG template, manage teams and roads
 
 ### HERO SCREEN
 * Fixed cases of incorrect artifact slot highlighting
@@ -109,6 +112,7 @@
 * Hovering over hero now correctly shows hero cursor
 * Creature currently making turn is now highlighted in the Battle Queue 
 * Hovering over creature icon in Battle Queue will highlight this creature in the battlefield
+* New battle UI extension allows control over creatures' special abilities
 
 ### SPELLS:
 * Hero casting animation will play before spell effect

+ 0 - 2
Mods/vcmi/config/vcmi/chinese.json

@@ -144,8 +144,6 @@
 	"core.bonus.BLOCKS_RANGED_RETALIATION.description": "敌人无法对射击进行反击",
 	"core.bonus.CATAPULT.name": "攻城",
 	"core.bonus.CATAPULT.description": "可以攻击城墙",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.name": "额外攻击城墙",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.description": "可以额外攻击城墙 ${val} 次",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "施法消耗 - (${val})",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "减少英雄的施法消耗",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "对方施法消耗 + (${val})",

+ 0 - 2
Mods/vcmi/config/vcmi/english.json

@@ -168,8 +168,6 @@
 	"core.bonus.BLOCKS_RANGED_RETALIATION.description": "Enemy cannot retaliate by using a ranged attack",
 	"core.bonus.CATAPULT.name": "Catapult",
 	"core.bonus.CATAPULT.description": "Attacks siege walls",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.name": "Additional siege attacks",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.description": "Can hit siege walls ${val} extra times per attack",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "Reduce Casting Cost (${val})",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "Reduces the spellcasting cost for the hero by ${val}",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "Magic Damper (${val})",

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

@@ -169,8 +169,6 @@
 	"core.bonus.BLOCKS_RANGED_RETALIATION.description": "Feind kann nicht durch Schießen vergelten",
 	"core.bonus.CATAPULT.name": "Katapult",
 	"core.bonus.CATAPULT.description": "Greift Belagerungsmauern an",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.name": "Zusätzliche Belagerungsangriffe",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.description": "Kann Belagerungsmauern ${val} zusätzliche Male pro Angriff treffen",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "Reduziere Zauberkosten (${val})",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "Reduziert die Zauberkosten für den Helden",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "Zauberdämpfer (${val})",

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

@@ -79,10 +79,10 @@
 	"vcmi.battleOptions.animationsSpeed1.help": "Ustawia szybkość animacji na bardzo wolną",
 	"vcmi.battleOptions.animationsSpeed5.help": "Ustawia szybkość animacji na bardzo szybką",
 	"vcmi.battleOptions.animationsSpeed6.help": "Ustawia szybkość animacji na błyskawiczną",
-	"vcmi.battleOptions.skipBattleIntroMusic.hover": "Pomiń muzykę startową",
-	"vcmi.battleOptions.skipBattleIntroMusic.help": "{Pomiń muzykę startową}\n\n Pomija krótką muzykę, która jest odtwarzana na początku każdej bitwy przed rozpoczęciem akcji. Może również być pominięta poprzez naciśnięcie ESC.",
+	"vcmi.battleOptions.skipBattleIntroMusic.hover": "Pomiń czekanie startowe",
+	"vcmi.battleOptions.skipBattleIntroMusic.help": "{Pomiń czekanie startowe}\n\n Pomija konieczność czekania podczas muzyki startowej, która jest odtwarzana na początku każdej bitwy przed rozpoczęciem akcji.",
 
-	"vcmi.battleWindow.pressKeyToSkipIntro" : "Naciśnij dowolny klawisz by pominąć muzykę startową",
+	"vcmi.battleWindow.pressKeyToSkipIntro" : "Naciśnij dowolny klawisz by rozpocząć bitwę natychmiastowo",
 
 	"vcmi.battleWindow.damageEstimation.melee" : "Atakuj %CREATURE (%DAMAGE).",
 	"vcmi.battleWindow.damageEstimation.meleeKills" : "Atakuj %CREATURE (%DAMAGE, %KILLS).",
@@ -92,8 +92,8 @@
 	"vcmi.battleWindow.damageEstimation.shots.1" : "pozostał %d strzał",
 	"vcmi.battleWindow.damageEstimation.damage" : "obrażenia: %d",
 	"vcmi.battleWindow.damageEstimation.damage.1" : "obrażenia: %d",
-	"vcmi.battleWindow.damageEstimation.kills" : "%d zginie",
-	"vcmi.battleWindow.damageEstimation.kills.1" : "%d zginie",
+	"vcmi.battleWindow.damageEstimation.kills" : "zginie: %d",
+	"vcmi.battleWindow.damageEstimation.kills.1" : "zginie: %d",
 
 	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Pokaż dostępne stworzenia",
 	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Pokaż dostępne stworzenia}\n\n Pokazuje dostępne stworzenia zamiast tygodniowego przyrostu w podsumowaniu miasta (lewy dolny róg).",
@@ -141,6 +141,8 @@
 	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Sojusze",
 	"vcmi.randomMapTab.widgets.roadTypesLabel"       : "Typy dróg",
 
+	//WoG strings translations missing here - should be taken from polish WoG translation
+
 	"core.bonus.ADDITIONAL_ATTACK.name": "Podwójne Uderzenie",
 	"core.bonus.ADDITIONAL_ATTACK.description": "Atakuje podwójnie",
 	"core.bonus.ADDITIONAL_RETALIATION.name": "Dodatkowe kontrataki",
@@ -155,8 +157,6 @@
 	"core.bonus.BLOCKS_RANGED_RETALIATION.description": "Wróg nie może kontratakować poprzez strzelanie",
 	"core.bonus.CATAPULT.name": "Katapulta",
 	"core.bonus.CATAPULT.description": "Atakuje mury obronne",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.name": "Dodatkowe ataki oblężnicze",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.description": "Może uderzyć mury obronne ${val} dodatkowych razy na atak",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "Zmniejsz koszt czarów (${val})",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "Zmniejsza koszt czaru bohatera",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "Tłumienie magii (${val})",

+ 0 - 2
Mods/vcmi/config/vcmi/russian.json

@@ -171,8 +171,6 @@
 	"core.bonus.BLOCKS_RANGED_RETALIATION.description": "Враг не отвечает в дальнем бою",
 	"core.bonus.CATAPULT.name": "Стенобитное орудие",
 	"core.bonus.CATAPULT.description": "Может атаковать стены",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.name": "Дополнительные атаки стен",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.description": "Может дополнительно бить в стены ${val} раз за атаку",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "Снижение стоимости заклинаний (${val})",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "Снижаемость стоимость заклинаний для героя",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "Подавитель магии (${val})",

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

@@ -157,8 +157,6 @@
     "core.bonus.BLOCKS_RANGED_RETALIATION.description": "El enemigo no puede contraatacar disparando",
     "core.bonus.CATAPULT.name": "Catapulta",
     "core.bonus.CATAPULT.description": "Ataca a las paredes de asedio",
-    "core.bonus.CATAPULT_EXTRA_SHOTS.name": "Ataques adicionales de asedio",
-    "core.bonus.CATAPULT_EXTRA_SHOTS.description": "Puede golpear las paredes de asedio ${val} veces adicionales por ataque",
     "core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "Reducir coste del conjuro (${val})",
     "core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "Reduce el coste del conjuro para el héroe",
     "core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "Disminuir efecto mágico (${val})",

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

@@ -157,8 +157,6 @@
 	"core.bonus.BLOCKS_RANGED_RETALIATION.description" : "Ворог не може відповісти пострілом",
 	"core.bonus.CATAPULT.name" : "Катапульта",
 	"core.bonus.CATAPULT.description" : "Атакує стіни фортеці",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.name" : "Додаткові атаки стін",
-	"core.bonus.CATAPULT_EXTRA_SHOTS.description" : "Може вражати стіни фортеці ${val} додаткових разів за атаку",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name" : "Зменшує вартість закляття (${val})",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description" : "Зменшує вартість закляття для героя",
 	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name" : "Демпфер магії (${val})",

+ 8 - 0
client/adventureMap/CAdvMapInt.cpp

@@ -49,6 +49,7 @@
 #include "../../lib/mapping/CMap.h"
 #include "../../lib/UnlockGuard.h"
 #include "../../lib/TerrainHandler.h"
+#include <SDL_keycode.h>
 
 #define ADVOPT (conf.go()->ac)
 
@@ -791,6 +792,13 @@ void CAdvMapInt::keyPressed(const SDL_Keycode & key)
 			}
 			return;
 		}
+	case SDLK_LALT:
+	case SDLK_RALT:
+		{
+			//fake mouse use to trigger onTileHovered()
+			GH.fakeMouseMove();
+			return;
+		}
 	default:
 		{
 			auto direction = keyToMoveDirection(key);

+ 8 - 7
client/battle/BattleActionsController.cpp

@@ -113,6 +113,7 @@ static std::string formatRangedAttack(const DamageEstimation & estimation, const
 
 BattleActionsController::BattleActionsController(BattleInterface & owner):
 	owner(owner),
+	selectedStack(nullptr),
 	heroSpellToCast(nullptr)
 {}
 
@@ -177,7 +178,7 @@ void BattleActionsController::enterCreatureCastingMode()
 		if (isCastingPossible)
 		{
 			owner.giveCommand(EActionType::MONSTER_SPELL, BattleHex::INVALID, spell->getId());
-			owner.stacksController->setSelectedStack(nullptr);
+			selectedStack = nullptr;
 
 			CCS->curh->set(Cursor::Combat::POINTER);
 		}
@@ -568,7 +569,7 @@ bool BattleActionsController::actionIsLegal(PossiblePlayerBattleAction action, B
 			return isCastingPossibleHere(action.spell().toSpell(), owner.stacksController->getActiveStack(), targetStack, targetHex);
 
 		case PossiblePlayerBattleAction::AIMED_SPELL_CREATURE:
-			return targetStack && isCastingPossibleHere(action.spell().toSpell(), owner.stacksController->getActiveStack(), targetStack, targetHex);
+			return !selectedStack && targetStack && isCastingPossibleHere(action.spell().toSpell(), owner.stacksController->getActiveStack(), targetStack, targetHex);
 
 		case PossiblePlayerBattleAction::RANDOM_GENIE_SPELL:
 			if(targetStack && targetStackOwned && targetStack != owner.stacksController->getActiveStack() && targetStack->alive()) //only positive spells for other allied creatures
@@ -581,11 +582,11 @@ bool BattleActionsController::actionIsLegal(PossiblePlayerBattleAction action, B
 		case PossiblePlayerBattleAction::TELEPORT:
 		{
 			ui8 skill = getCurrentSpellcaster()->getEffectLevel(SpellID(SpellID::TELEPORT).toSpell());
-			return owner.curInt->cb->battleCanTeleportTo(owner.stacksController->getSelectedStack(), targetHex, skill);
+			return owner.curInt->cb->battleCanTeleportTo(selectedStack, targetHex, skill);
 		}
 
 		case PossiblePlayerBattleAction::SACRIFICE: //choose our living stack to sacrifice
-			return targetStack && targetStack != owner.stacksController->getSelectedStack() && targetStackOwned && targetStack->alive();
+			return targetStack && targetStack != selectedStack && targetStackOwned && targetStack->alive();
 
 		case PossiblePlayerBattleAction::OBSTACLE:
 		case PossiblePlayerBattleAction::FREE_LOCATION:
@@ -697,14 +698,14 @@ void BattleActionsController::actionRealize(PossiblePlayerBattleAction action, B
 				{
 					heroSpellToCast->aimToHex(targetHex);
 					possibleActions.push_back({PossiblePlayerBattleAction::SACRIFICE, action.spell()});
-					owner.stacksController->setSelectedStack(targetStack);
+					selectedStack = targetStack;
 					return;
 				}
 				if (action.spell() == SpellID::TELEPORT)
 				{
 					heroSpellToCast->aimToUnit(targetStack);
 					possibleActions.push_back({PossiblePlayerBattleAction::TELEPORT, action.spell()});
-					owner.stacksController->setSelectedStack(targetStack);
+					selectedStack = targetStack;
 					return;
 				}
 			}
@@ -735,7 +736,7 @@ void BattleActionsController::actionRealize(PossiblePlayerBattleAction action, B
 				owner.curInt->cb->battleMakeAction(heroSpellToCast.get());
 				endCastingSpell();
 			}
-			owner.stacksController->setSelectedStack(nullptr);
+			selectedStack = nullptr;
 			return;
 		}
 	}

+ 3 - 0
client/battle/BattleActionsController.h

@@ -47,6 +47,9 @@ class BattleActionsController
 	/// if true, active stack could possibly cast some target spell
 	std::vector<const CSpell *> creatureSpells;
 
+	/// stack that has been selected as first target for multi-target spells (Teleport & Sacrifice)
+	const CStack * selectedStack;
+
 	bool isCastingPossibleHere (const CSpell * spell, const CStack *sactive, const CStack *shere, BattleHex myNumber);
 	bool canStackMoveHere (const CStack *sactive, BattleHex MyNumber) const; //TODO: move to BattleState / callback
 	std::vector<PossiblePlayerBattleAction> getPossibleActionsForStack (const CStack *stack) const; //called when stack gets its turn

+ 0 - 11
client/battle/BattleStacksController.cpp

@@ -74,7 +74,6 @@ BattleStacksController::BattleStacksController(BattleInterface & owner):
 	owner(owner),
 	activeStack(nullptr),
 	stackToActivate(nullptr),
-	selectedStack(nullptr),
 	animIDhelper(0)
 {
 	//preparing graphics for displaying amounts of creatures
@@ -734,16 +733,6 @@ void BattleStacksController::activateStack()
 		return;
 }
 
-void BattleStacksController::setSelectedStack(const CStack *stack)
-{
-	selectedStack = stack;
-}
-
-const CStack* BattleStacksController::getSelectedStack() const
-{
-	return selectedStack;
-}
-
 const CStack* BattleStacksController::getActiveStack() const
 {
 	return activeStack;

+ 0 - 5
client/battle/BattleStacksController.h

@@ -79,9 +79,6 @@ class BattleStacksController
 	///when animation is playing, we should wait till the end to make the next stack active; nullptr of none
 	const CStack *stackToActivate;
 
-	/// stack that was selected for multi-target spells - Teleport / Sacrifice
-	const CStack *selectedStack;
-
 	/// for giving IDs for animations
 	ui32 animIDhelper;
 
@@ -126,7 +123,6 @@ public:
 	void activateStack(); //copy stackToActivate to activeStack to enable controls of the stack
 
 	void setActiveStack(const CStack *stack);
-	void setSelectedStack(const CStack *stack);
 
 	void showAliveStack(Canvas & canvas, const CStack * stack);
 	void showStack(Canvas & canvas, const CStack * stack);
@@ -140,7 +136,6 @@ public:
 	void addNewAnim(BattleAnimation *anim); //adds new anim to pendingAnims
 
 	const CStack* getActiveStack() const;
-	const CStack* getSelectedStack() const;
 	const std::vector<uint32_t> getHoveredStacksUnitIds() const;
 
 	void update();

+ 7 - 0
client/mapView/MapViewController.cpp

@@ -18,6 +18,7 @@
 
 #include "../CPlayerInterface.h"
 #include "../adventureMap/CAdvMapInt.h"
+#include "../gui/CGuiHandler.h"
 
 #include "../../lib/CConfigHandler.h"
 #include "../../lib/CPathfinder.h"
@@ -206,6 +207,9 @@ bool MapViewController::isEventVisible(const CGObjectInstance * obj)
 	if(!LOCPLINT->makingTurn && settings["adventure"]["enemyMoveTime"].Float() < 0)
 		return false; // enemy move speed set to "hidden/none"
 
+	if(GH.topInt() != adventureInt)
+		return false;
+
 	if(obj->isVisitable())
 		return context->isVisible(obj->visitablePos());
 	else
@@ -220,6 +224,9 @@ bool MapViewController::isEventVisible(const CGHeroInstance * obj, const int3 &
 	if(!LOCPLINT->makingTurn && settings["adventure"]["enemyMoveTime"].Float() < 0)
 		return false; // enemy move speed set to "hidden/none"
 
+	if(GH.topInt() != adventureInt)
+		return false;
+
 	if(context->isVisible(obj->convertToVisitablePos(from)))
 		return true;
 

+ 3 - 2
client/widgets/CArtifactHolder.cpp

@@ -281,7 +281,6 @@ void CHeroArtPlace::select()
 		}
 	}
 
-	CCS->curh->dragAndDropCursor("artifact", ourArt->artType->getIconIndex());
 	ourOwner->commonInfo->src.setTo(this, false);
 	ourOwner->commonInfo->src.slotID = ArtifactPosition::TRANSITION_POS;
 
@@ -741,7 +740,9 @@ void CArtifactsOfHero::artifactMoved(const ArtifactLocation & src, const Artifac
 		}
 		if(!curHero->artifactsTransitionPos.empty() && withUIUpdate)
 		{
-			markPossibleSlots(curHero->getArt(ArtifactPosition::TRANSITION_POS));
+			auto artInst = curHero->getArt(ArtifactPosition::TRANSITION_POS);
+			markPossibleSlots(artInst);
+			CCS->curh->dragAndDropCursor("artifact", artInst->artType->getIconIndex());
 		}
 	}
 

+ 2 - 0
client/windows/CCastleInterface.cpp

@@ -1259,6 +1259,7 @@ void CCastleInterface::addBuilding(BuildingID bid)
 	builds->addBuilding(bid);
 	recreateIcons();
 	activate();
+	redraw();
 }
 
 void CCastleInterface::removeBuilding(BuildingID bid)
@@ -1267,6 +1268,7 @@ void CCastleInterface::removeBuilding(BuildingID bid)
 	builds->removeBuilding(bid);
 	recreateIcons();
 	activate();
+	redraw();
 }
 
 void CCastleInterface::recreateIcons()

+ 3 - 0
config/ai/object-priorities.txt

@@ -191,7 +191,10 @@ RuleBlock: gold reward
   rule: if armyReward is LOW and heroRole is MAIN and danger is NONE and mainTurnDistance is LOWEST then Value is HIGH
   rule: if skillReward is LOW and heroRole is MAIN and armyLoss is LOW then Value is BITHIGH
   rule: if skillReward is MEDIUM and heroRole is MAIN and armyLoss is LOW and fear is not HIGH then Value is BITHIGH
+  rule: if skillReward is MEDIUM and heroRole is MAIN and rewardType is MIXED and armyLoss is LOW and fear is not HIGH then Value is HIGH with 0.5
   rule: if skillReward is HIGH and heroRole is MAIN and armyLoss is LOW and fear is not HIGH then Value is HIGH
+  rule: if skillReward is MEDIUM and heroRole is SCOUT then Value is LOWEST
+  rule: if skillReward is HIGH and heroRole is SCOUT then Value is LOWEST
   rule: if strategicalValue is LOW and heroRole is MAIN and armyLoss is LOW then Value is BITHIGH
   rule: if strategicalValue is LOWEST and heroRole is MAIN and armyLoss is LOW then Value is LOW
   rule: if strategicalValue is LOW and heroRole is SCOUT and armyLoss is LOW and fear is not HIGH then Value is HIGH with 0.5

+ 1 - 4
config/bonuses.json

@@ -53,10 +53,7 @@
 	
 	"CATAPULT_EXTRA_SHOTS":
 	{
-		"graphics":
-		{
-			"icon":  "zvs/Lib1.res/Catapult"
-		}
+		"hidden": true
 	},
 
 	"CHANGES_SPELL_COST_FOR_ALLY":

+ 1 - 1
config/schemas/settings.json

@@ -451,7 +451,7 @@
 				"repositoryURL" : {
 					"type" : "array",
 					"default" : [
-						"https://raw.githubusercontent.com/vcmi/vcmi-mods-repository/develop/github.json"
+						"https://raw.githubusercontent.com/vcmi/vcmi-mods-repository/develop/vcmi-1.2.json"
 					],
 					"items" : {
 						"type" : "string"

+ 0 - 3
config/skills.json

@@ -385,19 +385,16 @@
 			}
 		},
 		"basic" : {
-			"description" : "{Basic Estates}\n\nYour hero contributes 125 gold per day to your cause.",
 			"effects" : {
 				"main" : { "val" : 125 }
 			}
 		},
 		"advanced" : {
-			"description" : "{Advanced Estates}\n\nYour hero contributes 250 gold per day to your cause.",
 			"effects" : {
 				"main" : { "val" : 250 }
 			}
 		},
 		"expert" : {
-			"description" : "{Expert Estates}\n\nYour hero contributes 500 gold per day to your cause.",
 			"effects" : {
 				"main" : { "val" : 500 }
 			}

+ 16 - 16
launcher/firstLaunch/firstlaunch_moc.ui

@@ -143,7 +143,7 @@
           </font>
          </property>
          <property name="text">
-          <string>Choose your language</string>
+          <string>Select your language</string>
          </property>
         </widget>
        </item>
@@ -193,7 +193,7 @@
          <item row="0" column="0" colspan="2">
           <widget class="QLabel" name="labelLanguageSocial">
            <property name="text">
-            <string>Have a question? Found a bug? Want to help? Join us:</string>
+            <string>Have a question? Found a bug? Want to help? Join us!</string>
            </property>
           </widget>
          </item>
@@ -202,13 +202,13 @@
        <item row="1" column="1" colspan="2">
         <widget class="QLabel" name="labelLanguageWelcome">
          <property name="text">
-          <string>Thanks for installing VCMI.
+          <string>Thank you for installing VCMI!
 
-There are a few more steps to be done before you can start playing.
+Before you can start playing, there are a few more steps that need to be completed.
 
-Keep in mind that in order to use VCMI you need to own original data files, Heroes III: Complete Edition or Shadow of Death.
+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 III: HD Edition is currently not supported</string>
+Heroes® of Might and Magic® III HD is currently not supported!</string>
          </property>
          <property name="wordWrap">
           <bool>true</bool>
@@ -273,7 +273,7 @@ Heroes III: HD Edition is currently not supported</string>
           </font>
          </property>
          <property name="text">
-          <string>Find Heroes III data files</string>
+          <string>Locate Heroes III data files</string>
          </property>
         </widget>
        </item>
@@ -362,7 +362,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>If you don't have installed Heroes III copy, it is possible to use our automatic installation tool 'vcmibuilder' to extract data from GoG.com installer. Visit our wiki for detailed instructions.</string>
+            <string>If you don't have a copy of Heroes III installed, you can use our automatic installation tool 'vcmibuilder', which only requires the GoG.com Heroes III installer. Please visit our wiki for detailed instructions.</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -378,7 +378,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</string>
+            <string>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.</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -413,7 +413,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</string>
+            <string>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy the existing data automatically.</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -482,7 +482,7 @@ Heroes III: HD Edition is currently not supported</string>
          <item row="2" column="0" colspan="2">
           <widget class="QLabel" name="labelDataFailure">
            <property name="text">
-            <string>Automatic detection of language failed. Please select language of your Heroes III copy</string>
+            <string>The automatic detection of the Heroes III language has failed. Please select the language of your Heroes III manually</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -756,7 +756,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Install translation of Heroes III to your language</string>
+            <string>Install a translation of Heroes III in your preferred language</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -772,7 +772,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Optionally, you can install additional mods either now or at any point later:</string>
+            <string>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -788,7 +788,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Install support for playing Heroes III in resolutions other than 800x600.</string>
+            <string>Install support for playing Heroes III in resolutions higher than 800x600</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -804,7 +804,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</string>
+            <string>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported by the VCMI team</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>
@@ -820,7 +820,7 @@ Heroes III: HD Edition is currently not supported</string>
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</string>
+            <string>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion</string>
            </property>
            <property name="wordWrap">
             <bool>true</bool>

+ 1 - 1
launcher/lobby/lobby_moc.ui

@@ -73,7 +73,7 @@
        <item>
         <widget class="QLabel" name="label_2">
          <property name="text">
-          <string>People in lobby</string>
+          <string>Players in lobby</string>
          </property>
         </widget>
        </item>

+ 5 - 5
launcher/modManager/cmodlistview_moc.cpp

@@ -316,11 +316,11 @@ QString CModListView::genModInfoText(CModEntry & mod)
 
 	result += "<p></p>"; // to get some empty space
 
-	QString unknownDeps = tr("This mod can not be installed or enabled because following dependencies are not present");
-	QString blockingMods = tr("This mod can not be enabled because following mods are incompatible with this mod");
-	QString hasActiveDependentMods = tr("This mod can not be disabled because it is required to run following mods");
-	QString hasDependentMods = tr("This mod can not be uninstalled or updated because it is required to run following mods");
-	QString thisIsSubmod = tr("This is submod and it can not be installed or uninstalled separately from parent mod");
+	QString unknownDeps = tr("This mod can not be installed or enabled because the following dependencies are not present");
+	QString blockingMods = tr("This mod can not be enabled because the following mods are incompatible with it");
+	QString hasActiveDependentMods = tr("This mod cannot be disabled because it is required by the following mods");
+	QString hasDependentMods = tr("This mod cannot be uninstalled or updated because it is required by the following mods");
+	QString thisIsSubmod = tr("This is a submod and it cannot be installed or uninstalled separately from its parent mod");
 
 	QString notes;
 

+ 67 - 67
launcher/translation/english.ts

@@ -279,27 +279,27 @@
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
-        <source>This mod can not be installed or enabled because following dependencies are not present</source>
+        <source>This mod can not be installed or enabled because the following dependencies are not present</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
-        <source>This mod can not be enabled because following mods are incompatible with this mod</source>
+        <source>This mod can not be enabled because the following mods are incompatible with it</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
-        <source>This mod can not be disabled because it is required to run following mods</source>
+        <source>This mod cannot be disabled because it is required by the following mods</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
-        <source>This mod can not be uninstalled or updated because it is required to run following mods</source>
+        <source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
-        <source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
+        <source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -541,29 +541,80 @@
         <source>Mods Preset</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
+        <source>Select your language</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
+        <source>Have a question? Found a bug? Want to help? Join us!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
+        <source>Locate Heroes III data files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
+        <source>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy the existing data automatically.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="445"/>
         <source>Your Heroes III data files have been successfully found.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
+        <source>The automatic detection of the Heroes III language has failed. Please select the language of your Heroes III manually</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
+        <source>Install a translation of Heroes III in your preferred language</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="775"/>
-        <source>Optionally, you can install additional mods either now or at any point later:</source>
+        <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="791"/>
-        <source>Install support for playing Heroes III in resolutions other than 800x600.</source>
+        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="807"/>
-        <source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
+        <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="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="823"/>
-        <source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
+        <source>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -576,11 +627,6 @@
         <source>Step %v out of %m</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
-        <source>Choose your language</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="175"/>
         <source>VCMI on Github</source>
@@ -596,33 +642,12 @@
         <source>VCMI on Discord</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
-        <source>Have a question? Found a bug? Want to help? Join us:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
-        <source>Thanks for installing VCMI.
-
-There are a few more steps to be done before you can start playing.
-
-Keep in mind that in order to use VCMI you need to own original data files, Heroes III: Complete Edition or Shadow of Death.
-
-Heroes III: HD Edition is currently not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="239"/>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="554"/>
         <source>Next</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
-        <source>Find Heroes III data files</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="307"/>
         <source>Open help in browser</source>
@@ -633,26 +658,11 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Search again</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
-        <source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
-        <source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="403"/>
         <source>Heroes III data files</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
-        <source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="432"/>
         <source>Copy existing data</source>
@@ -663,11 +673,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Your Heroes III language has been successfully detected.</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
-        <source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="504"/>
         <source>Heroes III language</source>
@@ -704,11 +709,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>In The Wake of Gods</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
-        <source>Install translation of Heroes III to your language</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>ImageViewer</name>
@@ -804,11 +804,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Server</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../lobby/lobby_moc.ui" line="76"/>
-        <source>People in lobby</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="114"/>
         <source>Lobby chat</source>
@@ -844,6 +839,11 @@ Heroes III: HD Edition is currently not supported</source>
         <source>New room</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../lobby/lobby_moc.ui" line="76"/>
+        <source>Players in lobby</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="159"/>
         <source>Join room</source>
@@ -945,7 +945,7 @@ Heroes III: HD Edition is currently not supported</source>
     <name>UpdateDialog</name>
     <message>
         <location filename="../updatedialog_moc.ui" line="71"/>
-        <source>You have latest version</source>
+        <source>You have the latest version</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -955,7 +955,7 @@ Heroes III: HD Edition is currently not supported</source>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="101"/>
-        <source>Check updates on startup</source>
+        <source>Check for updates on startup</source>
         <translation type="unfinished"></translation>
     </message>
 </context>

+ 84 - 84
launcher/translation/german.ts

@@ -279,28 +279,28 @@
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
-        <source>This mod can not be installed or enabled because following dependencies are not present</source>
-        <translation>Diese Mod kann nicht installiert oder aktiviert werden, da die folgenden Abhängigkeiten nicht vorhanden sind</translation>
+        <source>This mod can not be installed or enabled because the following dependencies are not present</source>
+        <translation type="unfinished">Diese Mod kann nicht installiert oder aktiviert werden, da die folgenden Abhängigkeiten nicht vorhanden sind</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
-        <source>This mod can not be enabled because following mods are incompatible with this mod</source>
-        <translation>Diese Mod kann nicht aktiviert werden, da folgende Mods nicht mit dieser Mod kompatibel sind</translation>
+        <source>This mod can not be enabled because the following mods are incompatible with it</source>
+        <translation type="unfinished">Diese Mod kann nicht aktiviert werden, da folgende Mods nicht mit dieser Mod kompatibel sind</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
-        <source>This mod can not be disabled because it is required to run following mods</source>
-        <translation>Diese Mod kann nicht deaktiviert werden, da sie zum Ausführen der folgenden Mods erforderlich ist</translation>
+        <source>This mod cannot be disabled because it is required by the following mods</source>
+        <translation type="unfinished">Diese Mod kann nicht deaktiviert werden, da sie zum Ausführen der folgenden Mods erforderlich ist</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
-        <source>This mod can not be uninstalled or updated because it is required to run following mods</source>
-        <translation>Diese Mod kann nicht deinstalliert oder aktualisiert werden, da sie für die folgenden Mods erforderlich ist</translation>
+        <source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
+        <translation type="unfinished">Diese Mod kann nicht deinstalliert oder aktualisiert werden, da sie für die folgenden Mods erforderlich ist</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
-        <source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
-        <translation>Dies ist eine Submod und kann nicht separat von der Hauptmod installiert oder deinstalliert werden</translation>
+        <source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
+        <translation type="unfinished">Dies ist eine Submod und kann nicht separat von der Hauptmod installiert oder deinstalliert werden</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="338"/>
@@ -541,30 +541,87 @@
         <source>Mods Preset</source>
         <translation>Mods Voreinstellung</translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
+        <source>Select your language</source>
+        <translation type="unfinished">Wählen Sie Ihre Sprache</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
+        <source>Have a question? Found a bug? Want to help? Join us!</source>
+        <translation type="unfinished">Haben Sie eine Frage? Einen Fehler gefunden? Möchten Sie helfen? Machen Sie mit:</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
+        <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="unfinished">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>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
+        <source>Locate Heroes III data files</source>
+        <translation type="unfinished">Heroes III Daten suchen</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
+        <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="unfinished">Wenn Sie keine Kopie von Heroes III installiert haben, können Sie unser automatisches Installationstool &apos;vcmibuilder&apos; verwenden, um Daten aus dem GoG.com-Installationsprogramm zu extrahieren. Besuchen Sie unser Wiki für detaillierte Anweisungen.</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
+        <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="unfinished">VCMI benötigt Heroes III Daten in einem der oben aufgeführten Verzeichnisse. Bitte kopieren Sie die Heroes III-Daten in eines dieser Verzeichnisse.</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
+        <source>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy the existing data automatically.</source>
+        <translation type="unfinished">Alternativ können Sie ein Verzeichnis mit installierten Heroes III-Daten auswählen, und VCMI wird die vorhandenen Daten automatisch kopieren.</translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="445"/>
         <source>Your Heroes III data files have been successfully found.</source>
         <translation>Ihre Heroes III-Datendateien wurden erfolgreich gefunden.</translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
+        <source>The automatic detection of the Heroes III language has failed. Please select the language of your Heroes III manually</source>
+        <translation type="unfinished">Automatische Erkennung der Sprache fehlgeschlagen. Bitte wählen Sie die Sprache Ihrer Heroes III Kopie</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
+        <source>Install a translation of Heroes III in your preferred language</source>
+        <translation type="unfinished">Übersetzung von Heroes III für Ihre Sprache installieren</translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="775"/>
-        <source>Optionally, you can install additional mods either now or at any point later:</source>
-        <translation>Optional können Sie jetzt oder zu einem beliebigen späteren Zeitpunkt zusätzliche Mods installieren:</translation>
+        <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</source>
+        <translation type="unfinished">Optional können Sie jetzt oder zu einem beliebigen späteren Zeitpunkt zusätzliche Mods installieren:</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="791"/>
-        <source>Install support for playing Heroes III in resolutions other than 800x600.</source>
-        <translation>Installieren Sie Unterstützung für das Spielen von Heroes III in anderen Auflösungen als 800x600.</translation>
+        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
+        <translation type="unfinished">Installieren Sie Unterstützung für das Spielen von Heroes III in anderen Auflösungen als 800x600.</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="807"/>
-        <source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
-        <translation>Installieren Sie die kompatible Version des Addons Horn of the Abyss: eine von Fans entwickelte Heroes III-Erweiterung, portiert vom VCMI-Team</translation>
+        <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="unfinished">Installieren Sie die kompatible Version des Addons Horn of the Abyss: eine von Fans entwickelte Heroes III-Erweiterung, portiert vom VCMI-Team</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="823"/>
-        <source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
-        <translation>Installieren Sie die kompatible Version des Addons &quot;In The Wake of Gods&quot;: von Fans entwickelte Heroes III-Erweiterung</translation>
+        <source>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion</source>
+        <translation type="unfinished">Installieren Sie die kompatible Version des Addons &quot;In The Wake of Gods&quot;: von Fans entwickelte Heroes III-Erweiterung</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="870"/>
@@ -576,11 +633,6 @@
         <source>Step %v out of %m</source>
         <translation>Schritt %v von %m</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
-        <source>Choose your language</source>
-        <translation>Wählen Sie Ihre Sprache</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="175"/>
         <source>VCMI on Github</source>
@@ -596,39 +648,12 @@
         <source>VCMI on Discord</source>
         <translation>VCMI auf Discord</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
-        <source>Have a question? Found a bug? Want to help? Join us:</source>
-        <translation>Haben Sie eine Frage? Einen Fehler gefunden? Möchten Sie helfen? Machen Sie mit:</translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
-        <source>Thanks for installing VCMI.
-
-There are a few more steps to be done before you can start playing.
-
-Keep in mind that in order to use VCMI you need to own original data files, Heroes III: Complete Edition or Shadow of Death.
-
-Heroes III: HD Edition is currently not supported</source>
-        <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>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="239"/>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="554"/>
         <source>Next</source>
         <translation>Weiter</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
-        <source>Find Heroes III data files</source>
-        <translation>Heroes III Daten suchen</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="307"/>
         <source>Open help in browser</source>
@@ -639,26 +664,11 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
         <source>Search again</source>
         <translation>Erneut suchen</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
-        <source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
-        <translation>Wenn Sie keine Kopie von Heroes III installiert haben, können Sie unser automatisches Installationstool &apos;vcmibuilder&apos; verwenden, um Daten aus dem GoG.com-Installationsprogramm zu extrahieren. Besuchen Sie unser Wiki für detaillierte Anweisungen.</translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
-        <source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
-        <translation>VCMI benötigt Heroes III Daten in einem der oben aufgeführten Verzeichnisse. Bitte kopieren Sie die Heroes III-Daten in eines dieser Verzeichnisse.</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="403"/>
         <source>Heroes III data files</source>
         <translation>Heroes III Dateien</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
-        <source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
-        <translation>Alternativ können Sie ein Verzeichnis mit installierten Heroes III-Daten auswählen, und VCMI wird die vorhandenen Daten automatisch kopieren.</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="432"/>
         <source>Copy existing data</source>
@@ -669,11 +679,6 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
         <source>Your Heroes III language has been successfully detected.</source>
         <translation>Ihre Heroes III-Sprache wurde erfolgreich erkannt.</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
-        <source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
-        <translation>Automatische Erkennung der Sprache fehlgeschlagen. Bitte wählen Sie die Sprache Ihrer Heroes III Kopie</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="504"/>
         <source>Heroes III language</source>
@@ -710,11 +715,6 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
         <source>In The Wake of Gods</source>
         <translation>In The Wake of Gods</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
-        <source>Install translation of Heroes III to your language</source>
-        <translation>Übersetzung von Heroes III für Ihre Sprache installieren</translation>
-    </message>
 </context>
 <context>
     <name>ImageViewer</name>
@@ -810,11 +810,6 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
         <source>Server</source>
         <translation>Server</translation>
     </message>
-    <message>
-        <location filename="../lobby/lobby_moc.ui" line="76"/>
-        <source>People in lobby</source>
-        <translation>Personen in der Lobby</translation>
-    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="114"/>
         <source>Lobby chat</source>
@@ -850,6 +845,11 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
         <source>New room</source>
         <translation>Neuer Raum</translation>
     </message>
+    <message>
+        <location filename="../lobby/lobby_moc.ui" line="76"/>
+        <source>Players in lobby</source>
+        <translation type="unfinished">Personen in der Lobby</translation>
+    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="159"/>
         <source>Join room</source>
@@ -951,8 +951,8 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
     <name>UpdateDialog</name>
     <message>
         <location filename="../updatedialog_moc.ui" line="71"/>
-        <source>You have latest version</source>
-        <translation>Sie haben die neueste Version</translation>
+        <source>You have the latest version</source>
+        <translation type="unfinished">Sie haben die neueste Version</translation>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="94"/>
@@ -961,8 +961,8 @@ Heroes III: HD Edition wird derzeit nicht unterstützt</translation>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="101"/>
-        <source>Check updates on startup</source>
-        <translation>Nach Aktualisierungen beim Starten prüfen</translation>
+        <source>Check for updates on startup</source>
+        <translation type="unfinished">Nach Aktualisierungen beim Starten prüfen</translation>
     </message>
 </context>
 </TS>

+ 110 - 104
launcher/translation/polish.ts

@@ -6,96 +6,96 @@
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="42"/>
         <source>Translation</source>
-        <translation type="unfinished"></translation>
+        <translation>Tłumaczenie</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="43"/>
         <source>Town</source>
-        <translation type="unfinished"></translation>
+        <translation>Miasto</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="44"/>
         <source>Test</source>
-        <translation type="unfinished"></translation>
+        <translation>Test</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="45"/>
         <source>Templates</source>
-        <translation type="unfinished"></translation>
+        <translation>Szablony</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="46"/>
         <source>Spells</source>
-        <translation type="unfinished"></translation>
+        <translation>Zaklęcia</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="47"/>
         <source>Music</source>
-        <translation type="unfinished"></translation>
+        <translation>Muzyczny</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="48"/>
         <source>Sounds</source>
-        <translation type="unfinished"></translation>
+        <translation>Dźwięki</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="49"/>
         <source>Skills</source>
-        <translation type="unfinished"></translation>
+        <translation>Umiejętności</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="50"/>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="67"/>
         <source>Other</source>
-        <translation type="unfinished"></translation>
+        <translation>Inne</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="51"/>
         <source>Objects</source>
-        <translation type="unfinished"></translation>
+        <translation>Obiekty</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="52"/>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="53"/>
         <source>Mechanics</source>
-        <translation type="unfinished"></translation>
+        <translation>Mechaniki</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="54"/>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="55"/>
         <source>Interface</source>
-        <translation type="unfinished"></translation>
+        <translation>Interfejs</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="56"/>
         <source>Heroes</source>
-        <translation type="unfinished"></translation>
+        <translation>Bohaterowie</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="57"/>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="58"/>
         <source>Graphical</source>
-        <translation type="unfinished"></translation>
+        <translation>Graficzny</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="59"/>
         <source>Expansion</source>
-        <translation type="unfinished"></translation>
+        <translation>Dodatek</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="60"/>
         <source>Creatures</source>
-        <translation type="unfinished"></translation>
+        <translation>Stworzenia</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="61"/>
         <source>Artifacts</source>
-        <translation type="unfinished"></translation>
+        <translation>Artefakty</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="62"/>
         <source>AI</source>
-        <translation type="unfinished"></translation>
+        <translation>AI</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="170"/>
@@ -265,7 +265,7 @@
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
         <source>Languages</source>
-        <translation type="unfinished"></translation>
+        <translation>Języki</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
@@ -279,28 +279,28 @@
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
-        <source>This mod can not be installed or enabled because following dependencies are not present</source>
-        <translation>Ten mod nie może zostać zainstalowany lub włączony ponieważ następujące zależności nie zostały spełnione</translation>
+        <source>This mod can not be installed or enabled because the following dependencies are not present</source>
+        <translation type="unfinished">Ten mod nie może zostać zainstalowany lub włączony ponieważ następujące zależności nie zostały spełnione</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
-        <source>This mod can not be enabled because following mods are incompatible with this mod</source>
-        <translation>Ten mod nie może zostać włączony ponieważ następujące mody są z nim niekompatybilne</translation>
+        <source>This mod can not be enabled because the following mods are incompatible with it</source>
+        <translation type="unfinished">Ten mod nie może zostać włączony ponieważ następujące mody są z nim niekompatybilne</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
-        <source>This mod can not be disabled because it is required to run following mods</source>
-        <translation>Ten mod nie może zostać wyłączony ponieważ jest wymagany by do uruchomienia następujących modów</translation>
+        <source>This mod cannot be disabled because it is required by the following mods</source>
+        <translation type="unfinished">Ten mod nie może zostać wyłączony ponieważ jest wymagany by do uruchomienia następujących modów</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
-        <source>This mod can not be uninstalled or updated because it is required to run following mods</source>
-        <translation>Ten mod nie może zostać odinstalowany lub zaktualizowany ponieważ jest wymagany do uruchomienia następujących modów</translation>
+        <source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
+        <translation type="unfinished">Ten mod nie może zostać odinstalowany lub zaktualizowany ponieważ jest wymagany do uruchomienia następujących modów</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
-        <source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
-        <translation>To jest moduł składowy innego moda i nie może być zainstalowany lub odinstalowany oddzielnie od moda nadrzędnego</translation>
+        <source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
+        <translation type="unfinished">To jest moduł składowy innego moda i nie może być zainstalowany lub odinstalowany oddzielnie od moda nadrzędnego</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="338"/>
@@ -541,30 +541,87 @@
         <source>Mods Preset</source>
         <translation>Zestaw modów</translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
+        <source>Select your language</source>
+        <translation type="unfinished">Wybierz język</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
+        <source>Have a question? Found a bug? Want to help? Join us!</source>
+        <translation type="unfinished">Masz pytanie? Znalazłeś błąd? Chcesz pomóc? Dołącz do nas!</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
+        <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="unfinished">Dziękujemy za zainstalowanie VCMI.
+
+Jest jeszcze kilka kroków, które trzeba wykonać żeby móc zagrać.
+
+Miej na uwadze, że aby używać VCMI potrzebne są pliki oryginalnej gry zawierające przynajmniej dodatek The Shadow of Death (Złota Edycja / Complete też się kwalifikują)
+
+Heroes III: HD Edition nie jest obecnie wspierane!</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
+        <source>Locate Heroes III data files</source>
+        <translation type="unfinished">Znajdź pliki Heroes III</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
+        <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="unfinished">Jeśli nie masz zainstalowanej kopii Heroes III istnieje możliwość użycia naszego automatycznego narzędzia instalacyjnego &apos;vcmibuilder&apos; by wyodrębnić dane z instalatora GoG.com. Odwiedź nasze wiki po szczegółowe instrukcje.</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
+        <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="unfinished">VCMI wymaga plików Heroes III w jednej z wymienionych wyżej lokalizacji. Proszę, skopiuj pliki Heroes III do jednego z tych katalogów.</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
+        <source>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy the existing data automatically.</source>
+        <translation type="unfinished">Możesz też wybrać folder z zainstalowanym Heroes III i VCMI automatycznie skopiuje istniejące dane.</translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="445"/>
         <source>Your Heroes III data files have been successfully found.</source>
         <translation>Twoje pliki Heroes III zostały pomyślnie znalezione.</translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
+        <source>The automatic detection of the Heroes III language has failed. Please select the language of your Heroes III manually</source>
+        <translation type="unfinished">Automatyczna detekcja języka nie powiodła się. Proszę wybrać język twojego Heroes III</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
+        <source>Install a translation of Heroes III in your preferred language</source>
+        <translation type="unfinished">Zainstaluj tłumaczenie Heroes III dla twojego języka</translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="775"/>
-        <source>Optionally, you can install additional mods either now or at any point later:</source>
-        <translation>Opcjonalnie możesz zainstalować dodatkowe modyfikacje teraz lub później:</translation>
+        <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</source>
+        <translation type="unfinished">Opcjonalnie możesz zainstalować dodatkowe modyfikacje teraz lub później</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="791"/>
-        <source>Install support for playing Heroes III in resolutions other than 800x600.</source>
-        <translation>Zapinstaluj wsparcie dla grania w Heroes III w rozdzielczości innej niż 800x600.</translation>
+        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
+        <translation type="unfinished">Zapinstaluj wsparcie dla grania w Heroes III w rozdzielczości innej niż 800x600</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="807"/>
-        <source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
-        <translation>Zainstaluj kompatybilną wersję fanowskiego dodatku Horn of the Abyss przeportowaną przez zespół VCMI</translation>
+        <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="unfinished">Zainstaluj kompatybilną wersję fanowskiego dodatku Horn of the Abyss odtworzoną przez zespół VCMI</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="823"/>
-        <source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
-        <translation>Zainstaluj kompatybilną wersję fanowskiego dodatku &quot;In The Wake Of Gods&quot;</translation>
+        <source>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion</source>
+        <translation type="unfinished">Zainstaluj kompatybilną wersję fanowskiego dodatku &quot;In The Wake Of Gods&quot;</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="870"/>
@@ -576,41 +633,20 @@
         <source>Step %v out of %m</source>
         <translation>Krok %v z %m</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
-        <source>Choose your language</source>
-        <translation>Wybierz język</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="175"/>
         <source>VCMI on Github</source>
-        <translation type="unfinished"></translation>
+        <translation>VCMI na Github</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="182"/>
         <source>VCMI on Slack</source>
-        <translation type="unfinished"></translation>
+        <translation>VCMI na Slacku</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="189"/>
         <source>VCMI on Discord</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
-        <source>Have a question? Found a bug? Want to help? Join us:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
-        <source>Thanks for installing VCMI.
-
-There are a few more steps to be done before you can start playing.
-
-Keep in mind that in order to use VCMI you need to own original data files, Heroes III: Complete Edition or Shadow of Death.
-
-Heroes III: HD Edition is currently not supported</source>
-        <translation type="unfinished"></translation>
+        <translation>VCMI na Discordzie</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="239"/>
@@ -618,11 +654,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Next</source>
         <translation>Dalej</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
-        <source>Find Heroes III data files</source>
-        <translation>Znajdź pliki Heroes III</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="307"/>
         <source>Open help in browser</source>
@@ -633,26 +664,11 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Search again</source>
         <translation>Szukaj ponownie</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
-        <source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
-        <translation>Jeśli nie masz zainstalowanej kopii Heroes III istnieje możliwość użycia naszego automatycznego narzędzia instalacyjnego &apos;vcmibuilder&apos; by wyodrębnić dane z instalatora GoG.com. Odwiedź nasze wiki po szczegółowe instrukcje.</translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
-        <source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
-        <translation>VCMI wymaga plików Heroes III w jednej z wymienionych wyżej lokalizacji. Proszę, skopiuj pliki Heroes III do jednego z tych katalogów.</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="403"/>
         <source>Heroes III data files</source>
         <translation>Pliki Heroes III</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
-        <source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
-        <translation>Możesz też wybrać folder z zainstalowanym Heroes III i VCMI automatycznie skopiuje istniejące dane.</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="432"/>
         <source>Copy existing data</source>
@@ -663,11 +679,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Your Heroes III language has been successfully detected.</source>
         <translation>Twój język Heroes III został pomyślnie wykryty.</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
-        <source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
-        <translation>Automatyczna detekcja języka nie powiodła się. Proszę wybrać język twojego Heroes III</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="504"/>
         <source>Heroes III language</source>
@@ -687,27 +698,22 @@ Heroes III: HD Edition is currently not supported</source>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="635"/>
         <source>Horn of the Abyss</source>
-        <translation type="unfinished"></translation>
+        <translation>Horn of the Abyss</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="657"/>
         <source>Heroes III Translation</source>
-        <translation type="unfinished">Tłumaczenie Heroes III</translation>
+        <translation>Tłumaczenie Heroes III</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="721"/>
         <source>High Definition Support</source>
-        <translation type="unfinished"></translation>
+        <translation>Wsparcie High Definition</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="743"/>
         <source>In The Wake of Gods</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
-        <source>Install translation of Heroes III to your language</source>
-        <translation>Zainstaluj tłumaczenie Heroes III dla twojego języka</translation>
+        <translation>In The Wake of Gods</translation>
     </message>
 </context>
 <context>
@@ -804,11 +810,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Server</source>
         <translation>Serwer</translation>
     </message>
-    <message>
-        <location filename="../lobby/lobby_moc.ui" line="76"/>
-        <source>People in lobby</source>
-        <translation>Ludzie w lobby</translation>
-    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="114"/>
         <source>Lobby chat</source>
@@ -844,6 +845,11 @@ Heroes III: HD Edition is currently not supported</source>
         <source>New room</source>
         <translation>Nowy pokój</translation>
     </message>
+    <message>
+        <location filename="../lobby/lobby_moc.ui" line="76"/>
+        <source>Players in lobby</source>
+        <translation type="unfinished">Ludzie w lobby</translation>
+    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="159"/>
         <source>Join room</source>
@@ -945,8 +951,8 @@ Heroes III: HD Edition is currently not supported</source>
     <name>UpdateDialog</name>
     <message>
         <location filename="../updatedialog_moc.ui" line="71"/>
-        <source>You have latest version</source>
-        <translation>Posiadasz obecnie aktualną wersję</translation>
+        <source>You have the latest version</source>
+        <translation type="unfinished">Posiadasz obecnie aktualną wersję</translation>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="94"/>
@@ -955,8 +961,8 @@ Heroes III: HD Edition is currently not supported</source>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="101"/>
-        <source>Check updates on startup</source>
-        <translation>Sprawdź aktualizacje przy uruchomieniu</translation>
+        <source>Check for updates on startup</source>
+        <translation type="unfinished">Sprawdź aktualizacje przy uruchomieniu</translation>
     </message>
 </context>
 </TS>

+ 74 - 74
launcher/translation/russian.ts

@@ -279,28 +279,28 @@
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
-        <source>This mod can not be installed or enabled because following dependencies are not present</source>
-        <translation>Этот мод не может быть установлен или активирован, так как отсутствуют следующие зависимости</translation>
+        <source>This mod can not be installed or enabled because the following dependencies are not present</source>
+        <translation type="unfinished">Этот мод не может быть установлен или активирован, так как отсутствуют следующие зависимости</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
-        <source>This mod can not be enabled because following mods are incompatible with this mod</source>
-        <translation>Этот мод не может быть установлен или активирован, так как следующие моды несовместимы с этим</translation>
+        <source>This mod can not be enabled because the following mods are incompatible with it</source>
+        <translation type="unfinished">Этот мод не может быть установлен или активирован, так как следующие моды несовместимы с этим</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
-        <source>This mod can not be disabled because it is required to run following mods</source>
-        <translation>Этот мод не может быть выключен, так как он является зависимостью для следующих</translation>
+        <source>This mod cannot be disabled because it is required by the following mods</source>
+        <translation type="unfinished">Этот мод не может быть выключен, так как он является зависимостью для следующих</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
-        <source>This mod can not be uninstalled or updated because it is required to run following mods</source>
-        <translation>Этот мод не может быть удален или обновлен, так как является зависимостью для следующих модов</translation>
+        <source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
+        <translation type="unfinished">Этот мод не может быть удален или обновлен, так как является зависимостью для следующих модов</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
-        <source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
-        <translation>Это вложенный мод, он не может быть установлен или удален отдельно от родительского</translation>
+        <source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
+        <translation type="unfinished">Это вложенный мод, он не может быть установлен или удален отдельно от родительского</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="338"/>
@@ -541,29 +541,80 @@
         <source>Mods Preset</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
+        <source>Select your language</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
+        <source>Have a question? Found a bug? Want to help? Join us!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
+        <source>Locate Heroes III data files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
+        <source>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy the existing data automatically.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="445"/>
         <source>Your Heroes III data files have been successfully found.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
+        <source>The automatic detection of the Heroes III language has failed. Please select the language of your Heroes III manually</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
+        <source>Install a translation of Heroes III in your preferred language</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="775"/>
-        <source>Optionally, you can install additional mods either now or at any point later:</source>
+        <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="791"/>
-        <source>Install support for playing Heroes III in resolutions other than 800x600.</source>
+        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="807"/>
-        <source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
+        <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="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="823"/>
-        <source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
+        <source>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -576,11 +627,6 @@
         <source>Step %v out of %m</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
-        <source>Choose your language</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="175"/>
         <source>VCMI on Github</source>
@@ -596,33 +642,12 @@
         <source>VCMI on Discord</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
-        <source>Have a question? Found a bug? Want to help? Join us:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
-        <source>Thanks for installing VCMI.
-
-There are a few more steps to be done before you can start playing.
-
-Keep in mind that in order to use VCMI you need to own original data files, Heroes III: Complete Edition or Shadow of Death.
-
-Heroes III: HD Edition is currently not supported</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="239"/>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="554"/>
         <source>Next</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
-        <source>Find Heroes III data files</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="307"/>
         <source>Open help in browser</source>
@@ -633,26 +658,11 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Search again</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
-        <source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
-        <source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="403"/>
         <source>Heroes III data files</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
-        <source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="432"/>
         <source>Copy existing data</source>
@@ -663,11 +673,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Your Heroes III language has been successfully detected.</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
-        <source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="504"/>
         <source>Heroes III language</source>
@@ -704,11 +709,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>In The Wake of Gods</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
-        <source>Install translation of Heroes III to your language</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>ImageViewer</name>
@@ -804,11 +804,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Server</source>
         <translation>Сервер</translation>
     </message>
-    <message>
-        <location filename="../lobby/lobby_moc.ui" line="76"/>
-        <source>People in lobby</source>
-        <translation>Люди в лобби</translation>
-    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="114"/>
         <source>Lobby chat</source>
@@ -844,6 +839,11 @@ Heroes III: HD Edition is currently not supported</source>
         <source>New room</source>
         <translation>Создать комнату</translation>
     </message>
+    <message>
+        <location filename="../lobby/lobby_moc.ui" line="76"/>
+        <source>Players in lobby</source>
+        <translation type="unfinished">Люди в лобби</translation>
+    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="159"/>
         <source>Join room</source>
@@ -945,8 +945,8 @@ Heroes III: HD Edition is currently not supported</source>
     <name>UpdateDialog</name>
     <message>
         <location filename="../updatedialog_moc.ui" line="71"/>
-        <source>You have latest version</source>
-        <translation>У вас уже последняя версия</translation>
+        <source>You have the latest version</source>
+        <translation type="unfinished">У вас уже последняя версия</translation>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="94"/>
@@ -955,8 +955,8 @@ Heroes III: HD Edition is currently not supported</source>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="101"/>
-        <source>Check updates on startup</source>
-        <translation>Проверять обновления при запуске</translation>
+        <source>Check for updates on startup</source>
+        <translation type="unfinished">Проверять обновления при запуске</translation>
     </message>
 </context>
 </TS>

+ 63 - 63
launcher/translation/spanish.ts

@@ -279,28 +279,28 @@
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
-        <source>This mod can not be installed or enabled because following dependencies are not present</source>
-        <translation>Este mod no se puede instalar o habilitar porque no están presentes las siguientes dependencias</translation>
+        <source>This mod can not be installed or enabled because the following dependencies are not present</source>
+        <translation type="unfinished">Este mod no se puede instalar o habilitar porque no están presentes las siguientes dependencias</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
-        <source>This mod can not be enabled because following mods are incompatible with this mod</source>
-        <translation>Este mod no se puede habilitar porque los siguientes mods son incompatibles con él</translation>
+        <source>This mod can not be enabled because the following mods are incompatible with it</source>
+        <translation type="unfinished">Este mod no se puede habilitar porque los siguientes mods son incompatibles con él</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
-        <source>This mod can not be disabled because it is required to run following mods</source>
-        <translation>No se puede desactivar este mod porque es necesario para ejecutar los siguientes mods</translation>
+        <source>This mod cannot be disabled because it is required by the following mods</source>
+        <translation type="unfinished">No se puede desactivar este mod porque es necesario para ejecutar los siguientes mods</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
-        <source>This mod can not be uninstalled or updated because it is required to run following mods</source>
-        <translation>No se puede desinstalar o actualizar este mod porque es necesario para ejecutar los siguientes mods</translation>
+        <source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
+        <translation type="unfinished">No se puede desinstalar o actualizar este mod porque es necesario para ejecutar los siguientes mods</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
-        <source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
-        <translation>Este es un submod y no se puede instalar o desinstalar por separado del mod principal</translation>
+        <source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
+        <translation type="unfinished">Este es un submod y no se puede instalar o desinstalar por separado del mod principal</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="338"/>
@@ -546,11 +546,6 @@
         <source>Step %v out of %m</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
-        <source>Choose your language</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="175"/>
         <source>VCMI on Github</source>
@@ -567,80 +562,85 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
-        <source>Have a question? Found a bug? Want to help? Join us:</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="239"/>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="554"/>
+        <source>Next</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
-        <source>Thanks for installing VCMI.
-
-There are a few more steps to be done before you can start playing.
-
-Keep in mind that in order to use VCMI you need to own original data files, Heroes III: Complete Edition or Shadow of Death.
-
-Heroes III: HD Edition is currently not supported</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="307"/>
+        <source>Open help in browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="239"/>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="554"/>
-        <source>Next</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="320"/>
+        <source>Search again</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
-        <source>Find Heroes III data files</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="403"/>
+        <source>Heroes III data files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="307"/>
-        <source>Open help in browser</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="432"/>
+        <source>Copy existing data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="320"/>
-        <source>Search again</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="445"/>
+        <source>Your Heroes III data files have been successfully found.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
-        <source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="475"/>
+        <source>Your Heroes III language has been successfully detected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
-        <source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
+        <source>Select your language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="403"/>
-        <source>Heroes III data files</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
+        <source>Have a question? Found a bug? Want to help? Join us!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
-        <source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
+        <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="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="432"/>
-        <source>Copy existing data</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
+        <source>Locate Heroes III data files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="445"/>
-        <source>Your Heroes III data files have been successfully found.</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
+        <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="unfinished"></translation>
     </message>
     <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="475"/>
-        <source>Your Heroes III language has been successfully detected.</source>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
+        <source>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy the existing data automatically.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
-        <source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
+        <source>The automatic detection of the Heroes III language has failed. Please select the language of your Heroes III manually</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -681,27 +681,27 @@ Heroes III: HD Edition is currently not supported</source>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
-        <source>Install translation of Heroes III to your language</source>
+        <source>Install a translation of Heroes III in your preferred language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="775"/>
-        <source>Optionally, you can install additional mods either now or at any point later:</source>
+        <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="791"/>
-        <source>Install support for playing Heroes III in resolutions other than 800x600.</source>
+        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="807"/>
-        <source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
+        <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="unfinished"></translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="823"/>
-        <source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
+        <source>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -804,11 +804,6 @@ Heroes III: HD Edition is currently not supported</source>
         <source>Server</source>
         <translation>Servidor</translation>
     </message>
-    <message>
-        <location filename="../lobby/lobby_moc.ui" line="76"/>
-        <source>People in lobby</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="114"/>
         <source>Lobby chat</source>
@@ -844,6 +839,11 @@ Heroes III: HD Edition is currently not supported</source>
         <source>New room</source>
         <translation>Nueva sala</translation>
     </message>
+    <message>
+        <location filename="../lobby/lobby_moc.ui" line="76"/>
+        <source>Players in lobby</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="159"/>
         <source>Join room</source>
@@ -945,8 +945,8 @@ Heroes III: HD Edition is currently not supported</source>
     <name>UpdateDialog</name>
     <message>
         <location filename="../updatedialog_moc.ui" line="71"/>
-        <source>You have latest version</source>
-        <translation>Tienes la última versión</translation>
+        <source>You have the latest version</source>
+        <translation type="unfinished">Tienes la última versión</translation>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="94"/>
@@ -955,8 +955,8 @@ Heroes III: HD Edition is currently not supported</source>
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="101"/>
-        <source>Check updates on startup</source>
-        <translation>Comprobar actualizaciones al iniciar</translation>
+        <source>Check for updates on startup</source>
+        <translation type="unfinished">Comprobar actualizaciones al iniciar</translation>
     </message>
 </context>
 </TS>

+ 77 - 77
launcher/translation/ukrainian.ts

@@ -279,27 +279,27 @@
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
-        <source>This mod can not be installed or enabled because following dependencies are not present</source>
+        <source>This mod can not be installed or enabled because the following dependencies are not present</source>
         <translation>Цю модифікацію не можна встановити чи активувати, оскільки відсутні наступні залежності</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
-        <source>This mod can not be enabled because following mods are incompatible with this mod</source>
+        <source>This mod can not be enabled because the following mods are incompatible with it</source>
         <translation>Цю модифікацію не можна ввімкнути, оскільки наступні модифікації несумісні з цією модифікацією</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
-        <source>This mod can not be disabled because it is required to run following mods</source>
+        <source>This mod cannot be disabled because it is required by the following mods</source>
         <translation>Цю модифікацію не можна відключити, оскільки вона необхідна для запуску наступних модифікацій</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
-        <source>This mod can not be uninstalled or updated because it is required to run following mods</source>
+        <source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
         <translation>Цю модифікацію не можна видалити або оновити, оскільки вона необхідна для запуску наступних модифікацій</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
-        <source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
+        <source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
         <translation>Це вкладена модифікація, і її не можна встановити або видалити окремо від батьківської модифікації</translation>
     </message>
     <message>
@@ -541,30 +541,87 @@
         <source>Mods Preset</source>
         <translation>Початкові модифікації</translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
+        <source>Select your language</source>
+        <translation>Оберіть свою мову</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
+        <source>Have a question? Found a bug? Want to help? Join us!</source>
+        <translation>Маєте питання? Виявили помилку? Хочете допомогти? Приєднуйтесь до нас!</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
+        <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>Дякуємо, що встановили VCMI.
+
+Залишилося зробити ще кілька кроків, перш ніж ви зможете почати грати.
+
+Майте на увазі, що для використання VCMI вам потрібно мати оригінальні файли гри Heroes® of Might and Magic® III: Complete або The Shadow of Death.
+
+Heroes® of Might and Magic® III HD наразі не підтримується!</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
+        <source>Locate Heroes III data files</source>
+        <translation>Пошук файлів даних Heroes III</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
+        <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>Якщо у вас не встановлена копія Heroes III, ви можете скористатися нашим засобом встановлення &quot;vcmibuilder&quot;, яка вимагає лише інсталятора GoG.com. Докладні інструкції можна знайти у нашій вікі.</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
+        <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>VCMI потребує файлів даних Heroes III в одному з перелічених вище розташувань. Будь ласка, скопіюйте дані Heroes III в одну з цих директорій.</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
+        <source>Alternatively, you can provide the directory where Heroes III data is installed and VCMI will copy the existing data automatically.</source>
+        <translation>Або ж ви можете вибрати директорію зі встановленими даними Heroes III, і VCMI автоматично скопіює ці дані.</translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="445"/>
         <source>Your Heroes III data files have been successfully found.</source>
         <translation>Файли даних вашої гри Heroes III успішно знайдено.</translation>
     </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
+        <source>The automatic detection of the Heroes III language has failed. Please select the language of your Heroes III manually</source>
+        <translation>Не вдалося визначити мову гри. Будь ласка, виберіть мову вашої копії Heroes III</translation>
+    </message>
+    <message>
+        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
+        <source>Install a translation of Heroes III in your preferred language</source>
+        <translation>Встановити переклад Heroes III на вашу мову</translation>
+    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="775"/>
-        <source>Optionally, you can install additional mods either now or at any point later:</source>
-        <translation>За бажанням ви можете встановити додаткові модифікації зараз або пізніше:</translation>
+        <source>Optionally, you can install additional mods either now, or at any point later, using the VCMI Launcher</source>
+        <translation>За бажанням ви можете встановити додаткові модифікації зараз або пізніше, використовуючи VCMI Launcher</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="791"/>
-        <source>Install support for playing Heroes III in resolutions other than 800x600.</source>
-        <translation>Встановити підтримку для гри в Heroes III у роздільних здатностях, більших за 800x600.</translation>
+        <source>Install support for playing Heroes III in resolutions higher than 800x600</source>
+        <translation>Встановити підтримку для гри в Heroes III у роздільних здатностях, більших за 800x600</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="807"/>
-        <source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
-        <translation>Встановити сумісну версію доповнення Horn of the Abyss: фанатське доповнення Heroes III, портоване командою VCMI</translation>
+        <source>Install compatible version of &quot;Horn of the Abyss&quot;, a fan-made Heroes III expansion ported by the VCMI team</source>
+        <translation>Встановити сумісну версію доповнення &quot;Horn of the Abyss&quot;, фанатське доповнення Heroes III, портоване командою VCMI</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="823"/>
-        <source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
-        <translation>Встановити сумісну версію доповнення &quot; In The Wake of Gods&quot;: фанатське доповнення до Heroes III</translation>
+        <source>Install compatible version of &quot;In The Wake of Gods&quot;, a fan-made Heroes III expansion</source>
+        <translation>Встановити сумісну версію доповнення &quot;In The Wake of Gods&quot;, фанатське доповнення до Heroes III</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="870"/>
@@ -576,11 +633,6 @@
         <source>Step %v out of %m</source>
         <translation>Крок %v з %m</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="146"/>
-        <source>Choose your language</source>
-        <translation>Оберіть свою мову</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="175"/>
         <source>VCMI on Github</source>
@@ -596,39 +648,12 @@
         <source>VCMI on Discord</source>
         <translation>VCMI на Discord</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="196"/>
-        <source>Have a question? Found a bug? Want to help? Join us:</source>
-        <translation>Маєте питання? Виявили помилку? Хочете допомогти? Приєднуйтесь до нас:</translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="205"/>
-        <source>Thanks for installing VCMI.
-
-There are a few more steps to be done before you can start playing.
-
-Keep in mind that in order to use VCMI you need to own original data files, Heroes III: Complete Edition or Shadow of Death.
-
-Heroes III: HD Edition is currently not supported</source>
-        <translation>Дякуємо, що встановили VCMI.
-
-Залишилося зробити ще кілька кроків, перш ніж ви зможете почати грати.
-
-Майте на увазі, що для використання VCMI вам потрібно мати оригінальні файли гри Heroes III: Complete Edition або Shadow of Death.
-
-Heroes III: HD Edition наразі не підтримується</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="239"/>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="554"/>
         <source>Next</source>
         <translation>Далі</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="276"/>
-        <source>Find Heroes III data files</source>
-        <translation>Пошук файлів даних Heroes III</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="307"/>
         <source>Open help in browser</source>
@@ -639,26 +664,11 @@ Heroes III: HD Edition наразі не підтримується</translation
         <source>Search again</source>
         <translation>Повторити пошук</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="365"/>
-        <source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
-        <translation>Якщо у вас не встановлена копія Heroes III, ви можете скористатися нашим засобом встановлення &quot;vcmibuilder&quot;, щоб видобути дані з інсталятора GoG.com. Докладні інструкції можна знайти у нашій вікі.</translation>
-    </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="381"/>
-        <source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
-        <translation>VCMI потребує файлів даних Heroes III в одному з перелічених вище розташувань. Будь ласка, скопіюйте дані Heroes III в одну з цих директорій.</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="403"/>
         <source>Heroes III data files</source>
         <translation>Файли даних Heroes III</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="416"/>
-        <source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
-        <translation>Або ж ви можете вибрати директорію зі встановленими даними Heroes III, і VCMI автоматично скопіює ці дані.</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="432"/>
         <source>Copy existing data</source>
@@ -669,11 +679,6 @@ Heroes III: HD Edition наразі не підтримується</translation
         <source>Your Heroes III language has been successfully detected.</source>
         <translation>Мову вашої гри Heroes III успішно визначено.</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="485"/>
-        <source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
-        <translation>Не вдалося визначити мову гри. Будь ласка, виберіть мову вашої копії Heroes III</translation>
-    </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="504"/>
         <source>Heroes III language</source>
@@ -710,11 +715,6 @@ Heroes III: HD Edition наразі не підтримується</translation
         <source>In The Wake of Gods</source>
         <translation>In The Wake of Gods</translation>
     </message>
-    <message>
-        <location filename="../firstLaunch/firstlaunch_moc.ui" line="759"/>
-        <source>Install translation of Heroes III to your language</source>
-        <translation>Встановити переклад Heroes III на вашу мову</translation>
-    </message>
 </context>
 <context>
     <name>ImageViewer</name>
@@ -810,11 +810,6 @@ Heroes III: HD Edition наразі не підтримується</translation
         <source>Server</source>
         <translation>Сервер</translation>
     </message>
-    <message>
-        <location filename="../lobby/lobby_moc.ui" line="76"/>
-        <source>People in lobby</source>
-        <translation>Гравці у лобі</translation>
-    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="114"/>
         <source>Lobby chat</source>
@@ -850,6 +845,11 @@ Heroes III: HD Edition наразі не підтримується</translation
         <source>New room</source>
         <translation>Створити кімнату</translation>
     </message>
+    <message>
+        <location filename="../lobby/lobby_moc.ui" line="76"/>
+        <source>Players in lobby</source>
+        <translation>Гравці у лобі</translation>
+    </message>
     <message>
         <location filename="../lobby/lobby_moc.ui" line="159"/>
         <source>Join room</source>
@@ -951,7 +951,7 @@ Heroes III: HD Edition наразі не підтримується</translation
     <name>UpdateDialog</name>
     <message>
         <location filename="../updatedialog_moc.ui" line="71"/>
-        <source>You have latest version</source>
+        <source>You have the latest version</source>
         <translation>У вас встановлена остання версія</translation>
     </message>
     <message>
@@ -961,7 +961,7 @@ Heroes III: HD Edition наразі не підтримується</translation
     </message>
     <message>
         <location filename="../updatedialog_moc.ui" line="101"/>
-        <source>Check updates on startup</source>
+        <source>Check for updates on startup</source>
         <translation>Перевіряти наявність оновлень при запуску</translation>
     </message>
 </context>

+ 2 - 2
launcher/updatedialog_moc.ui

@@ -68,7 +68,7 @@
       <enum>QFrame::Raised</enum>
      </property>
      <property name="text">
-      <string>You have latest version</string>
+      <string>You have the latest version</string>
      </property>
     </widget>
    </item>
@@ -98,7 +98,7 @@
    <item row="3" column="0" colspan="2">
     <widget class="QCheckBox" name="checkOnStartup">
      <property name="text">
-      <string>Check updates on startup</string>
+      <string>Check for updates on startup</string>
      </property>
     </widget>
    </item>

+ 3 - 3
lib/CCreatureHandler.cpp

@@ -327,12 +327,12 @@ bool CCreature::isItNativeTerrain(TerrainId terrain) const
 
 TerrainId CCreature::getNativeTerrain() const
 {
-	const std::string cachingStringNoTerrainPenalty = "type_NO_TERRAIN_PENALTY";
-	static const auto selectorNoTerrainPenalty = Selector::type()(Bonus::NO_TERRAIN_PENALTY);
+	const std::string cachingStringNoTerrainPenalty = "type_NO_TERRAIN_PENALTY_sANY";
+	static const auto selectorNoTerrainPenalty = Selector::typeSubtype(Bonus::NO_TERRAIN_PENALTY, static_cast<int>(ETerrainId::ANY_TERRAIN));
 
 	//this code is used in the CreatureTerrainLimiter::limit to setup battle bonuses
 	//and in the CGHeroInstance::getNativeTerrain() to setup movement bonuses or/and penalties.
-	return hasBonus(selectorNoTerrainPenalty, selectorNoTerrainPenalty)
+	return hasBonus(selectorNoTerrainPenalty, cachingStringNoTerrainPenalty)
 		? TerrainId(ETerrainId::ANY_TERRAIN)
 		: (*VLC->townh)[faction]->nativeTerrain;
 }

+ 1 - 1
lib/CCreatureSet.h

@@ -199,7 +199,7 @@ class DLL_LINKAGE CCreatureSet : public IArmyDescriptor //seven combined creatur
 	CCreatureSet &operator=(const CCreatureSet&);
 public:
 	TSlots stacks; //slots[slot_id]->> pair(creature_id,creature_quantity)
-	ui8 formation; //0 - wide, 1 - tight
+	ui8 formation = 0; //0 - wide, 1 - tight
 
 	CCreatureSet() = default; //Should be here to avoid compile errors
 	virtual ~CCreatureSet();

+ 18 - 14
lib/CGameState.cpp

@@ -1761,33 +1761,37 @@ void CGameState::initTowns()
 			}
 		}
 
-		//#1444 - remove entries that don't have buildings defined (like some unused extra town hall buildings)
-		vstd::erase_if(vti->builtBuildings, [vti](const BuildingID & bid)
-		{
-			return !vti->town->buildings.count(bid) || !vti->town->buildings.at(bid);
-		});
-
-		if (vstd::contains(vti->builtBuildings, BuildingID::SHIPYARD) && vti->shipyardStatus()==IBoatGenerator::TILE_BLOCKED)
-			vti->builtBuildings.erase(BuildingID::SHIPYARD);//if we have harbor without water - erase it (this is H3 behaviour)
-
 		//init hordes
-		for (int i = 0; i<GameConstants::CREATURES_PER_TOWN; i++)
-			if (vstd::contains(vti->builtBuildings,(-31-i))) //if we have horde for this level
+		for (int i = 0; i < GameConstants::CREATURES_PER_TOWN; i++)
+		{
+			if (vstd::contains(vti->builtBuildings, (BuildingID::HORDE_PLACEHOLDER1 - i))) //if we have horde for this level
 			{
-				vti->builtBuildings.erase(BuildingID(-31-i));//remove old ID
+				vti->builtBuildings.erase(BuildingID(BuildingID::HORDE_PLACEHOLDER1 - i));//remove old ID
 				if (vti->town->hordeLvl.at(0) == i)//if town first horde is this one
 				{
 					vti->builtBuildings.insert(BuildingID::HORDE_1);//add it
-					if (vstd::contains(vti->builtBuildings,(BuildingID::DWELL_UP_FIRST+i)))//if we have upgraded dwelling as well
+					//if we have upgraded dwelling as well
+					if (vstd::contains(vti->builtBuildings, (BuildingID::DWELL_UP_FIRST + i)))
 						vti->builtBuildings.insert(BuildingID::HORDE_1_UPGR);//add it as well
 				}
 				if (vti->town->hordeLvl.at(1) == i)//if town second horde is this one
 				{
 					vti->builtBuildings.insert(BuildingID::HORDE_2);
-					if (vstd::contains(vti->builtBuildings,(BuildingID::DWELL_UP_FIRST+i)))
+					if (vstd::contains(vti->builtBuildings, (BuildingID::DWELL_UP_FIRST + i)))
 						vti->builtBuildings.insert(BuildingID::HORDE_2_UPGR);
 				}
 			}
+		}
+
+		//#1444 - remove entries that don't have buildings defined (like some unused extra town hall buildings)
+		//But DO NOT remove horde placeholders before they are replaced
+		vstd::erase_if(vti->builtBuildings, [vti](const BuildingID & bid)
+			{
+				return !vti->town->buildings.count(bid) || !vti->town->buildings.at(bid);
+			});
+
+		if (vstd::contains(vti->builtBuildings, BuildingID::SHIPYARD) && vti->shipyardStatus()==IBoatGenerator::TILE_BLOCKED)
+			vti->builtBuildings.erase(BuildingID::SHIPYARD);//if we have harbor without water - erase it (this is H3 behaviour)
 
 		//Early check for #1444-like problems
 		for(const auto & building : vti->builtBuildings)

+ 0 - 9
lib/CTownHandler.cpp

@@ -485,15 +485,6 @@ void CTownHandler::addBonusesForVanilaBuilding(CBuilding * building) const
 		{
 			b = createBonus(building, Bonus::MORALE, +1);
 		}
-		else if(building->bid == BuildingID::GRAIL
-			&& building->town->faction != nullptr
-			&& boost::algorithm::ends_with(building->town->faction->getJsonKey(), ":cove"))
-		{
-			static TPropagatorPtr allCreaturesPropagator(new CPropagatorNodeType(CBonusSystemNode::ENodeTypes::ALL_CREATURES));
-			static auto factionLimiter = std::make_shared<CreatureFactionLimiter>(building->town->faction->getIndex());
-			b = createBonus(building, Bonus::NO_TERRAIN_PENALTY, 0, allCreaturesPropagator);
-			b->addLimiter(factionLimiter);
-		}
 	}
 	else
 	{

+ 9 - 0
lib/GameConstants.h

@@ -473,7 +473,16 @@ public:
 	enum EBuildingID
 	{
 		DEFAULT = -50,
+		HORDE_PLACEHOLDER7 = -36,
+		HORDE_PLACEHOLDER6 = -35,
+		HORDE_PLACEHOLDER5 = -34,
+		HORDE_PLACEHOLDER4 = -33,
+		HORDE_PLACEHOLDER3 = -32,
+		HORDE_PLACEHOLDER2 = -31,
+		HORDE_PLACEHOLDER1 = -30,
+		HORDE_BUILDING_CONVERTER = -29, //-1 => -30
 		NONE = -1,
+		FIRST_REGULAR_ID = 0,
 		MAGES_GUILD_1 = 0,  MAGES_GUILD_2, MAGES_GUILD_3,     MAGES_GUILD_4,   MAGES_GUILD_5,
 		TAVERN,         SHIPYARD,      FORT,              CITADEL,         CASTLE,
 		VILLAGE_HALL,   TOWN_HALL,     CITY_HALL,         CAPITOL,         MARKETPLACE,

+ 10 - 9
lib/mapping/MapFormatH3M.cpp

@@ -2086,7 +2086,7 @@ CGTownInstance * CMapLoaderH3M::readTown(int castleID, const int3 & position)
 
 std::set<BuildingID> CMapLoaderH3M::convertBuildings(const std::set<BuildingID> & h3m, int castleID, bool addAuxiliary) const
 {
-	std::map<int, BuildingID> mapa;
+	std::map<int, BuildingID> helperMap;
 	std::set<BuildingID> ret;
 
 	// Note: this file is parsed many times.
@@ -2098,23 +2098,24 @@ std::set<BuildingID> CMapLoaderH3M::convertBuildings(const std::set<BuildingID>
 
 		if (town == castleID || town == -1)
 		{
-			mapa[static_cast<int>(entry["h3"].Float())] = BuildingID(static_cast<si32>(entry["vcmi"].Float()));
+			helperMap[static_cast<int>(entry["h3"].Float())] = BuildingID(static_cast<si32>(entry["vcmi"].Float()));
 		}
 	}
 
 	for(const auto & elem : h3m)
 	{
-		if(mapa[elem] >= 0)
+		if(helperMap[elem] >= BuildingID::FIRST_REGULAR_ID)
 		{
-			ret.insert(mapa[elem]);
+			ret.insert(helperMap[elem]);
 		}
-		// horde buildings
-		else if(mapa[elem] >= (-GameConstants::CREATURES_PER_TOWN))
+		// horde buildings use indexes from -1 to -5, where creature level is 1 to 5
+		else if(helperMap[elem] >= (-GameConstants::CREATURES_PER_TOWN))
 		{
-			int level = (mapa[elem]);
+			int level = (helperMap[elem]);
 
-			//(-30)..(-36) - horde buildings (for game loading only), don't see other way to handle hordes in random towns
-			ret.insert(BuildingID(level - 30));
+			//(-30)..(-36) - horde buildings (for game loading only)
+			//They will be replaced in CGameState::initTowns()
+			ret.insert(BuildingID(level + BuildingID::HORDE_BUILDING_CONVERTER)); //-1 => -30
 		}
 		else
 		{

+ 16 - 12
server/CGameHandler.cpp

@@ -1085,7 +1085,7 @@ void CGameHandler::makeAttack(const CStack * attacker, const CStack * defender,
 		auto spell = bat.spellID.toSpell();
 
 		battle::Target target;
-		target.emplace_back(defender);
+		target.emplace_back(defender, targetHex);
 
 		spells::BattleCast event(gs->curB, attacker, spells::Mode::SPELL_LIKE_ATTACK, spell);
 		event.setSpellLevel(bonus->val);
@@ -2418,6 +2418,9 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, ui8 teleporting, boo
 		if (leavingTile == LEAVING_TILE)
 			leaveTile();
 
+		if (isInTheMap(guardPos))
+			tmh.attackedFrom = boost::make_optional(guardPos);
+
 		tmh.result = result;
 		sendAndApply(&tmh);
 
@@ -2425,10 +2428,8 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, ui8 teleporting, boo
 		{ // Hero should be always able to visit any object he staying on even if there guards around
 			visitObjectOnTile(t, h);
 		}
-		else if (lookForGuards == CHECK_FOR_GUARDS && this->isInTheMap(guardPos))
+		else if (lookForGuards == CHECK_FOR_GUARDS && isInTheMap(guardPos))
 		{
-			tmh.attackedFrom = boost::make_optional(guardPos);
-
 			const TerrainTile &guardTile = *gs->getTile(guardPos);
 			objectVisited(guardTile.visitableObjects.back(), h);
 
@@ -4968,8 +4969,12 @@ bool CGameHandler::makeBattleAction(BattleAction &ba)
 void CGameHandler::playerMessage(PlayerColor player, const std::string &message, ObjectInstanceID currObj)
 {
 	bool cheated = false;
-	PlayerMessageClient temp_message(player, message);
-	sendAndApply(&temp_message);
+	
+	if(!getPlayerSettings(player)->isControlledByAI())
+	{
+		PlayerMessageClient temp_message(player, message);
+		sendAndApply(&temp_message);
+	}
 
 	std::vector<std::string> words;
 	boost::split(words, message, boost::is_any_of(" "));
@@ -5023,7 +5028,7 @@ void CGameHandler::playerMessage(PlayerColor player, const std::string &message,
 	}
 	
 	int obj = 0;
-	if (words.size() == 2 && words[0] != "vcmiexp")
+	if (words.size() == 2 && words[0] != "vcmiexp" && words[0] != "vcmiolorin")
 	{
 		obj = std::atoi(words[1].c_str());
 		if (obj)
@@ -5035,7 +5040,7 @@ void CGameHandler::playerMessage(PlayerColor player, const std::string &message,
 	if (!town && hero)
 		town = hero->visitedTown;
 
-	if((words[0] == "vcmiarmy" || words[0] == "vcmiexp") && words.size() > 1)
+	if(words.size() > 1 && (words[0] == "vcmiarmy" || words[0] == "vcminissi" || words[0] == "vcmiexp" || words[0] == "vcmiolorin"))
 	{
 		std::string cheatCodeWithOneParameter = std::string(words[0]) + " " + words[1];
 		handleCheatCode(cheatCodeWithOneParameter, player, hero, town, cheated);
@@ -5698,7 +5703,7 @@ void CGameHandler::objectVisitEnded(const CObjectVisitQuery & query)
 	ObjectVisitEnded::defaultExecute(serverEventBus.get(), endVisit, query.players.front(), query.visitingHero->id);
 }
 
-bool CGameHandler::buildBoat(ObjectInstanceID objid)
+bool CGameHandler::buildBoat(ObjectInstanceID objid, PlayerColor playerID)
 {
 	const IShipyard *obj = IShipyard::castFrom(getObj(objid));
 
@@ -5714,7 +5719,6 @@ bool CGameHandler::buildBoat(ObjectInstanceID objid)
 		return false;
 	}
 
-	const PlayerColor playerID = obj->o->tempOwner;
 	TResources boatCost;
 	obj->getBoatCost(boatCost);
 	TResources aviable = getPlayerState(playerID)->resources;
@@ -7004,7 +7008,7 @@ void CGameHandler::handleCheatCode(std::string & cheat, PlayerColor player, cons
 			if (!hero->hasStackAtSlot(SlotID(i)))
 				insertNewStack(StackLocation(hero, SlotID(i)), creature, creatures[cheat].second);
 	}
-	else if (boost::starts_with(cheat, "vcmiarmy"))
+	else if (boost::starts_with(cheat, "vcmiarmy") || boost::starts_with(cheat, "vcminissi"))
 	{
 		cheated = true;
 		if (!hero) return;
@@ -7055,7 +7059,7 @@ void CGameHandler::handleCheatCode(std::string & cheat, PlayerColor player, cons
 		///selected hero gains a new level
 		changePrimSkill(hero, PrimarySkill::EXPERIENCE, VLC->heroh->reqExp(hero->level + 1) - VLC->heroh->reqExp(hero->level));
 	}
-	else if (boost::starts_with(cheat, "vcmiexp"))
+	else if (boost::starts_with(cheat, "vcmiexp") || boost::starts_with(cheat, "vcmiolorin"))
 	{
 		cheated = true;
 		if (!hero) return;

+ 1 - 1
server/CGameHandler.h

@@ -238,7 +238,7 @@ public:
 	void removeObstacle(const CObstacleInstance &obstacle);
 	bool queryReply( QueryID qid, const JsonNode & answer, PlayerColor player );
 	bool hireHero( const CGObjectInstance *obj, ui8 hid, PlayerColor player );
-	bool buildBoat( ObjectInstanceID objid );
+	bool buildBoat( ObjectInstanceID objid, PlayerColor player );
 	bool setFormation( ObjectInstanceID hid, ui8 formation );
 	bool tradeResources(const IMarket *market, ui32 val, PlayerColor player, ui32 id1, ui32 id2);
 	bool sacrificeCreatures(const IMarket * market, const CGHeroInstance * hero, const std::vector<SlotID> & slot, const std::vector<ui32> & count);

+ 1 - 1
server/NetPacksServer.cpp

@@ -253,7 +253,7 @@ void ApplyGhNetPackVisitor::visitBuildBoat(BuildBoat & pack)
 	if(gh.getPlayerRelations(gh.getOwner(pack.objid), gh.getPlayerAt(pack.c)) == PlayerRelations::ENEMIES)
 		gh.throwAndComplain(&pack, "Can't build boat at enemy shipyard");
 
-	result = gh.buildBoat(pack.objid);
+	result = gh.buildBoat(pack.objid, gh.getPlayerAt(pack.c));
 }
 
 void ApplyGhNetPackVisitor::visitQueryReply(QueryReply & pack)

+ 4 - 1
vcmibuilder

@@ -156,7 +156,10 @@ fi
 
 if [[ -z "$dest_dir" ]]
 then
-	if [[ -z "$XDG_DATA_HOME" ]]
+	if [[ "$(uname)" == Darwin ]]
+	then
+		dest_dir="$HOME/Library/Application Support/vcmi"
+	elif [[ -z "$XDG_DATA_HOME" ]]
 	then
 		dest_dir="$HOME/.local/share/vcmi"
 	else