1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-21 17:17:06 +02:00

Merge remote-tracking branch 'vcmi/master' into develop

This commit is contained in:
Ivan Savenko 2024-01-19 13:49:54 +02:00
commit bd5682ecc3
191 changed files with 3188 additions and 1892 deletions

View File

@ -325,7 +325,7 @@ jobs:
${{ github.workspace }}/android/vcmi-app/src/main/jniLibs
- name: Upload build
if: ${{ (matrix.pack == 1 || startsWith(matrix.platform, 'android')) && (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/beta' || github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/features/')) && matrix.platform != 'msvc' }}
if: ${{ (matrix.pack == 1 || startsWith(matrix.platform, 'android')) && (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/beta' || github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/features/')) && matrix.platform != 'msvc' && matrix.platform != 'mingw-32' }}
continue-on-error: true
run: |
if cd '${{github.workspace}}/android/vcmi-app/build/outputs/apk/daily' ; then

View File

@ -147,7 +147,7 @@ BattleAction BattleEvaluator::selectStackAction(const CStack * stack)
(int)bestAttack.from,
(int)bestAttack.attack.attacker->getPosition().hex,
bestAttack.attack.chargeDistance,
bestAttack.attack.attacker->speed(0, true),
bestAttack.attack.attacker->getMovementRange(0),
bestAttack.defenderDamageReduce,
bestAttack.attackerDamageReduce,
score
@ -225,7 +225,7 @@ BattleAction BattleEvaluator::selectStackAction(const CStack * stack)
}
}
return BattleAction::makeDefend(stack);
return stack->waited() ? BattleAction::makeDefend(stack) : BattleAction::makeWait(stack);
}
uint64_t timeElapsed(std::chrono::time_point<std::chrono::high_resolution_clock> start)
@ -553,7 +553,7 @@ bool BattleEvaluator::attemptCastingSpell(const CStack * activeStack)
auto needFullEval = vstd::contains_if(allUnits, [&](const battle::Unit * u) -> bool
{
auto original = cb->getBattle(battleID)->battleGetUnitByID(u->unitId());
return !original || u->speed() != original->speed();
return !original || u->getMovementRange() != original->getMovementRange();
});
DamageCache safeCopy = damageCache;
@ -609,7 +609,7 @@ bool BattleEvaluator::attemptCastingSpell(const CStack * activeStack)
if(ourUnit * goodEffect == 1)
{
if(ourUnit && goodEffect && (unit->isClone() || unit->isGhost() || !unit->unitSlot().validSlot()))
if(ourUnit && goodEffect && (unit->isClone() || unit->isGhost()))
continue;
ps.value += dpsReduce * scoreEvaluator.getPositiveEffectMultiplier();

View File

@ -258,7 +258,9 @@ EvaluationResult BattleExchangeEvaluator::findBestTarget(
updateReachabilityMap(hb);
if(result.bestAttack.attack.shooting && hb->battleHasShootingPenalty(activeStack, result.bestAttack.dest))
if(result.bestAttack.attack.shooting
&& !activeStack->waited()
&& hb->battleHasShootingPenalty(activeStack, result.bestAttack.dest))
{
if(!canBeHitThisTurn(result.bestAttack))
return result; // lets wait
@ -295,7 +297,7 @@ MoveTarget BattleExchangeEvaluator::findMoveTowardsUnreachable(
if(targets.unreachableEnemies.empty())
return result;
auto speed = activeStack->speed();
auto speed = activeStack->getMovementRange();
if(speed == 0)
return result;
@ -322,7 +324,7 @@ MoveTarget BattleExchangeEvaluator::findMoveTowardsUnreachable(
auto turnsToRich = (distance - 1) / speed + 1;
auto hexes = closestStack->getSurroundingHexes();
auto enemySpeed = closestStack->speed();
auto enemySpeed = closestStack->getMovementRange();
auto speedRatio = speed / static_cast<float>(enemySpeed);
auto multiplier = speedRatio > 1 ? 1 : speedRatio;
@ -481,11 +483,6 @@ float BattleExchangeEvaluator::evaluateExchange(
DamageCache & damageCache,
std::shared_ptr<HypotheticBattle> hb)
{
if(ap.from.hex == 127)
{
logAi->trace("x");
}
BattleScore score = calculateExchange(ap, turn, targets, damageCache, hb);
#if BATTLE_TRACE_LEVEL >= 1
@ -687,11 +684,6 @@ BattleScore BattleExchangeEvaluator::calculateExchange(
for(auto hex : hexes)
reachabilityMap[hex] = getOneTurnReachableUnits(turn, hex);
if(!ap.attack.shooting)
{
v.adjustPositions(melleeAttackers, ap, reachabilityMap);
}
#if BATTLE_TRACE_LEVEL>=1
logAi->trace("Exchange score: enemy: %2f, our -%2f", v.getScore().enemyDamageReduce, v.getScore().ourDamageReduce);
#endif
@ -699,69 +691,6 @@ BattleScore BattleExchangeEvaluator::calculateExchange(
return v.getScore();
}
void BattleExchangeVariant::adjustPositions(
std::vector<const battle::Unit*> attackers,
const AttackPossibility & ap,
std::map<BattleHex, battle::Units> & reachabilityMap)
{
auto hexes = ap.attack.defender->getSurroundingHexes();
boost::sort(attackers, [&](const battle::Unit * u1, const battle::Unit * u2) -> bool
{
if(attackerValue[u1->unitId()].isRetalitated && !attackerValue[u2->unitId()].isRetalitated)
return true;
if(attackerValue[u2->unitId()].isRetalitated && !attackerValue[u1->unitId()].isRetalitated)
return false;
return attackerValue[u1->unitId()].value > attackerValue[u2->unitId()].value;
});
vstd::erase_if_present(hexes, ap.from);
vstd::erase_if_present(hexes, ap.attack.attacker->occupiedHex(ap.attack.attackerPos));
float notRealizedDamage = 0;
for(auto unit : attackers)
{
if(unit->unitId() == ap.attack.attacker->unitId())
continue;
if(!vstd::contains_if(hexes, [&](BattleHex h) -> bool
{
return vstd::contains(reachabilityMap[h], unit);
}))
{
notRealizedDamage += attackerValue[unit->unitId()].value;
continue;
}
auto desiredPosition = vstd::minElementByFun(hexes, [&](BattleHex h) -> float
{
auto score = vstd::contains(reachabilityMap[h], unit)
? reachabilityMap[h].size()
: 0;
if(unit->doubleWide())
{
auto backHex = unit->occupiedHex(h);
if(vstd::contains(hexes, backHex))
score += reachabilityMap[backHex].size();
}
return score;
});
hexes.erase(desiredPosition);
}
if(notRealizedDamage > ap.attackValue() && notRealizedDamage > attackerValue[ap.attack.attacker->unitId()].value)
{
dpsScore = BattleScore(EvaluationResult::INEFFECTIVE_SCORE, 0);
}
}
bool BattleExchangeEvaluator::canBeHitThisTurn(const AttackPossibility & ap)
{
for(auto pos : ap.attack.attacker->getSurroundingHexes())
@ -824,7 +753,7 @@ std::vector<const battle::Unit *> BattleExchangeEvaluator::getOneTurnReachableUn
continue;
}
auto unitSpeed = unit->speed(turn);
auto unitSpeed = unit->getMovementRange(turn);
auto radius = unitSpeed * (turn + 1);
ReachabilityInfo unitReachability = vstd::getOrCompute(
@ -887,10 +816,10 @@ bool BattleExchangeEvaluator::checkPositionBlocksOurStacks(HypotheticBattle & hb
continue;
auto blockedUnitDamage = unit->getMinDamage(hb.battleCanShoot(unit)) * unit->getCount();
auto ratio = blockedUnitDamage / (blockedUnitDamage + activeUnitDamage);
float ratio = blockedUnitDamage / (float)(blockedUnitDamage + activeUnitDamage + 0.01);
auto unitReachability = turnBattle.getReachability(unit);
auto unitSpeed = unit->speed(turn); // Cached value, to avoid performance hit
auto unitSpeed = unit->getMovementRange(turn); // Cached value, to avoid performance hit
for(BattleHex hex = BattleHex::TOP_LEFT; hex.isValid(); hex = hex + 1)
{

View File

@ -106,11 +106,6 @@ public:
const BattleScore & getScore() const { return dpsScore; }
void adjustPositions(
std::vector<const battle::Unit *> attackers,
const AttackPossibility & ap,
std::map<BattleHex, battle::Units> & reachabilityMap);
private:
BattleScore dpsScore;
std::map<uint32_t, AttackerValue> attackerValue;

View File

@ -117,7 +117,7 @@ std::vector<SlotInfo>::iterator ArmyManager::getWeakestCreature(std::vector<Slot
if(left.creature->getLevel() != right.creature->getLevel())
return left.creature->getLevel() < right.creature->getLevel();
return left.creature->speed() > right.creature->speed();
return left.creature->getMovementRange() > right.creature->getMovementRange();
});
return weakest;

View File

@ -63,7 +63,7 @@ std::vector<SlotInfo>::iterator ArmyManager::getWeakestCreature(std::vector<Slot
if(left.creature->getLevel() != right.creature->getLevel())
return left.creature->getLevel() < right.creature->getLevel();
return left.creature->speed() > right.creature->speed();
return left.creature->getMovementRange() > right.creature->getMovementRange();
});
return weakest;

View File

@ -41,6 +41,7 @@ namespace AIPathfinding
std::shared_ptr<AINodeStorage> nodeStorage)
:PathfinderConfig(nodeStorage, makeRuleset(cb, ai, nodeStorage)), hero(nodeStorage->getHero())
{
options.ignoreGuards = false;
options.useEmbarkAndDisembark = true;
options.useTeleportTwoWay = true;
options.useTeleportOneWay = true;

View File

@ -405,7 +405,10 @@ std::optional<BattleAction> CBattleCallback::makeSurrenderRetreatDecision(const
std::shared_ptr<CPlayerBattleCallback> CBattleCallback::getBattle(const BattleID & battleID)
{
return activeBattles.at(battleID);
if (activeBattles.count(battleID))
return activeBattles.at(battleID);
throw std::runtime_error("Failed to find battle " + std::to_string(battleID.getNum()) + " of player " + player->toString() + ". Number of ongoing battles: " + std::to_string(activeBattles.size()));
}
std::optional<PlayerColor> CBattleCallback::getPlayerID() const
@ -415,10 +418,18 @@ std::optional<PlayerColor> CBattleCallback::getPlayerID() const
void CBattleCallback::onBattleStarted(const IBattleInfo * info)
{
if (activeBattles.count(info->getBattleID()) > 0)
throw std::runtime_error("Player " + player->toString() + " is already engaged in battle " + std::to_string(info->getBattleID().getNum()));
logGlobal->debug("Battle %d started for player %s", info->getBattleID(), player->toString());
activeBattles[info->getBattleID()] = std::make_shared<CPlayerBattleCallback>(info, *getPlayerID());
}
void CBattleCallback::onBattleEnded(const BattleID & battleID)
{
if (activeBattles.count(battleID) == 0)
throw std::runtime_error("Player " + player->toString() + " is not engaged in battle " + std::to_string(battleID.getNum()));
logGlobal->debug("Battle %d ended for player %s", battleID, player->toString());
activeBattles.erase(battleID);
}

View File

@ -1,3 +1,91 @@
# 1.4.2 -> 1.4.3
### General
* Fixed the synchronisation of the audio and video of the opening movies.
* Fixed a bug that caused spells from mods to not show up in the Mage's Guild.
* Changed the default SDL driver on Windows from opengl to autodetection
* When a hero visits a town with a garrisoned hero, they will now automatically exchange spells if one of them has the Scholar skill.
* Movement and mana points are now replenished for new heroes in taverns.
### Multiplayer
* Simturn contact detection will now correctly check for hero moving range
* Simturn contact detection will now ignore wandering monsters
* Right-clicking the Simturns AI option now displays a tooltip
* Interaction attempts with other players during simturns will now have more concise error messages
* Turn timers are now limited to 24 hours in order to prevent bugs caused by an integer overflow.
* Fixed delays when editing turn timer duration
* Ending a turn during simturns will now block the interface correctly.
### Campaigns
* Player will no longer start the United Front of Song for the Father campaign with two Nimbuses.
* Fixed missing campaign description after loading saved game
* Campaign completion checkmarks will now be displayed after the entire campaign has been completed, rather than just after the first scenario.
* Fixed positioning of prologue and epilogue text during campaign scenario intros
### Interface
* Added an option to hide adventure map window when town or battle window are open
* Fixed switching between pages on small version of spellbook
* Saves with long filenames are now truncated in the UI to prevent overflow.
* Added option to sort saved games by change date
* Game now shows correct resource when selecting start bonus
* It is now possible to inspect commander skills during battles.
* Fixed incorrect cursor being displayed when hovering over navigable water tiles
* Fixed incorrect cursor display when hovering over water objects accessible from shore
### Stability
* Fixed a crash when using the 'vcmiobelisk' cheat more than once.
* Fixed crash when reaching level 201. The maximum level is now limited to 197.
* Fixed crash when accessing a spell with an invalid SPELLCASTER bonus
* Fixed crash when trying to play music for an inaccessible tile
* Fixed memory corruption on loading of old mods with illegal 'index' field
* Fixed possible crash on server shutdown on Android
* Fixed possible crash when the affinity of the hero class is set to an invalid value
* Fixed crash on invalid creature in hero army due to outdated or broken mods
* Failure to initialise video subsystem now displays error message instead of silent crash
### Random Maps Generator
* Fixed possible creation of a duplicate hero in a random map when the player has chosen the starting hero.
* Fixed banning of quest artifacts on random maps
* Fixed banning of heroes in prison on random maps
### Battles
* Battle turn queue now displays current turn
* Added option to show unit statistics sidebar in battle
* Right-clicking on a unit in the battle turn queue now displays the unit details popup.
* Fixed error messages for SUMMON_GUARDIANS and TRANSMUTATION bonuses
* Fixed Dendroid Bind ability
* Black Dragons no longer hate Giants, only Titans
* Spellcasting units such as Archangels can no longer cast spells on themselves.
* Coronius specialty will now correctly select affected units
### Launcher
* Welcome screen will automatically detect existing Heroes 3 installation on Windows
* It is now possible to install mods by dragging and dropping onto the launcher.
* It is now possible to install maps and campaigns by dragging and dropping onto the launcher.
* Czech launcher translation added
* Added option to select preferred SDL driver in launcher
### Map Editor
* Fixed saving of allowed abilities, spells, artifacts or heroes
### AI
* AI will no longer attempt to move immobilized units, such as those under the effect of Dendroid Bind.
* Fixed shooters not shooting when they have a range penalty
* Fixed Fire Elemental spell casting
* Fixed rare bug where unit would sometimes do nothing in battle
### Modding
* Added better reporting of "invalid identifiers" errors with suggestions on how to fix them
* Added FEROCITY bonus (HotA Aysiud)
* Added ENEMY_ATTACK_REDUCTION bonus (HotA Nix)
* Added REVENGE bonus (HotA Haspid)
* Extended DEATH_STARE bonus to support Pirates ability (HotA)
* DEATH_STARE now supports spell ID in addInfo field to override used spell
* SPELL_BEFORE_ATTACK bonus now supports spell priorities
* FIRST_STRIKE bonus supports subtypes damageTypeMelee, damageTypeRanged and damageTypeAll
* BLOCKS_RETALIATION now also blocks FIRST_STRIKE bonus
* Added 'canCastOnSelf' field for spells to allow creatures to cast spells on themselves.
# 1.4.1 -> 1.4.2
### General

View File

@ -104,6 +104,12 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
#define _USE_MATH_DEFINES
#ifndef NDEBUG
// Enable additional debug checks from glibc / libstdc++ when building with enabled assertions
// Since these defines must be declared BEFORE including glibc header we can not check for __GLIBCXX__ macro to detect that glibc is in use
# define _GLIBCXX_ASSERTIONS
#endif
#include <algorithm>
#include <any>
#include <array>

View File

@ -0,0 +1,7 @@
{
"basepath" : "lobby/",
"images" :
[
{ "frame" : 0, "file" : "selectionTabSortDate.png"}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -70,6 +70,7 @@
"vcmi.lobby.mapPreview" : "Map preview",
"vcmi.lobby.noPreview" : "no preview",
"vcmi.lobby.noUnderground" : "no underground",
"vcmi.lobby.sortDate" : "Sorts maps by change date",
"vcmi.client.errors.missingCampaigns" : "{Missing data files}\n\nCampaigns data files were not found! You may be using incomplete or corrupted Heroes 3 data files. Please reinstall game data.",
"vcmi.server.errors.existingProcess" : "Another VCMI server process is running. Please terminate it before starting a new game.",
@ -144,6 +145,8 @@
"vcmi.adventureOptions.mapScrollSpeed1.help": "Set the map scrolling speed to very slow.",
"vcmi.adventureOptions.mapScrollSpeed5.help": "Set the map scrolling speed to very fast.",
"vcmi.adventureOptions.mapScrollSpeed6.help": "Set the map scrolling speed to instantaneous.",
"vcmi.adventureOptions.hideBackground.hover" : "Hide Background",
"vcmi.adventureOptions.hideBackground.help" : "{Hide Background}\n\nHide the adventuremap in the background and show a texture instead.",
"vcmi.battleOptions.queueSizeLabel.hover": "Show Turn Order Queue",
"vcmi.battleOptions.queueSizeNoneButton.hover": "OFF",
@ -183,6 +186,10 @@
"vcmi.battleWindow.damageEstimation.damage.1" : "%d damage",
"vcmi.battleWindow.damageEstimation.kills" : "%d will perish",
"vcmi.battleWindow.damageEstimation.kills.1" : "%d will perish",
"vcmi.battleWindow.killed" : "Killed",
"vcmi.battleWindow.accurateShot.resultDescription.0" : "%d %s were killed by accurate shots!",
"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s was killed with an accurate shot!",
"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s were killed by accurate shots!",
"vcmi.battleResultsWindow.applyResultsLabel" : "Apply battle result",
@ -335,7 +342,7 @@
"vcmi.stackExperience.rank.8" : "Elite",
"vcmi.stackExperience.rank.9" : "Master",
"vcmi.stackExperience.rank.10" : "Ace",
"core.bonus.ADDITIONAL_ATTACK.name": "Double Strike",
"core.bonus.ADDITIONAL_ATTACK.description": "Attacks twice",
"core.bonus.ADDITIONAL_RETALIATION.name": "Additional retaliations",
@ -374,6 +381,8 @@
"core.bonus.ENCHANTER.description": "Can cast mass ${subtype.spell} every turn",
"core.bonus.ENCHANTED.name": "Enchanted",
"core.bonus.ENCHANTED.description": "Affected by permanent ${subtype.spell}",
"core.bonus.ENEMY_ATTACK_REDUCTION.name": "Ignore Attack (${val}%)",
"core.bonus.ENEMY_ATTACK_REDUCTION.description": "When being attacked, ${val}% of the attacker's attack is ignored",
"core.bonus.ENEMY_DEFENCE_REDUCTION.name": "Ignore Defense (${val}%)",
"core.bonus.ENEMY_DEFENCE_REDUCTION.description": "When attacking, ${val}% of the defender's defense is ignored",
"core.bonus.FIRE_IMMUNITY.name": "Fire immunity",
@ -386,6 +395,8 @@
"core.bonus.FEAR.description": "Causes Fear on an enemy stack",
"core.bonus.FEARLESS.name": "Fearless",
"core.bonus.FEARLESS.description": "Immune to Fear ability",
"core.bonus.FEROCITY.name": "Ferocity",
"core.bonus.FEROCITY.description": "Attacks ${val} additional times if killed anybody",
"core.bonus.FLYING.name": "Fly",
"core.bonus.FLYING.description": "Flies when moving (ignores obstacles)",
"core.bonus.FREE_SHOOTING.name": "Shoot Close",
@ -440,6 +451,8 @@
"core.bonus.REBIRTH.description": "${val}% of stack will rise after death",
"core.bonus.RETURN_AFTER_STRIKE.name": "Attack and Return",
"core.bonus.RETURN_AFTER_STRIKE.description": "Returns after melee attack",
"core.bonus.REVENGE.name": "Revenge",
"core.bonus.REVENGE.description": "Deals extra damage based on attacker's lost health in battle",
"core.bonus.SHOOTER.name": "Ranged",
"core.bonus.SHOOTER.description": "Creature can shoot",
"core.bonus.SHOOTS_ALL_ADJACENT.name": "Shoot all around",

View File

@ -70,7 +70,9 @@
"vcmi.lobby.mapPreview" : "Kartenvorschau",
"vcmi.lobby.noPreview" : "Keine Vorschau",
"vcmi.lobby.noUnderground" : "Kein Untergrund",
"vcmi.lobby.sortDate" : "Ordnet Karten nach Änderungsdatum",
"vcmi.client.errors.missingCampaigns" : "{Fehlende Dateien}\n\nEs wurden keine Kampagnendateien gefunden! Möglicherweise verwendest du unvollständige oder beschädigte Heroes 3 Datendateien. Bitte installiere die Spieldaten neu.",
"vcmi.server.errors.existingProcess" : "Es läuft ein weiterer vcmiserver-Prozess, bitte beendet diesen zuerst",
"vcmi.server.errors.modsToEnable" : "{Erforderliche Mods um das Spiel zu laden}",
"vcmi.server.errors.modsToDisable" : "{Folgende Mods müssen deaktiviert werden}",
@ -101,7 +103,7 @@
"vcmi.systemOptions.resolutionMenu.help" : "Ändere die Spielauflösung.",
"vcmi.systemOptions.scalingButton.hover" : "Interface-Skalierung: %p%",
"vcmi.systemOptions.scalingButton.help" : "{Interface-Skalierung}\n\nÄndern der Skalierung des Interfaces im Spiel",
"vcmi.systemOptions.scalingMenu.hover" : "Skalierung des Interfaces auswählen",
"vcmi.systemOptions.scalingMenu.hover" : "Skalierung auswählen",
"vcmi.systemOptions.scalingMenu.help" : "Ändern der Skalierung des Interfaces im Spiel.",
"vcmi.systemOptions.longTouchButton.hover" : "Berührungsdauer für langer Touch: %d ms", // Translation note: "ms" = "milliseconds"
"vcmi.systemOptions.longTouchButton.help" : "{Berührungsdauer für langer Touch}\n\nBei Verwendung des Touchscreens erscheinen Popup-Fenster nach Berührung des Bildschirms für die angegebene Dauer (in Millisekunden)",
@ -135,12 +137,16 @@
"vcmi.adventureOptions.leftButtonDrag.help" : "{Ziehen der Karte mit Links}\n\nWenn aktiviert, wird die Maus bei gedrückter linker Taste in die Kartenansicht gezogen",
"vcmi.adventureOptions.smoothDragging.hover" : "Nahtloses Ziehen der Karte",
"vcmi.adventureOptions.smoothDragging.help" : "{Nahtloses Ziehen der Karte}\n\nWenn aktiviert hat das Ziehen der Karte einen sanften Auslaufeffekt.",
"vcmi.adventureOptions.skipAdventureMapAnimations.hover" : "Fading-Effekte überspringen",
"vcmi.adventureOptions.skipAdventureMapAnimations.help" : "{Fading-Effekte überspringen}\n\nWenn diese Funktion aktiviert ist, werden das Ausblenden von Objekten und ähnliche Effekte übersprungen (Ressourcensammlung, Anlegen von Schiffen usw.). Macht die Benutzeroberfläche in einigen Fällen auf Kosten der Ästhetik reaktiver. Besonders nützlich in PvP-Spielen. Für maximale Bewegungsgeschwindigkeit ist das Überspringen unabhängig von dieser Einstellung aktiv.",
"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
"vcmi.adventureOptions.mapScrollSpeed1.help": "Geschwindigkeit des Kartenbildlaufs auf sehr langsam einstellen",
"vcmi.adventureOptions.mapScrollSpeed5.help": "Geschwindigkeit des Kartenbildlaufs auf sehr schnell einstellen",
"vcmi.adventureOptions.mapScrollSpeed6.help": "Geschwindigkeit des Kartenbildlaufs auf sofort einstellen",
"vcmi.adventureOptions.hideBackground.hover" : "Hintergrund ausblenden",
"vcmi.adventureOptions.hideBackground.help" : "{Hintergrund ausblenden}\n\nDie Abenteuerkarte im Hintergrund ausblenden und stattdessen eine Textur anzeigen.",
"vcmi.battleOptions.queueSizeLabel.hover": "Reihenfolge der Kreaturen anzeigen",
"vcmi.battleOptions.queueSizeNoneButton.hover": "AUS",
@ -180,6 +186,10 @@
"vcmi.battleWindow.damageEstimation.damage.1" : "%d Schaden",
"vcmi.battleWindow.damageEstimation.kills" : "%d werden verenden",
"vcmi.battleWindow.damageEstimation.kills.1" : "%d werden verenden",
"vcmi.battleWindow.killed" : "Getötet",
"vcmi.battleWindow.accurateShot.resultDescription.0" : "%d %s wurden durch gezielte Schüsse getötet!",
"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s wurde mit einem gezielten Schuss getötet!",
"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s wurden durch gezielte Schüsse getötet!",
"vcmi.battleResultsWindow.applyResultsLabel" : "Kampfergebnis übernehmen",
@ -242,18 +252,29 @@
"vcmi.optionsTab.turnOptions.hover" : "Spielzug-Optionen",
"vcmi.optionsTab.turnOptions.help" : "Optionen zu Spielzug-Timer und simultanen Zügen",
"vcmi.optionsTab.selectPreset" : "Voreinstellung",
"vcmi.optionsTab.chessFieldBase.hover" : "Basis-Timer",
"vcmi.optionsTab.chessFieldTurn.hover" : "Spielzug-Timer",
"vcmi.optionsTab.chessFieldBattle.hover" : "Kampf-Timer",
"vcmi.optionsTab.chessFieldUnit.hover" : "Einheiten-Timer",
"vcmi.optionsTab.chessFieldBase.help" : "Wird verwendet, wenn {Spielzug-Timer} 0 erreicht. Wird einmal zu Beginn des Spiels gesetzt. Bei Erreichen von Null wird der aktuelle Zug beendet. Jeder laufende Kampf endet mit einem Verlust.",
"vcmi.optionsTab.chessFieldTurnAccumulate.help" : "Wird außerhalb des Kampfes verwendet oder wenn der {Kampf-Timer} abgelaufen ist. Wird jede Runde zurückgesetzt. Reste werden am Ende der Runde zum {Basis-Timer} hinzugefügt.",
"vcmi.optionsTab.chessFieldTurnDiscard.help" : "Wird außerhalb des Kampfes verwendet oder wenn der {Kampf-Timer} abgelaufen ist. Wird jede Runde zurückgesetzt. Jede nicht verbrauchte Zeit ist verloren",
"vcmi.optionsTab.chessFieldBattle.help" : "Wird in Kämpfen mit der KI oder im PvP-Kampf verwendet, wenn der {Einheiten-Timer} abläuft. Wird zu Beginn eines jeden Kampfes zurückgesetzt.",
"vcmi.optionsTab.chessFieldUnitAccumulate.help" : "Wird bei der Auswahl der Einheitenaktion im PvP-Kampf verwendet. Der Rest wird am Ende des Zuges der Einheit zum {Kampf-Timer} hinzugefügt.",
"vcmi.optionsTab.chessFieldUnitDiscard.help" : "Wird bei der Auswahl der Einheitenaktion im PvP-Kampf verwendet. Wird zu Beginn des Zuges jeder Einheit zurückgesetzt. Jede nicht verbrauchte Zeit ist verloren",
"vcmi.optionsTab.accumulate" : "Akkumulieren",
"vcmi.optionsTab.simturnsTitle" : "Simultane Züge",
"vcmi.optionsTab.simturnsMin.hover" : "Zumindest für",
"vcmi.optionsTab.simturnsMax.hover" : "Höchstens für",
"vcmi.optionsTab.simturnsAI.hover" : "(Experimentell) Simultane KI Züge",
"vcmi.optionsTab.simturnsMin.help" : "Spielt gleichzeitig für eine bestimmte Anzahl von Tagen. Die Kontakte zwischen den Spielern sind während dieser Zeit blockiert",
"vcmi.optionsTab.simturnsMax.help" : "Spielt gleichzeitig für eine bestimmte Anzahl von Tagen oder bis zum Kontakt mit einem anderen Spieler",
"vcmi.optionsTab.simturnsAI.help" : "{Simultane KI Züge}\nExperimentelle Option. Ermöglicht es den KI-Spielern, gleichzeitig mit dem menschlichen Spieler zu agieren, wenn simultane Spielzüge aktiviert sind.",
"vcmi.optionsTab.turnTime.select" : "Spielzug-Timer-Voreinst. wählen",
"vcmi.optionsTab.turnTime.unlimited" : "Unbegrenzter Spielzug-Timer",
"vcmi.optionsTab.turnTime.classic.1" : "Klassischer Timer: 1 Minute",
@ -278,14 +299,6 @@
"vcmi.optionsTab.simturns.blocked1" : "Simzüge: 1 Woche, Kontakte block.",
"vcmi.optionsTab.simturns.blocked2" : "Simzüge: 2 Wochen, Kontakte block.",
"vcmi.optionsTab.simturns.blocked4" : "Simzüge: 1 Monat, Kontakte block.",
"vcmi.optionsTab.simturnsTitle" : "Simultane Züge",
"vcmi.optionsTab.simturnsMin.hover" : "Zumindest für",
"vcmi.optionsTab.simturnsMax.hover" : "Höchstens für",
"vcmi.optionsTab.simturnsAI.hover" : "(Experimentell) Simultane KI Züge",
"vcmi.optionsTab.simturnsMin.help" : "Spielt gleichzeitig für eine bestimmte Anzahl von Tagen. Die Kontakte zwischen den Spielern sind während dieser Zeit blockiert",
"vcmi.optionsTab.simturnsMax.help" : "Spielt gleichzeitig für eine bestimmte Anzahl von Tagen oder bis zum Kontakt mit einem anderen Spieler",
"vcmi.optionsTab.simturnsAI.help" : "{Simultane KI Züge}\nExperimentelle Option. Ermöglicht es den KI-Spielern, gleichzeitig mit dem menschlichen Spieler zu agieren, wenn simultane Spielzüge aktiviert sind.",
// Translation note: translate strings below using form that is correct for "0 days", "1 day" and "2 days" in your language
// Using this information, VCMI will automatically select correct plural form for every possible amount
@ -329,7 +342,7 @@
"vcmi.stackExperience.rank.8" : "Elite",
"vcmi.stackExperience.rank.9" : "Meister",
"vcmi.stackExperience.rank.10" : "Ass",
"core.bonus.ADDITIONAL_ATTACK.name": "Doppelschlag",
"core.bonus.ADDITIONAL_ATTACK.description": "Greift zweimal an",
"core.bonus.ADDITIONAL_RETALIATION.name": "Zusätzliche Vergeltungsmaßnahmen",
@ -368,6 +381,8 @@
"core.bonus.ENCHANTER.description": "Kann jede Runde eine Masse von ${subtype.spell} zaubern",
"core.bonus.ENCHANTED.name": "Verzaubert",
"core.bonus.ENCHANTED.description": "Beeinflusst von permanentem ${subtype.spell}",
"core.bonus.ENEMY_ATTACK_REDUCTION.name": "Angriff ignorieren (${val}%)",
"core.bonus.ENEMY_ATTACK_REDUCTION.description": "Bei Angriff, wird ${val}% des Angreifers ignoriert.",
"core.bonus.ENEMY_DEFENCE_REDUCTION.name": "Ignoriere Verteidigung (${val}%)",
"core.bonus.ENEMY_DEFENCE_REDUCTION.description": "Ignoriert einen Teil der Verteidigung für den Angriff",
"core.bonus.FIRE_IMMUNITY.name": "Feuerimmunität",
@ -380,6 +395,8 @@
"core.bonus.FEAR.description": "Verursacht Furcht bei einem gegnerischen Stapel",
"core.bonus.FEARLESS.name": "Furchtlos",
"core.bonus.FEARLESS.description": "immun gegen die Fähigkeit Furcht",
"core.bonus.FEROCITY.name": "Wildheit",
"core.bonus.FEROCITY.description": "Greift ${val} zusätzliche Male an, wenn jemand getötet wird",
"core.bonus.FLYING.name": "Fliegen",
"core.bonus.FLYING.description": "Kann fliegen (ignoriert Hindernisse)",
"core.bonus.FREE_SHOOTING.name": "Nah schießen",
@ -434,6 +451,8 @@
"core.bonus.REBIRTH.description": "${val}% des Stacks wird nach dem Tod auferstehen",
"core.bonus.RETURN_AFTER_STRIKE.name": "Angriff und Rückkehr",
"core.bonus.RETURN_AFTER_STRIKE.description": "Kehrt nach Nahkampfangriff zurück",
"core.bonus.REVENGE.name": "Rache",
"core.bonus.REVENGE.description": "Verursacht zusätzlichen Schaden basierend auf der verlorenen Gesundheit des Angreifers im Kampf",
"core.bonus.SHOOTER.name": "Fernkämpfer",
"core.bonus.SHOOTER.description": "Kreatur kann schießen",
"core.bonus.SHOOTS_ALL_ADJACENT.name": "Schießt rundherum",

View File

@ -54,6 +54,8 @@
"vcmi.radialWheel.moveDown" : "Przenieś w dół",
"vcmi.radialWheel.moveBottom" : "Przenieś na spód",
"vcmi.spellBook.search" : "szukaj...",
"vcmi.mainMenu.serverConnecting" : "Łączenie...",
"vcmi.mainMenu.serverAddressEnter" : "Wprowadź adres:",
"vcmi.mainMenu.serverConnectionFailed" : "Połączenie nie powiodło się",
@ -68,7 +70,9 @@
"vcmi.lobby.mapPreview" : "Podgląd mapy",
"vcmi.lobby.noPreview" : "brak podglądu",
"vcmi.lobby.noUnderground" : "brak podziemi",
"vcmi.lobby.sortDate" : "Sortuj mapy według daty modyfikacji",
"vcmi.client.errors.missingCampaigns" : "{Brakujące pliki gry}\n\nPliki kampanii nie zostały znalezione! Możliwe że używasz niekompletnych lub uszkodzonych plików Heroes 3. Spróbuj ponownej instalacji plików gry.",
"vcmi.server.errors.existingProcess" : "Inny proces 'vcmiserver' został już uruchomiony, zakończ go nim przejdziesz dalej",
"vcmi.server.errors.modsToEnable" : "{Następujące mody są wymagane do wczytania gry}",
"vcmi.server.errors.modsToDisable" : "{Następujące mody muszą zostać wyłączone}",
@ -139,6 +143,8 @@
"vcmi.adventureOptions.mapScrollSpeed1.help": "Ustaw szybkość przesuwania mapy na bardzo wolną.",
"vcmi.adventureOptions.mapScrollSpeed5.help": "Ustaw szybkość przesuwania mapy na bardzo szybką.",
"vcmi.adventureOptions.mapScrollSpeed6.help": "Ustaw szybkość przesuwania mapy na błyskawiczną.",
"vcmi.adventureOptions.hideBackground.hover" : "Ukryj tło",
"vcmi.adventureOptions.hideBackground.help" : "{Ukryj tło}\n\nUkryj mapę przygody w tle i pokaż zastępczo teksturę.",
"vcmi.battleOptions.queueSizeLabel.hover": "Pokaż kolejkę ruchu jednostek",
"vcmi.battleOptions.queueSizeNoneButton.hover": "BRAK",
@ -178,6 +184,10 @@
"vcmi.battleWindow.damageEstimation.damage.1" : "obrażenia: %d",
"vcmi.battleWindow.damageEstimation.kills" : "zginie: %d",
"vcmi.battleWindow.damageEstimation.kills.1" : "zginie: %d",
"vcmi.battleWindow.killed" : "Zabici",
"vcmi.battleWindow.accurateShot.resultDescription.0" : "%d %s zostało zabitych poprzez celne strzały!",
"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s został zabity poprzez celny strzał!",
"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s zostali zabici poprzez celne strzały!",
"vcmi.battleResultsWindow.applyResultsLabel" : "Zatwierdź wynik bitwy",
@ -349,6 +359,8 @@
"core.bonus.ENCHANTER.description": "Rzuca czar ${subtype.spell}",
"core.bonus.ENCHANTED.name": "Zaczarowany",
"core.bonus.ENCHANTED.description": "Pod trwałym wpływem czaru ${subtype.spell}",
"core.bonus.ENEMY_ATTACK_REDUCTION.name": "Ignoruje Atak (${val}%)",
"core.bonus.ENEMY_ATTACK_REDUCTION.description": "Przy zostaniu zaatakowanym ignoruje ${val}% ataku wroga",
"core.bonus.ENEMY_DEFENCE_REDUCTION.name": "Osłabienie Obrony (${val}%)",
"core.bonus.ENEMY_DEFENCE_REDUCTION.description": "Osłabia obronę wroga podczas ataku",
"core.bonus.FIRE_IMMUNITY.name": "Odporność: Ogień",
@ -361,6 +373,8 @@
"core.bonus.FEAR.description": "Wzbudza strach na wrogim stworzeniu",
"core.bonus.FEARLESS.name": "Nieustraszony",
"core.bonus.FEARLESS.description": "Odporny na strach",
"core.bonus.FEROCITY.name": "Dzikość",
"core.bonus.FEROCITY.description": "Dodatkowe ${val} ataków jeżeli zabito kogokolwiek",
"core.bonus.FLYING.name": "Lot",
"core.bonus.FLYING.description": "Może latać (ignoruje przeszkody)",
"core.bonus.FREE_SHOOTING.name": "Bliski Strzał",
@ -415,6 +429,8 @@
"core.bonus.REBIRTH.description": "${val}% stworzeń powstanie po śmierci",
"core.bonus.RETURN_AFTER_STRIKE.name": "Atak i Powrót",
"core.bonus.RETURN_AFTER_STRIKE.description": "Wraca po ataku wręcz",
"core.bonus.REVENGE.name": "Odwet",
"core.bonus.REVENGE.description": "Zadaje dodatkowe obrażenia zależne od strat własnych oddziału",
"core.bonus.SHOOTER.name": "Dystansowy",
"core.bonus.SHOOTER.description": "Stworzenie może strzelać",
"core.bonus.SHOOTS_ALL_ADJACENT.name": "Ostrzeliwuje wszystko dookoła",

View File

@ -70,6 +70,7 @@
"vcmi.lobby.mapPreview" : "Огляд мапи",
"vcmi.lobby.noPreview" : "огляд недоступний",
"vcmi.lobby.noUnderground" : "немає підземелля",
"vcmi.lobby.sortDate" : "Сортувати мапи за датою зміни",
"vcmi.client.errors.missingCampaigns" : "{Не вистачає файлів даних}\n\nФайли даних кампаній не знайдено! Можливо, ви використовуєте неповні або пошкоджені файли даних Heroes 3. Будь ласка, перевстановіть дані гри.",
"vcmi.server.errors.existingProcess" : "Працює інший процес vcmiserver, будь ласка, спочатку завершіть його",
@ -144,6 +145,8 @@
"vcmi.adventureOptions.mapScrollSpeed1.help": "Встановити швидкість розгортання мапи - дуже повільно",
"vcmi.adventureOptions.mapScrollSpeed5.help": "Встановити швидкість розгортання мапи - дуже швидко",
"vcmi.adventureOptions.mapScrollSpeed6.help": "Встановити швидкість розгортання мапи - миттєво",
"vcmi.adventureOptions.hideBackground.hover" : "Приховувати тло",
"vcmi.adventureOptions.hideBackground.help" : "{Приховувати тло}\n\nПриховати мапу пригод на задньому тлі і показати замість неї текстуру.",
"vcmi.battleOptions.queueSizeLabel.hover": "Вигляд черги ходу істот",
"vcmi.battleOptions.queueSizeNoneButton.hover": "ВИМК",
@ -183,6 +186,10 @@
"vcmi.battleWindow.damageEstimation.damage.1" : "%d одиниця пошкодження",
"vcmi.battleWindow.damageEstimation.kills" : "%d загинуть",
"vcmi.battleWindow.damageEstimation.kills.1" : "%d загине",
"vcmi.battleWindow.killed" : "Загинуло",
"vcmi.battleWindow.accurateShot.resultDescription.0" : "%d %s було вбито влучними пострілами!",
"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s було вбито влучним пострілом!",
"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s було вбито влучними пострілами!",
"vcmi.battleResultsWindow.applyResultsLabel" : "Прийняти результат бою",

View File

@ -10,8 +10,8 @@ android {
applicationId "is.xyz.vcmi"
minSdk 19
targetSdk 33
versionCode 1421
versionName "1.4.2"
versionCode 1430
versionName "1.4.3"
setProperty("archivesBaseName", "vcmi")
}

View File

@ -206,7 +206,7 @@ int main(int argc, char * argv[])
logGlobal->info("The log file will be saved to %s", logPath);
// Init filesystem and settings
preinitDLL(::console);
preinitDLL(::console, false);
Settings session = settings.write["session"];
auto setSettingBool = [](std::string key, std::string arg) {

View File

@ -1672,7 +1672,8 @@ void CPlayerInterface::showTavernWindow(const CGObjectInstance * object, const C
{
EVENT_HANDLER_CALLED_BY_CLIENT;
auto onWindowClosed = [this, queryID](){
cb->selectionMade(0, queryID);
if (queryID != QueryID::NONE)
cb->selectionMade(0, queryID);
};
GH.windows().createAndPushWindow<CTavernWindow>(object, onWindowClosed);
}

View File

@ -737,7 +737,7 @@ void CServerHandler::startCampaignScenario(HighScoreParameter param, std::shared
auto & epilogue = ourCampaign->scenario(*ourCampaign->lastScenario()).epilog;
auto finisher = [=]()
{
if(ourCampaign->campaignSet != "")
if(ourCampaign->campaignSet != "" && ourCampaign->isCampaignFinished())
{
Settings entry = persistentStorage.write["completedCampaigns"][ourCampaign->getFilename()];
entry->Bool() = true;

View File

@ -615,6 +615,14 @@ std::pair<std::unique_ptr<ui8 []>, si64> CVideoPlayer::getAudio(const VideoPath
return dat;
}
Point CVideoPlayer::size()
{
if(frame)
return Point(frame->width, frame->height);
else
return Point(0, 0);
}
// Plays a video. Only works for overlays.
bool CVideoPlayer::playVideo(int x, int y, bool stopOnKey)
{
@ -626,6 +634,8 @@ bool CVideoPlayer::playVideo(int x, int y, bool stopOnKey)
pos.y = y;
frameTime = 0.0;
auto lastTimePoint = boost::chrono::steady_clock::now();
while(nextFrame())
{
if(stopOnKey)
@ -646,10 +656,17 @@ bool CVideoPlayer::playVideo(int x, int y, bool stopOnKey)
#else
auto packet_duration = frame->duration;
#endif
double frameDurationSec = packet_duration * av_q2d(format->streams[stream]->time_base);
uint32_t timeToSleepMillisec = 1000 * (frameDurationSec);
// Framerate delay
double targetFrameTimeSeconds = packet_duration * av_q2d(format->streams[stream]->time_base);
auto targetFrameTime = boost::chrono::milliseconds(static_cast<int>(1000 * (targetFrameTimeSeconds)));
boost::this_thread::sleep_for(boost::chrono::milliseconds(timeToSleepMillisec));
auto timePointAfterPresent = boost::chrono::steady_clock::now();
auto timeSpentBusy = boost::chrono::duration_cast<boost::chrono::milliseconds>(timePointAfterPresent - lastTimePoint);
if (targetFrameTime > timeSpentBusy)
boost::this_thread::sleep_for(targetFrameTime - timeSpentBusy);
lastTimePoint = boost::chrono::steady_clock::now();
}
return true;

View File

@ -38,6 +38,7 @@ public:
return false;
}
virtual std::pair<std::unique_ptr<ui8 []>, si64> getAudio(const VideoPath & videoToOpen) { return std::make_pair(nullptr, 0); };
virtual Point size() { return Point(0, 0); };
};
class CEmptyVideoPlayer final : public IMainVideoPlayer
@ -109,6 +110,8 @@ public:
std::pair<std::unique_ptr<ui8 []>, si64> getAudio(const VideoPath & videoToOpen) override;
Point size() override;
//TODO:
bool wait() override {return false;};
int curFrame() const override {return -1;};

View File

@ -560,20 +560,17 @@ int CClient::sendRequest(const CPackForServer * request, PlayerColor player)
void CClient::battleStarted(const BattleInfo * info)
{
for(auto & battleCb : battleCallbacks)
{
if(vstd::contains_if(info->sides, [&](const SideInBattle& side) {return side.color == battleCb.first; })
|| !battleCb.first.isValidPlayer())
{
battleCb.second->onBattleStarted(info);
}
}
std::shared_ptr<CPlayerInterface> att;
std::shared_ptr<CPlayerInterface> def;
auto & leftSide = info->sides[0];
auto & rightSide = info->sides[1];
for(auto & battleCb : battleCallbacks)
{
if(!battleCb.first.isValidPlayer() || battleCb.first == leftSide.color || battleCb.first == rightSide.color)
battleCb.second->onBattleStarted(info);
}
//If quick combat is not, do not prepare interfaces for battleint
auto callBattleStart = [&](PlayerColor color, ui8 side)
{

View File

@ -164,6 +164,7 @@ public:
bool removeObject(const CGObjectInstance * obj, const PlayerColor & initiator) override {return false;};
void createObject(const int3 & visitablePosition, const PlayerColor & initiator, MapObjectID type, MapObjectSubID subtype) override {};
void setOwner(const CGObjectInstance * obj, PlayerColor owner) override {};
void giveExperience(const CGHeroInstance * hero, TExpType val) override {};
void changePrimSkill(const CGHeroInstance * hero, PrimarySkill which, si64 val, bool abs = false) override {};
void changeSecSkill(const CGHeroInstance * hero, SecondarySkill which, int val, bool abs = false) override {};
@ -201,6 +202,7 @@ public:
bool moveHero(ObjectInstanceID hid, int3 dst, ui8 teleporting, bool transit = false, PlayerColor asker = PlayerColor::NEUTRAL) override {return false;};
void giveHeroBonus(GiveBonus * bonus) override {};
void setMovePoints(SetMovePoints * smp) override {};
void setMovePoints(ObjectInstanceID hid, int val, bool absolute) override {};
void setManaPoints(ObjectInstanceID hid, int val) override {};
void giveHero(ObjectInstanceID id, PlayerColor player, ObjectInstanceID boatId = ObjectInstanceID()) override {};
void changeObjPos(ObjectInstanceID objid, int3 newPos, const PlayerColor & initiator) override {};

View File

@ -31,6 +31,7 @@
#include "../gui/Shortcut.h"
#include "../gui/WindowHandler.h"
#include "../render/Canvas.h"
#include "../render/IRenderHandler.h"
#include "../CMT.h"
#include "../PlayerLocalState.h"
#include "../CPlayerInterface.h"
@ -168,6 +169,15 @@ void AdventureMapInterface::show(Canvas & to)
void AdventureMapInterface::dim(Canvas & to)
{
if(settings["adventure"]["hideBackground"].Bool())
for (auto window : GH.windows().findWindows<IShowActivatable>())
{
if(!std::dynamic_pointer_cast<AdventureMapInterface>(window) && std::dynamic_pointer_cast<CIntObject>(window) && std::dynamic_pointer_cast<CIntObject>(window)->pos.w >= 800 && std::dynamic_pointer_cast<CIntObject>(window)->pos.w >= 600)
{
to.fillTexture(GH.renderHandler().loadImage(ImagePath::builtin("DiBoxBck")));
return;
}
}
for (auto window : GH.windows().findWindows<IShowActivatable>())
{
if (!std::dynamic_pointer_cast<AdventureMapInterface>(window) && !std::dynamic_pointer_cast<RadialMenu>(window) && !window->isPopupWindow())
@ -467,6 +477,18 @@ void AdventureMapInterface::hotkeyEndingTurn()
LOCPLINT->cb->endTurn();
mapAudio->onPlayerTurnEnded();
// Normally, game will receive PlayerStartsTurn call almost instantly with new player ID that will switch UI to waiting mode
// However, when simturns are active it is possible for such call not to come because another player is still acting
// So find first player other than ours that is acting at the moment and update UI as if he had started turn
for (auto player = PlayerColor(0); player < PlayerColor::PLAYER_LIMIT; ++player)
{
if (player != LOCPLINT->playerID && LOCPLINT->cb->isPlayerMakingTurn(player))
{
onEnemyTurnStarted(player, LOCPLINT->cb->getStartInfo()->playerInfos.at(player).isControlledByHuman());
break;
}
}
}
const CGObjectInstance* AdventureMapInterface::getActiveObject(const int3 &mapPos)
@ -679,7 +701,7 @@ void AdventureMapInterface::onTileHovered(const int3 &mapPos)
if(pathNode->layer == EPathfindingLayer::LAND)
CCS->curh->set(cursorMove[turns]);
else
CCS->curh->set(cursorSailVisit[turns]);
CCS->curh->set(cursorSail[turns]);
break;
case EPathNodeAction::VISIT:
@ -694,6 +716,15 @@ void AdventureMapInterface::onTileHovered(const int3 &mapPos)
}
else if(pathNode->layer == EPathfindingLayer::LAND)
CCS->curh->set(cursorVisit[turns]);
else if (pathNode->layer == EPathfindingLayer::SAIL &&
objAtTile &&
objAtTile->isCoastVisitable() &&
pathNode->theNodeBefore &&
pathNode->theNodeBefore->layer == EPathfindingLayer::LAND )
{
// exception - when visiting shipwreck located on coast from land - show 'horse' cursor, not 'ship' cursor
CCS->curh->set(cursorVisit[turns]);
}
else
CCS->curh->set(cursorSailVisit[turns]);
break;

View File

@ -243,6 +243,9 @@ void CInGameConsole::startEnteringText()
if (!isActive())
return;
if(enteredText != "")
return;
assert(currentStatusBar.expired());//effectively, nullptr check
currentStatusBar = GH.statusbar();

View File

@ -173,8 +173,10 @@ void MapAudioPlayer::updateMusic()
{
if(audioPlaying && playerMakingTurn && currentSelection)
{
const auto * terrain = LOCPLINT->cb->getTile(currentSelection->visitablePos())->terType;
CCS->musich->playMusicFromSet("terrain", terrain->getJsonKey(), true, false);
const auto * tile = LOCPLINT->cb->getTile(currentSelection->visitablePos());
if (tile)
CCS->musich->playMusicFromSet("terrain", tile->terType->getJsonKey(), true, false);
}
if(audioPlaying && enemyMakingTurn)

View File

@ -568,7 +568,7 @@ bool BattleActionsController::actionIsLegal(PossiblePlayerBattleAction action, B
switch (action.get())
{
case PossiblePlayerBattleAction::CHOOSE_TACTICS_STACK:
return (targetStack && targetStackOwned && targetStack->speed() > 0);
return (targetStack && targetStackOwned && targetStack->getMovementRange() > 0);
case PossiblePlayerBattleAction::CREATURE_INFO:
return (targetStack && targetStackOwned && targetStack->alive());

View File

@ -363,7 +363,7 @@ bool MovementAnimation::init()
Point begPosition = owner.stacksController->getStackPositionAtHex(prevHex, stack);
Point endPosition = owner.stacksController->getStackPositionAtHex(nextHex, stack);
progressPerSecond = AnimationControls::getMovementDistance(stack->unitType());
progressPerSecond = AnimationControls::getMovementRange(stack->unitType());
begX = begPosition.x;
begY = begPosition.y;

View File

@ -11,6 +11,7 @@
#include "BattleFieldController.h"
#include "BattleInterface.h"
#include "BattleWindow.h"
#include "BattleActionsController.h"
#include "BattleInterfaceClasses.h"
#include "BattleEffectsController.h"
@ -360,10 +361,7 @@ std::set<BattleHex> BattleFieldController::getMovementRangeForHoveredStack()
if (!settings["battle"]["movementHighlightOnHover"].Bool() && !GH.isKeyboardShiftDown())
return result;
auto hoveredHex = getHoveredHex();
// add possible movement hexes for stack under mouse
const CStack * const hoveredStack = owner.getBattle()->battleGetStackByPos(hoveredHex, true);
auto hoveredStack = getHoveredStack();
if(hoveredStack)
{
std::vector<BattleHex> v = owner.getBattle()->battleGetAvailableHexes(hoveredStack, true, true, nullptr);
@ -591,10 +589,9 @@ void BattleFieldController::showHighlightedHexes(Canvas & canvas)
std::set<BattleHex> hoveredMoveHexes = getHighlightedHexesForMovementTarget();
BattleHex hoveredHex = getHoveredHex();
if(hoveredHex == BattleHex::INVALID)
return;
const CStack * hoveredStack = getHoveredStack();
if(!hoveredStack && hoveredHex == BattleHex::INVALID)
return;
// skip range limit calculations if unit hovered is not a shooter
if(hoveredStack && hoveredStack->isShooter())
@ -608,7 +605,7 @@ void BattleFieldController::showHighlightedHexes(Canvas & canvas)
calculateRangeLimitAndHighlightImages(shootingRangeDistance, shootingRangeLimitImages, shootingRangeLimitHexes, shootingRangeLimitHexesHighligts);
}
auto const & hoveredMouseHexes = owner.actionsController->currentActionSpellcasting(getHoveredHex()) ? hoveredSpellHexes : hoveredMoveHexes;
auto const & hoveredMouseHexes = hoveredHex != BattleHex::INVALID && owner.actionsController->currentActionSpellcasting(getHoveredHex()) ? hoveredSpellHexes : hoveredMoveHexes;
for(int hex = 0; hex < GameConstants::BFIELD_SIZE; ++hex)
{
@ -676,6 +673,14 @@ const CStack* BattleFieldController::getHoveredStack()
auto hoveredHex = getHoveredHex();
const CStack* hoveredStack = owner.getBattle()->battleGetStackByPos(hoveredHex, true);
if(owner.windowObject->getQueueHoveredUnitId().has_value())
{
auto stacks = owner.getBattle()->battleGetAllStacks();
for(const CStack * stack : stacks)
if(stack->unitId() == *owner.windowObject->getQueueHoveredUnitId())
hoveredStack = stack;
}
return hoveredStack;
}

View File

@ -640,7 +640,7 @@ void BattleInterface::tacticPhaseEnd()
static bool immobile(const CStack *s)
{
return !s->speed(0, true); //should bound stacks be immobile?
return s->getMovementRange() == 0; //should bound stacks be immobile?
}
void BattleInterface::tacticNextStack(const CStack * current)

View File

@ -36,6 +36,7 @@
#include "../widgets/TextControls.h"
#include "../widgets/MiscWidgets.h"
#include "../windows/CMessage.h"
#include "../windows/CCreatureWindow.h"
#include "../windows/CSpellWindow.h"
#include "../render/CAnimation.h"
#include "../render/IRenderHandler.h"
@ -447,6 +448,119 @@ void HeroInfoBasicPanel::show(Canvas & to)
CIntObject::show(to);
}
StackInfoBasicPanel::StackInfoBasicPanel(const CStack * stack, Point * position, bool initializeBackground)
: CIntObject(0)
{
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
if (position != nullptr)
moveTo(*position);
if(initializeBackground)
{
background = std::make_shared<CPicture>(ImagePath::builtin("CCRPOP"));
background->pos.y += 37;
background->getSurface()->setBlitMode(EImageBlitMode::OPAQUE);
background->colorize(stack->getOwner());
background2 = std::make_shared<CPicture>(ImagePath::builtin("CHRPOP"));
background2->getSurface()->setBlitMode(EImageBlitMode::OPAQUE);
background2->colorize(stack->getOwner());
}
initializeData(stack);
}
void StackInfoBasicPanel::initializeData(const CStack * stack)
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
icons.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("TWCRPORT"), stack->creatureId() + 2, 0, 10, 6));
labels.push_back(std::make_shared<CLabel>(10 + 58, 6 + 64, FONT_MEDIUM, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, TextOperations::formatMetric(stack->getCount(), 4)));
auto attack = std::to_string(CGI->creatures()->getByIndex(stack->creatureIndex())->getAttack(stack->isShooter())) + "(" + std::to_string(stack->getAttack(stack->isShooter())) + ")";
auto defense = std::to_string(CGI->creatures()->getByIndex(stack->creatureIndex())->getDefense(stack->isShooter())) + "(" + std::to_string(stack->getDefense(stack->isShooter())) + ")";
auto damage = std::to_string(CGI->creatures()->getByIndex(stack->creatureIndex())->getMinDamage(stack->isShooter())) + "-" + std::to_string(stack->getMaxDamage(stack->isShooter()));
auto health = CGI->creatures()->getByIndex(stack->creatureIndex())->getMaxHealth();
auto morale = stack->moraleVal();
auto luck = stack->luckVal();
auto killed = stack->getKilled();
auto healthRemaining = TextOperations::formatMetric(std::max(stack->getAvailableHealth() - (stack->getCount() - 1) * health, (si64)0), 4);
//primary stats*/
labels.push_back(std::make_shared<CLabel>(9, 75, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[380] + ":"));
labels.push_back(std::make_shared<CLabel>(9, 87, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[381] + ":"));
labels.push_back(std::make_shared<CLabel>(9, 99, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[386] + ":"));
labels.push_back(std::make_shared<CLabel>(9, 111, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[389] + ":"));
labels.push_back(std::make_shared<CLabel>(69, 87, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, attack));
labels.push_back(std::make_shared<CLabel>(69, 99, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, defense));
labels.push_back(std::make_shared<CLabel>(69, 111, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, damage));
labels.push_back(std::make_shared<CLabel>(69, 123, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, std::to_string(health)));
//morale+luck
labels.push_back(std::make_shared<CLabel>(9, 131, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[384] + ":"));
labels.push_back(std::make_shared<CLabel>(9, 143, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[385] + ":"));
icons.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("IMRL22"), morale + 3, 0, 47, 131));
icons.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("ILCK22"), luck + 3, 0, 47, 143));
//extra information
labels.push_back(std::make_shared<CLabel>(9, 168, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, VLC->generaltexth->translate("vcmi.battleWindow.killed") + ":"));
labels.push_back(std::make_shared<CLabel>(9, 180, EFonts::FONT_TINY, ETextAlignment::TOPLEFT, Colors::WHITE, CGI->generaltexth->allTexts[389] + ":"));
labels.push_back(std::make_shared<CLabel>(69, 180, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, std::to_string(killed)));
labels.push_back(std::make_shared<CLabel>(69, 192, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, healthRemaining));
//spells
static const Point firstPos(15, 206); // position of 1st spell box
static const Point offset(0, 38); // offset of each spell box from previous
for(int i = 0; i < 3; i++)
icons.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("SpellInt"), 78, 0, firstPos.x + offset.x * i, firstPos.y + offset.y * i));
int printed=0; //how many effect pics have been printed
std::vector<SpellID> spells = stack->activeSpells();
for(SpellID effect : spells)
{
//not all effects have graphics (for eg. Acid Breath)
//for modded spells iconEffect is added to SpellInt.def
const bool hasGraphics = (effect < SpellID::THUNDERBOLT) || (effect >= SpellID::AFTER_LAST);
if (hasGraphics)
{
//FIXME: support permanent duration
int duration = stack->getBonusLocalFirst(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(effect)))->turnsRemain;
icons.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("SpellInt"), effect + 1, 0, firstPos.x + offset.x * printed, firstPos.y + offset.y * printed));
if(settings["general"]["enableUiEnhancements"].Bool())
labels.push_back(std::make_shared<CLabel>(firstPos.x + offset.x * printed + 46, firstPos.y + offset.y * printed + 36, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, std::to_string(duration)));
if(++printed >= 3 || (printed == 2 && spells.size() > 3)) // interface limit reached
break;
}
}
if(spells.size() == 0)
labelsMultiline.push_back(std::make_shared<CMultiLineLabel>(Rect(firstPos.x, firstPos.y, 48, 36), EFonts::FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, CGI->generaltexth->allTexts[674]));
if(spells.size() > 3)
labelsMultiline.push_back(std::make_shared<CMultiLineLabel>(Rect(firstPos.x + offset.x * 2, firstPos.y + offset.y * 2 - 4, 48, 36), EFonts::FONT_MEDIUM, ETextAlignment::CENTER, Colors::WHITE, "..."));
}
void StackInfoBasicPanel::update(const CStack * updatedInfo)
{
icons.clear();
labels.clear();
labelsMultiline.clear();
initializeData(updatedInfo);
}
void StackInfoBasicPanel::show(Canvas & to)
{
showAll(to);
CIntObject::show(to);
}
HeroInfoWindow::HeroInfoWindow(const InfoAboutHero & hero, Point * position)
: CWindowObject(RCLICK_POPUP | SHADOW_DISABLED, ImagePath::builtin("CHRPOP"))
{
@ -870,6 +984,10 @@ void StackQueue::StackBox::setUnit(const battle::Unit * unit, size_t turn, std::
if (unit->unitType()->getId() == CreatureID::ARROW_TOWERS)
icon->setFrame(owner->getSiegeShooterIconID(), 1);
roundRect->setEnabled(currentTurn.has_value());
if(!owner->embedded)
round->setEnabled(currentTurn.has_value());
amount->setText(TextOperations::formatMetric(unit->getCount(), 4));
if(currentTurn && !owner->embedded)
{
@ -878,9 +996,6 @@ void StackQueue::StackBox::setUnit(const battle::Unit * unit, size_t turn, std::
roundRect->pos.w = len + 6;
round->setText(tmp);
}
roundRect->setEnabled(currentTurn.has_value());
if(!owner->embedded)
round->setEnabled(currentTurn.has_value());
if(stateIcon)
{
@ -939,3 +1054,11 @@ void StackQueue::StackBox::show(Canvas & to)
if(isBoundUnitHighlighted())
to.drawBorder(background->pos, Colors::CYAN, 2);
}
void StackQueue::StackBox::showPopupWindow(const Point & cursorPosition)
{
auto stacks = owner->owner.getBattle()->battleGetAllStacks();
for(const CStack * stack : stacks)
if(boundUnitID.has_value() && stack->unitId() == *boundUnitID)
GH.windows().createAndPushWindow<CStackWindow>(stack, true);
}

View File

@ -37,6 +37,7 @@ class CFilledTexture;
class CButton;
class CToggleButton;
class CLabel;
class CMultiLineLabel;
class CTextBox;
class CAnimImage;
class TransparentFilledRectangle;
@ -145,6 +146,23 @@ public:
void update(const InfoAboutHero & updatedInfo);
};
class StackInfoBasicPanel : public CIntObject
{
private:
std::shared_ptr<CPicture> background;
std::shared_ptr<CPicture> background2;
std::vector<std::shared_ptr<CLabel>> labels;
std::vector<std::shared_ptr<CMultiLineLabel>> labelsMultiline;
std::vector<std::shared_ptr<CAnimImage>> icons;
public:
StackInfoBasicPanel(const CStack * stack, Point * position, bool initializeBackground = true);
void show(Canvas & to) override;
void initializeData(const CStack * stack);
void update(const CStack * updatedInfo);
};
class HeroInfoWindow : public CWindowObject
{
private:
@ -212,6 +230,7 @@ class StackQueue : public CIntObject
void show(Canvas & to) override;
void showAll(Canvas & to) override;
void showPopupWindow(const Point & cursorPosition) override;
bool isBoundUnitHighlighted() const;
public:

View File

@ -26,6 +26,7 @@
#include "../CMusicHandler.h"
#include "../CGameInfo.h"
#include "../gui/CGuiHandler.h"
#include "../gui/WindowHandler.h"
#include "../render/Colors.h"
#include "../render/Canvas.h"
#include "../render/IRenderHandler.h"
@ -326,7 +327,7 @@ void BattleStacksController::showStackAmountBox(Canvas & canvas, const CStack *
boxPosition = owner.fieldController->hexPositionLocal(frontPos).center() + Point(-8, -14);
}
Point textPosition = amountBG->dimensions()/2 + boxPosition;
Point textPosition = amountBG->dimensions()/2 + boxPosition + Point(0, 1);
canvas.draw(amountBG, boxPosition);
canvas.drawText(textPosition, EFonts::FONT_TINY, Colors::WHITE, ETextAlignment::CENTER, TextOperations::formatMetric(stack->getCount(), 4));
@ -812,6 +813,9 @@ void BattleStacksController::updateHoveredStacks()
{
auto newStacks = selectHoveredStacks();
if(newStacks.size() == 0)
owner.windowObject->updateStackInfoWindow(nullptr);
for(const auto * stack : mouseHoveredStacks)
{
if (vstd::contains(newStacks, stack))
@ -828,11 +832,15 @@ void BattleStacksController::updateHoveredStacks()
if (vstd::contains(mouseHoveredStacks, stack))
continue;
owner.windowObject->updateStackInfoWindow(newStacks.size() == 1 && vstd::find_pos(newStacks, stack) == 0 ? stack : nullptr);
stackAnimation[stack->unitId()]->setBorderColor(AnimationControls::getBlueBorder());
if (stackAnimation[stack->unitId()]->framesInGroup(ECreatureAnimType::MOUSEON) > 0 && stack->alive() && !stack->isFrozen())
stackAnimation[stack->unitId()]->playOnce(ECreatureAnimType::MOUSEON);
}
if(mouseHoveredStacks != newStacks)
GH.windows().totalRedraw(); //fix for frozen stack info window and blue border in action bar
mouseHoveredStacks = newStacks;
}

View File

@ -94,7 +94,6 @@ class BattleStacksController
void tickFrameBattleAnimations(uint32_t msPassed);
void updateBattleAnimations(uint32_t msPassed);
void updateHoveredStacks();
std::vector<const CStack *> selectHoveredStacks();
@ -127,6 +126,8 @@ public:
void showAliveStack(Canvas & canvas, const CStack * stack);
void showStack(Canvas & canvas, const CStack * stack);
void updateHoveredStacks();
void collectRenderableObjects(BattleRenderer & renderer);
/// Adds new color filter effect targeting stack

View File

@ -287,6 +287,35 @@ void BattleWindow::updateHeroInfoWindow(uint8_t side, const InfoAboutHero & hero
panelToUpdate->update(hero);
}
void BattleWindow::updateStackInfoWindow(const CStack * stack)
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
bool showInfoWindows = settings["battle"]["stickyHeroInfoWindows"].Bool();
if(stack && stack->unitSide() == BattleSide::DEFENDER)
{
Point position = (GH.screenDimensions().x >= 1000)
? Point(pos.x + pos.w + 15, defenderHeroWindow ? defenderHeroWindow->pos.y + 210 : pos.y)
: Point(pos.x + pos.w -79, defenderHeroWindow ? defenderHeroWindow->pos.y : pos.y + 135);
defenderStackWindow = std::make_shared<StackInfoBasicPanel>(stack, &position);
defenderStackWindow->setEnabled(showInfoWindows);
}
else
defenderStackWindow = nullptr;
if(stack && stack->unitSide() == BattleSide::ATTACKER)
{
Point position = (GH.screenDimensions().x >= 1000)
? Point(pos.x - 93, attackerHeroWindow ? attackerHeroWindow->pos.y + 210 : pos.y)
: Point(pos.x + 1, attackerHeroWindow ? attackerHeroWindow->pos.y : pos.y + 135);
attackerStackWindow = std::make_shared<StackInfoBasicPanel>(stack, &position);
attackerStackWindow->setEnabled(showInfoWindows);
}
else
attackerStackWindow = nullptr;
}
void BattleWindow::heroManaPointsChanged(const CGHeroInstance * hero)
{
if(hero == owner.attackingHeroInstance || hero == owner.defendingHeroInstance)

View File

@ -26,6 +26,7 @@ class BattleRenderer;
class StackQueue;
class TurnTimerWidget;
class HeroInfoBasicPanel;
class StackInfoBasicPanel;
/// GUI object that handles functionality of panel at the bottom of combat screen
class BattleWindow : public InterfaceObjectConfigurable
@ -36,6 +37,8 @@ class BattleWindow : public InterfaceObjectConfigurable
std::shared_ptr<BattleConsole> console;
std::shared_ptr<HeroInfoBasicPanel> attackerHeroWindow;
std::shared_ptr<HeroInfoBasicPanel> defenderHeroWindow;
std::shared_ptr<StackInfoBasicPanel> attackerStackWindow;
std::shared_ptr<StackInfoBasicPanel> defenderStackWindow;
std::shared_ptr<TurnTimerWidget> attackerTimerWidget;
std::shared_ptr<TurnTimerWidget> defenderTimerWidget;
@ -100,6 +103,9 @@ public:
/// Refresh sticky variant of hero info window after spellcast, side same as in BattleSpellCast::side
void updateHeroInfoWindow(uint8_t side, const InfoAboutHero & hero);
/// Refresh sticky variant of hero info window after spellcast, side same as in BattleSpellCast::side
void updateStackInfoWindow(const CStack * stack);
/// Get mouse-hovered battle queue unit ID if any found
std::optional<uint32_t> getQueueHoveredUnitId();

View File

@ -148,7 +148,7 @@ float AnimationControls::getSpellEffectSpeed()
return static_cast<float>(getAnimationSpeedFactor() * 10);
}
float AnimationControls::getMovementDistance(const CCreature * creature)
float AnimationControls::getMovementRange(const CCreature * creature)
{
// H3 speed: 2/4/6 tiles per second
return static_cast<float>( 2.0 * getAnimationSpeedFactor() / creature->animation.walkAnimationTime);

View File

@ -50,7 +50,7 @@ namespace AnimationControls
float getSpellEffectSpeed();
/// returns speed of movement animation across the screen, in tiles per second
float getMovementDistance(const CCreature * creature);
float getMovementRange(const CCreature * creature);
/// returns speed of movement animation across the screen, in pixels per seconds
float getFlightDistance(const CCreature * creature);

View File

@ -69,7 +69,7 @@ int ISelectionScreenInfo::getCurrentDifficulty()
PlayerInfo ISelectionScreenInfo::getPlayerInfo(PlayerColor color)
{
return getMapInfo()->mapHeader->players[color.getNum()];
return getMapInfo()->mapHeader->players.at(color.getNum());
}
CSelectionBase::CSelectionBase(ESelectionScreen type)

View File

@ -400,12 +400,11 @@ void OptionsTab::CPlayerOptionTooltipBox::genBonusWindow()
textBonusDescription = std::make_shared<CTextBox>(getDescription(), Rect(10, 100, pos.w - 20, 70), 0, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE);
}
OptionsTab::SelectionWindow::SelectionWindow(PlayerColor _color, SelType _type)
: CWindowObject(BORDERED)
OptionsTab::SelectionWindow::SelectionWindow(const PlayerColor & color, SelType _type)
: CWindowObject(BORDERED), color(color)
{
addUsedEvents(LCLICK | SHOW_POPUP);
color = _color;
type = _type;
initialFaction = SEL->getStartInfo()->playerInfos.find(color)->second.castle;
@ -483,7 +482,8 @@ void OptionsTab::SelectionWindow::reopen()
{
auto window = std::shared_ptr<SelectionWindow>(new SelectionWindow(color, type));
close();
GH.windows().pushWindow(window);
if(CSH->isMyColor(color) || CSH->isHost())
GH.windows().pushWindow(window);
}
void OptionsTab::SelectionWindow::recreate()
@ -537,11 +537,11 @@ void OptionsTab::SelectionWindow::recreate()
void OptionsTab::SelectionWindow::drawOutlinedText(int x, int y, ColorRGBA color, std::string text)
{
components.push_back(std::make_shared<CLabel>(x-1, y, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text));
components.push_back(std::make_shared<CLabel>(x+1, y, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text));
components.push_back(std::make_shared<CLabel>(x, y-1, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text));
components.push_back(std::make_shared<CLabel>(x, y+1, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text));
components.push_back(std::make_shared<CLabel>(x, y, FONT_TINY, ETextAlignment::CENTER, color, text));
components.push_back(std::make_shared<CLabel>(x-1, y, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text, 56));
components.push_back(std::make_shared<CLabel>(x+1, y, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text, 56));
components.push_back(std::make_shared<CLabel>(x, y-1, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text, 56));
components.push_back(std::make_shared<CLabel>(x, y+1, FONT_TINY, ETextAlignment::CENTER, Colors::BLACK, text, 56));
components.push_back(std::make_shared<CLabel>(x, y, FONT_TINY, ETextAlignment::CENTER, color, text, 56));
}
void OptionsTab::SelectionWindow::genContentGrid(int lines)
@ -632,7 +632,7 @@ void OptionsTab::SelectionWindow::genContentHeroes()
void OptionsTab::SelectionWindow::genContentBonus()
{
PlayerSettings set = PlayerSettings();
PlayerSettings set = SEL->getStartInfo()->playerInfos.find(color)->second;
int i = 0;
for(auto elem : allowedBonus)
@ -774,7 +774,7 @@ OptionsTab::SelectedBox::SelectedBox(Point position, PlayerSettings & playerSett
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
image = std::make_shared<CAnimImage>(getImageName(), getImageIndex());
subtitle = std::make_shared<CLabel>(23, 39, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, getName());
subtitle = std::make_shared<CLabel>(24, 39, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, getName(), 71);
pos = image->pos;
@ -889,7 +889,7 @@ OptionsTab::PlayerOptionsEntry::PlayerOptionsEntry(const PlayerSettings & S, con
background = std::make_shared<CPicture>(ImagePath::builtin(bgs[s->color]), 0, 0);
if(s->isControlledByAI() || CSH->isGuest())
labelPlayerName = std::make_shared<CLabel>(55, 10, EFonts::FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, name);
labelPlayerName = std::make_shared<CLabel>(55, 10, EFonts::FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, name, 95);
else
{
labelPlayerNameEdit = std::make_shared<CTextInput>(Rect(6, 3, 95, 15), EFonts::FONT_SMALL, nullptr, false);

View File

@ -148,7 +148,7 @@ private:
public:
void reopen();
SelectionWindow(PlayerColor _color, SelType _type);
SelectionWindow(const PlayerColor & color, SelType _type);
};
/// Image with current town/hero/bonus

View File

@ -22,6 +22,14 @@
#include "../../lib/MetaString.h"
#include "../../lib/CGeneralTextHandler.h"
static std::string timeToString(int time)
{
std::stringstream ss;
ss << time / 1000 / 60 << ":" << std::setw(2) << std::setfill('0') << time / 1000 % 60;
return ss.str();
};
std::vector<TurnTimerInfo> OptionsTabBase::getTimerPresets() const
{
std::vector<TurnTimerInfo> result;
@ -153,43 +161,51 @@ OptionsTabBase::OptionsTabBase(const JsonPath & configPath)
else if(l.empty())
return sec;
return std::stoi(l) * 60 + std::stoi(r);
return std::min(24*60, std::stoi(l)) * 60 + std::stoi(r);
};
addCallback("parseAndSetTimer_base", [parseTimerString](const std::string & str){
addCallback("parseAndSetTimer_base", [this, parseTimerString](const std::string & str){
int time = parseTimerString(str) * 1000;
if(time >= 0)
{
TurnTimerInfo tinfo = SEL->getStartInfo()->turnTimerInfo;
tinfo.baseTimer = time;
CSH->setTurnTimerInfo(tinfo);
if(auto ww = widget<CTextInput>("chessFieldBase"))
ww->setText(timeToString(time), false);
}
});
addCallback("parseAndSetTimer_turn", [parseTimerString](const std::string & str){
addCallback("parseAndSetTimer_turn", [this, parseTimerString](const std::string & str){
int time = parseTimerString(str) * 1000;
if(time >= 0)
{
TurnTimerInfo tinfo = SEL->getStartInfo()->turnTimerInfo;
tinfo.turnTimer = time;
CSH->setTurnTimerInfo(tinfo);
if(auto ww = widget<CTextInput>("chessFieldTurn"))
ww->setText(timeToString(time), false);
}
});
addCallback("parseAndSetTimer_battle", [parseTimerString](const std::string & str){
addCallback("parseAndSetTimer_battle", [this, parseTimerString](const std::string & str){
int time = parseTimerString(str) * 1000;
if(time >= 0)
{
TurnTimerInfo tinfo = SEL->getStartInfo()->turnTimerInfo;
tinfo.battleTimer = time;
CSH->setTurnTimerInfo(tinfo);
if(auto ww = widget<CTextInput>("chessFieldBattle"))
ww->setText(timeToString(time), false);
}
});
addCallback("parseAndSetTimer_unit", [parseTimerString](const std::string & str){
addCallback("parseAndSetTimer_unit", [this, parseTimerString](const std::string & str){
int time = parseTimerString(str) * 1000;
if(time >= 0)
{
TurnTimerInfo tinfo = SEL->getStartInfo()->turnTimerInfo;
tinfo.unitTimer = time;
CSH->setTurnTimerInfo(tinfo);
if(auto ww = widget<CTextInput>("chessFieldUnit"))
ww->setText(timeToString(time), false);
}
});
@ -371,14 +387,6 @@ void OptionsTabBase::recreate()
}
}
//chess timer
auto timeToString = [](int time) -> std::string
{
std::stringstream ss;
ss << time / 1000 / 60 << ":" << std::setw(2) << std::setfill('0') << time / 1000 % 60;
return ss.str();
};
if(auto ww = widget<CTextInput>("chessFieldBase"))
ww->setText(timeToString(turnTimerRemote.baseTimer), false);
if(auto ww = widget<CTextInput>("chessFieldTurn"))

View File

@ -113,6 +113,8 @@ bool mapSorter::operator()(const std::shared_ptr<ElementInfo> aaa, const std::sh
return boost::ilexicographical_compare(a->name.toString(), b->name.toString());
case _fileName: //by filename
return boost::ilexicographical_compare(aaa->fileURI, bbb->fileURI);
case _changeDate: //by changedate
return aaa->lastWrite < bbb->lastWrite;
default:
return boost::ilexicographical_compare(a->name.toString(), b->name.toString());
}
@ -152,9 +154,11 @@ SelectionTab::SelectionTab(ESelectionScreen Type)
: CIntObject(LCLICK | SHOW_POPUP | KEYBOARD | DOUBLECLICK), callOnSelect(nullptr), tabType(Type), selectionPos(0), sortModeAscending(true), inputNameRect{32, 539, 350, 20}, curFolder(""), currentMapSizeFilter(0), showRandom(false)
{
OBJ_CONSTRUCTION;
generalSortingBy = getSortBySelectionScreen(tabType);
bool enableUiEnhancements = settings["general"]["enableUiEnhancements"].Bool();
if(tabType != ESelectionScreen::campaignList)
{
sortingBy = _format;
@ -211,6 +215,12 @@ SelectionTab::SelectionTab(ESelectionScreen Type)
break;
}
if(enableUiEnhancements)
{
buttonsSortBy.push_back(std::make_shared<CButton>(Point(371, 85), AnimationPath::builtin("lobby/selectionTabSortDate"), CButton::tooltip("", CGI->generaltexth->translate("vcmi.lobby.sortDate")), std::bind(&SelectionTab::sortBy, this, ESortBy::_changeDate)));
buttonsSortBy.back()->setAnimateLonelyFrame(true);
}
iconsMapFormats = GH.renderHandler().loadAnimation(AnimationPath::builtin("SCSELC.DEF"));
iconsVictoryCondition = GH.renderHandler().loadAnimation(AnimationPath::builtin("SCNRVICT.DEF"));
iconsLossCondition = GH.renderHandler().loadAnimation(AnimationPath::builtin("SCNRLOSS.DEF"));
@ -218,7 +228,7 @@ SelectionTab::SelectionTab(ESelectionScreen Type)
listItems.push_back(std::make_shared<ListItem>(Point(30, 129 + i * 25), iconsMapFormats, iconsVictoryCondition, iconsLossCondition));
labelTabTitle = std::make_shared<CLabel>(205, 28, FONT_MEDIUM, ETextAlignment::CENTER, Colors::YELLOW, tabTitle);
slider = std::make_shared<CSlider>(Point(372, 86), tabType != ESelectionScreen::saveGame ? 480 : 430, std::bind(&SelectionTab::sliderMove, this, _1), positionsToShow, (int)curItems.size(), 0, Orientation::VERTICAL, CSlider::BLUE);
slider = std::make_shared<CSlider>(Point(372, 86 + (enableUiEnhancements ? 30 : 0)), (tabType != ESelectionScreen::saveGame ? 480 : 430) - (enableUiEnhancements ? 30 : 0), std::bind(&SelectionTab::sliderMove, this, _1), positionsToShow, (int)curItems.size(), 0, Orientation::VERTICAL, CSlider::BLUE);
slider->setPanningStep(24);
// create scroll bounds that encompass all area in this UI element to the left of slider (including area of slider itself)
@ -826,7 +836,7 @@ SelectionTab::ListItem::ListItem(Point position, std::shared_ptr<CAnimation> ico
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
pictureEmptyLine = std::make_shared<CPicture>(GH.renderHandler().loadImage(ImagePath::builtin("camcust")), Rect(25, 121, 349, 26), -8, -14);
labelName = std::make_shared<CLabel>(184, 0, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE);
labelName = std::make_shared<CLabel>(184, 0, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, "", 185);
labelName->setAutoRedraw(false);
labelAmountOfPlayers = std::make_shared<CLabel>(8, 0, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE);
labelAmountOfPlayers->setAutoRedraw(false);
@ -869,11 +879,13 @@ void SelectionTab::ListItem::updateItem(std::shared_ptr<ElementInfo> info, bool
iconLossCondition->disable();
labelNumberOfCampaignMaps->disable();
labelName->enable();
labelName->setMaxWidth(316);
labelName->setText(info->folderName);
labelName->setColor(color);
return;
}
labelName->enable();
if(info->campaign)
{
labelAmountOfPlayers->disable();
@ -888,6 +900,7 @@ void SelectionTab::ListItem::updateItem(std::shared_ptr<ElementInfo> info, bool
ostr << info->campaign->scenariosCount();
labelNumberOfCampaignMaps->setText(ostr.str());
labelNumberOfCampaignMaps->setColor(color);
labelName->setMaxWidth(316);
}
else
{
@ -908,8 +921,8 @@ void SelectionTab::ListItem::updateItem(std::shared_ptr<ElementInfo> info, bool
iconVictoryCondition->setFrame(info->mapHeader->victoryIconIndex, 0);
iconLossCondition->enable();
iconLossCondition->setFrame(info->mapHeader->defeatIconIndex, 0);
labelName->setMaxWidth(185);
}
labelName->enable();
labelName->setText(info->getNameForList());
labelName->setColor(color);
}

View File

@ -23,7 +23,7 @@ class IImage;
enum ESortBy
{
_playerAm, _size, _format, _name, _viccon, _loscon, _numOfMaps, _fileName
_playerAm, _size, _format, _name, _viccon, _loscon, _numOfMaps, _fileName, _changeDate
}; //_numOfMaps is for campaigns
class ElementInfo : public CMapInfo

View File

@ -45,10 +45,8 @@ CPrologEpilogVideo::CPrologEpilogVideo(CampaignScenarioPrologEpilog _spe, std::f
void CPrologEpilogVideo::show(Canvas & to)
{
to.drawColor(pos, Colors::BLACK);
//BUG: some videos are 800x600 in size while some are 800x400
//VCMI should center them in the middle of the screen. Possible but needs modification
//of video player API which I'd like to avoid until we'll get rid of Windows-specific player
CCS->videoh->update(pos.x, pos.y, to.getInternalSurface(), true, false);
//some videos are 800x600 in size while some are 800x400
CCS->videoh->update(pos.x, pos.y + (CCS->videoh->size().y == 400 ? 100 : 0), to.getInternalSurface(), true, false);
//move text every 5 calls/frames; seems to be good enough
++positionCounter;

View File

@ -182,6 +182,20 @@ void Canvas::drawColorBlended(const Rect & target, const ColorRGBA & color)
CSDL_Ext::fillRectBlended(surface, realTarget, CSDL_Ext::toSDL(color));
}
void Canvas::fillTexture(const std::shared_ptr<IImage>& image)
{
assert(image);
if (!image)
return;
Rect imageArea = Rect(Point(0, 0), image->dimensions());
for (int y=0; y < surface->h; y+= imageArea.h)
{
for (int x=0; x < surface->w; x+= imageArea.w)
image->draw(surface, renderArea.x + x, renderArea.y + y);
}
}
SDL_Surface * Canvas::getInternalSurface()
{
return surface;

View File

@ -99,6 +99,9 @@ public:
/// fills selected area with blended color
void drawColorBlended(const Rect & target, const ColorRGBA & color);
/// fills canvas with texture
void fillTexture(const std::shared_ptr<IImage>& image);
/// Compatibility method. AVOID USAGE. To be removed once SDL abstraction layer is finished.
SDL_Surface * getInternalSurface();

View File

@ -284,7 +284,12 @@ void ScreenHandler::initializeWindow()
mainRenderer = SDL_CreateRenderer(mainWindow, getPreferredRenderingDriver(), rendererFlags);
if(mainRenderer == nullptr)
throw std::runtime_error("Unable to create renderer\n");
{
const char * error = SDL_GetError();
std::string messagePattern = "Failed to create SDL renderer. Reason: %s";
std::string message = boost::str(boost::format(messagePattern) % error);
handleFatalError(message, true);
}
SDL_RendererInfo info;
SDL_GetRendererInfo(mainRenderer, &info);

View File

@ -611,6 +611,8 @@ void MoraleLuckBox::set(const AFactionMember * node)
image = std::make_shared<CAnimImage>(AnimationPath::builtin(imageName), *component.value + 3);
image->moveBy(Point(pos.w/2 - image->pos.w/2, pos.h/2 - image->pos.h/2));//center icon
if(settings["general"]["enableUiEnhancements"].Bool())
label = std::make_shared<CLabel>(small ? 30 : 42, small ? 20 : 38, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, std::to_string(modifierList->totalValue()));
}
MoraleLuckBox::MoraleLuckBox(bool Morale, const Rect &r, bool Small)

View File

@ -238,6 +238,7 @@ public:
class MoraleLuckBox : public LRClickableAreaWTextComp
{
std::shared_ptr<CAnimImage> image;
std::shared_ptr<CLabel> label;
public:
bool morale; //true if morale, false if luck
bool small;

View File

@ -47,8 +47,8 @@ void CLabel::showAll(Canvas & to)
}
CLabel::CLabel(int x, int y, EFonts Font, ETextAlignment Align, const ColorRGBA & Color, const std::string & Text)
: CTextContainer(Align, Font, Color), text(Text)
CLabel::CLabel(int x, int y, EFonts Font, ETextAlignment Align, const ColorRGBA & Color, const std::string & Text, int maxWidth)
: CTextContainer(Align, Font, Color), text(Text), maxWidth(maxWidth)
{
setRedrawParent(true);
autoRedraw = true;
@ -56,6 +56,8 @@ CLabel::CLabel(int x, int y, EFonts Font, ETextAlignment Align, const ColorRGBA
pos.y += y;
pos.w = pos.h = 0;
trimText();
if(alignment == ETextAlignment::TOPLEFT) // causes issues for MIDDLE
{
pos.w = (int)graphics->fonts[font]->getStringWidth(visibleText().c_str());
@ -81,6 +83,9 @@ void CLabel::setAutoRedraw(bool value)
void CLabel::setText(const std::string & Txt)
{
text = Txt;
trimText();
if(autoRedraw)
{
if(background || !parent)
@ -90,6 +95,18 @@ void CLabel::setText(const std::string & Txt)
}
}
void CLabel::setMaxWidth(int width)
{
maxWidth = width;
}
void CLabel::trimText()
{
if(maxWidth > 0)
while ((int)graphics->fonts[font]->getStringWidth(visibleText().c_str()) > maxWidth)
TextOperations::trimRightUnicode(text);
}
void CLabel::setColor(const ColorRGBA & Color)
{
color = Color;
@ -444,7 +461,7 @@ void CGStatusBar::clear()
}
CGStatusBar::CGStatusBar(std::shared_ptr<CIntObject> background_, EFonts Font, ETextAlignment Align, const ColorRGBA & Color)
: CLabel(background_->pos.x, background_->pos.y, Font, Align, Color, "")
: CLabel(background_->pos.x, background_->pos.y, Font, Align, Color, "", background_->pos.w)
, enteringText(false)
{
addUsedEvents(LCLICK);
@ -542,6 +559,7 @@ CTextInput::CTextInput(const Rect & Pos, EFonts font, const CFunctionList<void(c
setRedrawParent(true);
pos.h = Pos.h;
pos.w = Pos.w;
maxWidth = Pos.w;
background.reset();
addUsedEvents(LCLICK | SHOW_POPUP | KEYBOARD | TEXTINPUT);
@ -557,6 +575,7 @@ CTextInput::CTextInput(const Rect & Pos, const Point & bgOffset, const ImagePath
pos += Pos.topLeft();
pos.h = Pos.h;
pos.w = Pos.w;
maxWidth = Pos.w;
OBJ_CONSTRUCTION;
background = std::make_shared<CPicture>(bgName, bgOffset.x, bgOffset.y);
@ -575,6 +594,7 @@ CTextInput::CTextInput(const Rect & Pos, std::shared_ptr<IImage> srf)
background = std::make_shared<CPicture>(srf, Pos);
pos.w = background->pos.w;
pos.h = background->pos.h;
maxWidth = Pos.w;
background->pos = pos;
addUsedEvents(LCLICK | KEYBOARD | TEXTINPUT);
@ -683,7 +703,7 @@ void CTextInput::textInputed(const std::string & enteredText)
return;
std::string oldText = text;
text += enteredText;
setText(getText() + enteredText);
filters(text, oldText);
if(text != oldText)

View File

@ -43,9 +43,11 @@ class CLabel : public CTextContainer
protected:
Point getBorderSize() override;
virtual std::string visibleText();
virtual void trimText();
std::shared_ptr<CIntObject> background;
std::string text;
int maxWidth;
bool autoRedraw; //whether control will redraw itself on setTxt
public:
@ -53,11 +55,12 @@ public:
std::string getText();
virtual void setAutoRedraw(bool option);
virtual void setText(const std::string & Txt);
virtual void setMaxWidth(int width);
virtual void setColor(const ColorRGBA & Color);
size_t getWidth();
CLabel(int x = 0, int y = 0, EFonts Font = FONT_SMALL, ETextAlignment Align = ETextAlignment::TOPLEFT,
const ColorRGBA & Color = Colors::WHITE, const std::string & Text = "");
const ColorRGBA & Color = Colors::WHITE, const std::string & Text = "", int maxWidth = 0);
void showAll(Canvas & to) override; //shows statusbar (with current text)
};

View File

@ -1430,7 +1430,7 @@ CHallInterface::CBuildingBox::CBuildingBox(int x, int y, const CGTownInstance *
header = std::make_shared<CAnimImage>(AnimationPath::builtin("TPTHBAR"), panelIndex[static_cast<int>(state)], 0, 1, 73);
if(iconIndex[static_cast<int>(state)] >=0)
mark = std::make_shared<CAnimImage>(AnimationPath::builtin("TPTHCHK"), iconIndex[static_cast<int>(state)], 0, 136, 56);
name = std::make_shared<CLabel>(75, 81, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, building->getNameTranslated());
name = std::make_shared<CLabel>(78, 81, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, building->getNameTranslated(), 150);
//todo: add support for all possible states
if(state >= EBuildingState::BUILDING_ERROR)
@ -1769,7 +1769,7 @@ CFortScreen::RecruitArea::RecruitArea(int posX, int posY, const CGTownInstance *
if(getMyBuilding() != nullptr)
{
buildingIcon = std::make_shared<CAnimImage>(town->town->clientInfo.buildingsIcons, getMyBuilding()->bid, 0, 4, 21);
buildingName = std::make_shared<CLabel>(78, 101, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, getMyBuilding()->getNameTranslated());
buildingName = std::make_shared<CLabel>(78, 101, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, getMyBuilding()->getNameTranslated(), 152);
if(vstd::contains(town->builtBuildings, getMyBuilding()->bid))
{
@ -1783,7 +1783,7 @@ CFortScreen::RecruitArea::RecruitArea(int posX, int posY, const CGTownInstance *
{
hoverText = boost::str(boost::format(CGI->generaltexth->tcommands[21]) % getMyCreature()->getNamePluralTranslated());
new CCreaturePic(159, 4, getMyCreature(), false);
new CLabel(78, 11, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, getMyCreature()->getNamePluralTranslated());
new CLabel(78, 11, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, getMyCreature()->getNamePluralTranslated(), 152);
Rect sizes(287, 4, 96, 18);
values.push_back(std::make_shared<LabeledValue>(sizes, CGI->generaltexth->allTexts[190], CGI->generaltexth->fcommands[0], getMyCreature()->getAttack(false)));

View File

@ -229,6 +229,7 @@ CStackWindow::ActiveSpellsSection::ActiveSpellsSection(CStackWindow * owner, int
boost::replace_first(spellText, "%d", std::to_string(duration));
spellIcons.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("SpellInt"), effect + 1, 0, firstPos.x + offset.x * printed, firstPos.y + offset.y * printed));
labels.push_back(std::make_shared<CLabel>(firstPos.x + offset.x * printed + 46, firstPos.y + offset.y * printed + 36, EFonts::FONT_TINY, ETextAlignment::BOTTOMRIGHT, Colors::WHITE, std::to_string(duration)));
clickableAreas.push_back(std::make_shared<LRClickableAreaWText>(Rect(firstPos + offset * printed, Point(50, 38)), spellText, spellText));
if(++printed >= 8) // interface limit reached
break;
@ -542,7 +543,7 @@ CStackWindow::MainSection::MainSection(CStackWindow * owner, int yOffset, bool s
addStatLabel(EStat::DEFENCE, parent->info->creature->getDefense(battleStack->isShooter()), battleStack->getDefense(battleStack->isShooter()));
addStatLabel(EStat::DAMAGE, parent->info->stackNode->getMinDamage(battleStack->isShooter()) * dmgMultiply, battleStack->getMaxDamage(battleStack->isShooter()) * dmgMultiply);
addStatLabel(EStat::HEALTH, parent->info->creature->getMaxHealth(), battleStack->getMaxHealth());
addStatLabel(EStat::SPEED, parent->info->creature->speed(), battleStack->speed());
addStatLabel(EStat::SPEED, parent->info->creature->getMovementRange(), battleStack->getMovementRange());
if(battleStack->isShooter())
addStatLabel(EStat::SHOTS, battleStack->shots.total(), battleStack->shots.available());
@ -562,7 +563,7 @@ CStackWindow::MainSection::MainSection(CStackWindow * owner, int yOffset, bool s
addStatLabel(EStat::DEFENCE, parent->info->creature->getDefense(shooter), parent->info->stackNode->getDefense(shooter));
addStatLabel(EStat::DAMAGE, parent->info->stackNode->getMinDamage(shooter) * dmgMultiply, parent->info->stackNode->getMaxDamage(shooter) * dmgMultiply);
addStatLabel(EStat::HEALTH, parent->info->creature->getMaxHealth(), parent->info->stackNode->getMaxHealth());
addStatLabel(EStat::SPEED, parent->info->creature->speed(), parent->info->stackNode->speed());
addStatLabel(EStat::SPEED, parent->info->creature->getMovementRange(), parent->info->stackNode->getMovementRange());
if(shooter)
addStatLabel(EStat::SHOTS, parent->info->stackNode->valOfBonuses(BonusType::SHOTS));
@ -665,6 +666,7 @@ CStackWindow::CStackWindow(const CStack * stack, bool popup)
{
info->stack = stack;
info->stackNode = stack->base;
info->commander = dynamic_cast<const CCommanderInstance*>(stack->base);
info->creature = stack->unitType();
info->creatureCount = stack->getCount();
info->popupWindow = popup;

View File

@ -72,6 +72,7 @@ class CStackWindow : public CWindowObject
{
std::vector<std::shared_ptr<CAnimImage>> spellIcons;
std::vector<std::shared_ptr<LRClickableAreaWText>> clickableAreas;
std::vector<std::shared_ptr<CLabel>> labels;
public:
ActiveSpellsSection(CStackWindow * owner, int yOffset);
};

View File

@ -323,10 +323,10 @@ void CSpellWindow::processSpells()
sitesPerTabAdv[v] = 1;
else
{
if((sitesPerTabAdv[v] - spellsPerPage - 2) % spellsPerPage == 0)
sitesPerTabAdv[v] = (sitesPerTabAdv[v] - spellsPerPage - 2) / spellsPerPage + 1;
if((sitesPerTabAdv[v] - (spellsPerPage - 2)) % spellsPerPage == 0)
sitesPerTabAdv[v] = (sitesPerTabAdv[v] - (spellsPerPage - 2)) / spellsPerPage + 1;
else
sitesPerTabAdv[v] = (sitesPerTabAdv[v] - spellsPerPage - 2) / spellsPerPage + 2;
sitesPerTabAdv[v] = (sitesPerTabAdv[v] - (spellsPerPage - 2)) / spellsPerPage + 2;
}
}
@ -341,10 +341,10 @@ void CSpellWindow::processSpells()
sitesPerTabBattle[v] = 1;
else
{
if((sitesPerTabBattle[v] - spellsPerPage - 2) % spellsPerPage == 0)
sitesPerTabBattle[v] = (sitesPerTabBattle[v] - spellsPerPage - 2) / spellsPerPage + 1;
if((sitesPerTabBattle[v] - (spellsPerPage - 2)) % spellsPerPage == 0)
sitesPerTabBattle[v] = (sitesPerTabBattle[v] - (spellsPerPage - 2)) / spellsPerPage + 1;
else
sitesPerTabBattle[v] = (sitesPerTabBattle[v] - spellsPerPage - 2) / spellsPerPage + 2;
sitesPerTabBattle[v] = (sitesPerTabBattle[v] - (spellsPerPage - 2)) / spellsPerPage + 2;
}
}
}

View File

@ -134,6 +134,10 @@ AdventureOptionsTab::AdventureOptionsTab()
{
return setBoolSetting("gameTweaks", "skipAdventureMapAnimations", value);
});
addCallback("hideBackgroundChanged", [](bool value)
{
return setBoolSetting("adventure", "hideBackground", value);
});
build(config);
std::shared_ptr<CToggleGroup> playerHeroSpeedToggle = widget<CToggleGroup>("heroMovementSpeedPicker");
@ -179,4 +183,7 @@ AdventureOptionsTab::AdventureOptionsTab()
std::shared_ptr<CToggleButton> skipAdventureMapAnimationsCheckbox = widget<CToggleButton>("skipAdventureMapAnimationsCheckbox");
skipAdventureMapAnimationsCheckbox->setSelected(settings["gameTweaks"]["skipAdventureMapAnimations"].Bool());
std::shared_ptr<CToggleButton> hideBackgroundCheckbox = widget<CToggleButton>("hideBackgroundCheckbox");
hideBackgroundCheckbox->setSelected(settings["adventure"]["hideBackground"].Bool());
}

View File

@ -156,6 +156,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
${MAIN_LIB_DIR}/rmg/modificators/ObjectDistributor.cpp
${MAIN_LIB_DIR}/rmg/modificators/RoadPlacer.cpp
${MAIN_LIB_DIR}/rmg/modificators/TreasurePlacer.cpp
${MAIN_LIB_DIR}/rmg/modificators/PrisonHeroPlacer.cpp
${MAIN_LIB_DIR}/rmg/modificators/QuestArtifactPlacer.cpp
${MAIN_LIB_DIR}/rmg/modificators/ConnectionsPlacer.cpp
${MAIN_LIB_DIR}/rmg/modificators/WaterAdopter.cpp
@ -526,6 +527,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
${MAIN_LIB_DIR}/rmg/modificators/ObjectDistributor.h
${MAIN_LIB_DIR}/rmg/modificators/RoadPlacer.h
${MAIN_LIB_DIR}/rmg/modificators/TreasurePlacer.h
${MAIN_LIB_DIR}/rmg/modificators/PrisonHeroPlacer.h
${MAIN_LIB_DIR}/rmg/modificators/QuestArtifactPlacer.h
${MAIN_LIB_DIR}/rmg/modificators/ConnectionsPlacer.h
${MAIN_LIB_DIR}/rmg/modificators/WaterAdopter.h

View File

@ -1,6 +1,6 @@
set(VCMI_VERSION_MAJOR 1)
set(VCMI_VERSION_MINOR 4)
set(VCMI_VERSION_PATCH 2)
set(VCMI_VERSION_PATCH 3)
add_definitions(
-DVCMI_VERSION_MAJOR=${VCMI_VERSION_MAJOR}
-DVCMI_VERSION_MINOR=${VCMI_VERSION_MINOR}

View File

@ -1730,7 +1730,7 @@
"bonuses" : [
{
"type" : "CREATURE_GROWTH",
"subtype" : "creatureLevel1",
"subtype" : "creatureLevel2",
"val" : 5,
"propagator": "VISITED_TOWN_AND_VISITOR"
}
@ -1743,7 +1743,7 @@
"bonuses" : [
{
"type" : "CREATURE_GROWTH",
"subtype" : "creatureLevel2",
"subtype" : "creatureLevel3",
"val" : 4,
"propagator": "VISITED_TOWN_AND_VISITOR"
}
@ -1756,7 +1756,7 @@
"bonuses" : [
{
"type" : "CREATURE_GROWTH",
"subtype" : "creatureLevel3",
"subtype" : "creatureLevel4",
"val" : 3,
"propagator": "VISITED_TOWN_AND_VISITOR"
}
@ -1769,7 +1769,7 @@
"bonuses" : [
{
"type" : "CREATURE_GROWTH",
"subtype" : "creatureLevel4",
"subtype" : "creatureLevel5",
"val" : 2,
"propagator": "VISITED_TOWN_AND_VISITOR"
}
@ -1782,7 +1782,7 @@
"bonuses" : [
{
"type" : "CREATURE_GROWTH",
"subtype" : "creatureLevel5",
"subtype" : "creatureLevel6",
"val" : 1,
"propagator": "VISITED_TOWN_AND_VISITOR"
}

View File

@ -145,6 +145,14 @@
}
},
"ENEMY_ATTACK_REDUCTION":
{
"graphics":
{
"icon": "zvs/Lib1.res/E_RDEF"
}
},
"ENEMY_DEFENCE_REDUCTION":
{
"graphics":
@ -185,6 +193,14 @@
}
},
"FEROCITY":
{
"graphics":
{
"icon": ""
}
},
"FLYING":
{
"graphics":
@ -428,6 +444,14 @@
}
},
"REVENGE":
{
"graphics":
{
"icon": ""
}
},
"SHOOTER":
{
"graphics":

View File

@ -5,7 +5,7 @@
[
["CREATURE_DAMAGE", 2, "creatureDamageMin", 0 ], //+2 minimum damage
["CREATURE_DAMAGE", 4, "creatureDamageMax", 0 ], //+4 maximum damage
["STACK_HEALTH", 20, null, 0 ] //+5 hp
["STACK_HEALTH", 20, null, 0 ] //+20 hp
],
//Value of bonuses given by each skill level
"skillLevels":

View File

@ -411,12 +411,6 @@
"type" : "LEVEL_SPELL_IMMUNITY",
"val" : 5
},
"hateGiants" :
{
"type" : "HATE",
"subtype" : "creature.giant",
"val" : 50
},
"hateTitans" :
{
"type" : "HATE",

View File

@ -371,6 +371,8 @@
"pathfinder" :
{
// if enabled, pathfinder will build path through locations guarded by wandering monsters
"ignoreGuards" : false,
// if enabled, pathfinder will take use of any available boats
"useBoat" : true,
// if enabled, pathfinder will take use of any bidirectional monoliths

View File

@ -199,6 +199,7 @@
},
"driver" : {
"type" : "string",
"defaultWindows" : "",
"default" : "opengl",
"description" : "preferred graphics backend driver name for SDL2"
},
@ -240,7 +241,7 @@
"type" : "object",
"additionalProperties" : false,
"default" : {},
"required" : [ "heroMoveTime", "enemyMoveTime", "scrollSpeedPixels", "heroReminder", "quickCombat", "objectAnimation", "terrainAnimation", "forceQuickCombat", "borderScroll", "leftButtonDrag", "smoothDragging", "backgroundDimLevel" ],
"required" : [ "heroMoveTime", "enemyMoveTime", "scrollSpeedPixels", "heroReminder", "quickCombat", "objectAnimation", "terrainAnimation", "forceQuickCombat", "borderScroll", "leftButtonDrag", "smoothDragging", "backgroundDimLevel", "hideBackground" ],
"properties" : {
"heroMoveTime" : {
"type" : "number",
@ -293,6 +294,10 @@
"type" : "number",
"default" : 128
},
"hideBackground" : {
"type" : "boolean",
"default" : false
}
}
},
"battle" : {

View File

@ -297,6 +297,9 @@
},
{
"text": "vcmi.adventureOptions.showGrid.hover"
},
{
"text": "vcmi.adventureOptions.hideBackground.hover"
}
]
},
@ -324,6 +327,11 @@
"name": "showGridCheckbox",
"help": "vcmi.adventureOptions.showGrid",
"callback": "showGridChanged"
},
{
"name": "hideBackgroundCheckbox",
"help": "vcmi.adventureOptions.hideBackground",
"callback": "hideBackgroundChanged"
}
]
},

View File

@ -317,6 +317,7 @@
{
"name": "buttonSimturnsAI",
"position": {"x": 70, "y": 535},
"help" : "vcmi.optionsTab.simturnsAI",
"type": "toggleButton",
"image": "lobby/checkbox",
"callback" : "setSimturnAI"

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
vcmi (1.4.3) jammy; urgency=medium
* New upstream release
-- Ivan Savenko <saven.ivan@gmail.com> Fri, 19 Jan 2024 12:00:00 +0200
vcmi (1.4.2) jammy; urgency=medium
* New upstream release

View File

@ -2,6 +2,7 @@
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.0/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.0)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.1/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.1)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.2/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.2)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.3/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.3)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/total)](https://github.com/vcmi/vcmi/releases)
# VCMI Project

View File

@ -244,7 +244,7 @@ Increased effect of spell affecting creature, ie. Aenain makes Disrupting Ray de
"subtype" : "spell.disruptingRay",
"type" : "SPECIAL_ADD_VALUE_ENCHANT"
}
``````
```
- subtype: affected spell identifier
- additionalInfo: value to add
@ -587,6 +587,11 @@ Affected unit will attack units on all hexes that surround attacked hex
Affected unit will retaliate before enemy attacks, if able
- subtype:
- damageTypeMelee: only melee attacks affected
- damageTypeRanged: only ranged attacks affected. Note that unit also requires ability to retaliate in ranged, such as RANGED_RETALIATION bonus
- damageTypeAll: any attacks are affected
### SHOOTS_ALL_ADJACENT
Affected unit will attack units on all hexes that surround attacked hex in ranged attacks
@ -608,6 +613,25 @@ Affected unit can use ranged attacks only within specified range
- val: max shooting range in hexes
- addInfo: optional, range at which ranged penalty will trigger (default is 10)
### FEROCITY
Affected unit will attack additional times if killed creatures in target unit during attacking (including ADDITIONAL_ATTACK bonus attacks)
- val: amount of additional attacks (negative number will reduce number of unperformed attacks if any left)
- addInfo: optional, amount of creatures needed to kill (default is 1)
### ENEMY_ATTACK_REDUCTION
Affected unit will ignore specified percentage of attacked unit attack (Nix)
- val: amount of attack points to ignore, percentage
### REVENGE
Affected unit will deal more damage based on percentage of self health lost compared to amount on start of battle
(formula: `square_root((total_unit_count + 1) * 1_creature_max_health / (current_whole_unit_health + 1_creature_max_health) - 1)`.
Result is then multiplied separately by min and max base damage of unit and result is additive bonus to total damage at end of calculation)
## Special abilities
### CATAPULT
@ -708,14 +732,20 @@ Affected unit will deal additional damage after attack
### DEATH_STARE
Affected unit will kill additional units after attack
Affected unit will kill additional units after attack. Used for Death stare (Mighty Gorgon) ability and for Accurate Shot (Pirates, HotA)
- subtype:
- deathStareGorgon: random amount
- deathStareCommander: fixed amount
- deathStareGorgon: only melee attack, random amount of killed units
- deathStareNoRangePenalty: only ranged attacks without obstacle (walls) or range penalty
- deathStareRangePenalty: only ranged attacks with range penalty
- deathStareObstaclePenalty: only ranged attacks with obstacle (walls) penalty
- deathStareRangeObstaclePenalty: only ranged attacks with both range and obstacle penalty
- deathStareCommander: fixed amount, both melee and ranged attacks
- val:
- for deathStareGorgon: chance to kill, counted separately for each unit in attacking stack, percentage. At most (stack size \* chance) units can be killed at once. TODO: recheck formula
- for deathStareCommander: number of creatures to kill, total amount of killed creatures is (attacker level / defender level) \* val
- for all other subtypes: chance to kill, counted separately for each unit in attacking stack, percentage. At most (stack size \* chance) units can be killed at once, rounded up
- addInfo:
- SpellID to be used as hit effect. If not set - 'deathStare' spell will be used. If set to "accurateShot" battle log messages will use alternative description
### SPECIAL_CRYSTAL_GENERATION
@ -759,17 +789,21 @@ Determines how many times per combat affected creature can cast its targeted spe
- subtype - spell id, eg. spell.iceBolt
- value - chance (percent)
- additional info - \[X, Y\]
- X - spell level
- additional info - \[X, Y, Z\]
- X - spell mastery level (1 - Basic, 3 - Expert)
- Y = 0 - all attacks, 1 - shot only, 2 - melee only
- Z (optional) - layer for multiple SPELL_AFTER_ATTACK bonuses and multi-turn casting. Empty or value less than 0 = not participating in layering.
When enabled - spells from specific layer will not be cast until target has all spells from previous layer on him. Spell from last layer is on repeat if none of spells on lower layers expired.
### SPELL_BEFORE_ATTACK
- subtype - spell id
- value - chance %
- additional info - \[X, Y\]
- X - spell level
- additional info - \[X, Y, Z\]
- X - spell mastery level (1 - Basic, 3 - Expert)
- Y = 0 - all attacks, 1 - shot only, 2 - melee only
- Z (optional) - layer for multiple SPELL_BEFORE_ATTACK bonuses and multi-turn casting. Empty or value less than 0 = not participating in layering.
When enabled - spells from specific layer will not be cast until target has all spells from previous layer on him. Spell from last layer is on repeat if none of spells on lower layers expired.
### SPECIFIC_SPELL_POWER
@ -778,7 +812,7 @@ Determines how many times per combat affected creature can cast its targeted spe
### CREATURE_SPELL_POWER
- value: Spell Power of offensive spell cast unit, divided by 100. ie. Faerie Dragons have value fo 500, which gives them 5 Spell Power for each unit in the stack.
- value: Spell Power of offensive spell cast unit, multiplied by 100. ie. Faerie Dragons have value fo 500, which gives them 5 Spell Power for each unit in the stack.
### CREATURE_ENCHANT_POWER

View File

@ -59,8 +59,8 @@ In order to make functional creature you also need:
// Basic growth of this creature in town or in external dwellings
"growth" : 0,
// Bonus growth of this creature from built horde
"hordeGrowth" : 0,
// Bonus growth of this creature from built horde, if any
"horde" : 0,
// Creature stats in battle
"attack" : 0,

View File

@ -61,6 +61,10 @@
"positive": true,
},
// If true, then creature capable of casting this spell can cast this spell on itself
// If false, then creature can only cast this spell on other units
"canCastOnSelf" : false,
// If true, spell won't be available on a map without water
"onlyOnWaterMap" : true,

View File

@ -144,7 +144,7 @@ It's the new feature meant for testing game performance on various platforms.
Additional color are supported for text fields (e.g. map description). Uses HTML color syntax (e.g. #abcdef) / HTML predefined colors (e.g. green).
##### Original Heroes III Support
### Original Heroes III Support
`This is white`
@ -154,7 +154,7 @@ Additional color are supported for text fields (e.g. map description). Uses HTML
<span style="color:yellow;background-color:black;">This is yellow</span>
##### New
### New
`{#ff0000|This is red}`
@ -164,6 +164,41 @@ Additional color are supported for text fields (e.g. map description). Uses HTML
<span style="color:green">This is green</span>
# Multiplayer
Opening new Turn Option menu in scenario selection dialog allows detailed configuration of turn timers and simultaneous turns
## Turn Timers
TODO
## Simultaneous turns
Simultaneous turns allow multiple players to act at the same time, speeding up early game phase in multiplayer games. During this phase if different players (allies or not) attempt to interact with each other, such as capture objects owned by other players (mines, dwellings, towns) or attack their heroes, game will block such actions. Interaction with same map objects at the same time, such as attacking same wandering monster is also blocked.
Following options can be used to configure simultaneous turns:
- Minimal duration (at least for): this is duration during which simultaneous turns will run unconditionally. Until specified number of days have passed, simultaneous turns will never break and game will not attempt to detect contacts.
- Maximal duration (at most for): this is duration after which simultaneous turns will end unconditionally, even if players still have not contacted each other. However if contact detection discovers contact between two players, simultaneous turns between them might end before specified duration.
- Simultaneous turns for AI: If this option is on, AI can act at the same time as human players. Note that AI shares settings for simultaneous turns with human players - if no simultaneous turns have been set up this option has no effect.
### Contact detection
While simultaneous turns are active, VCMI tracks contacts for each pair of player separately.
Players are considered to be "in contact" if movement range of their heroes at the start of turn overlaps, or, in other words - if their heroes can meet on this turn if both walk towards each other. When calculating movement range, game uses rules similar to standard movement range calculation in vcmi, meaning that game will track movement through monoliths and subterranean gates, but will not account for any removable obstacles, such as pickable treasures that block path between heroes. Any existing wandering monsters that block path between heroes are ignored for range calculation. At the moment, game will not account for any ways to extend movement range - Dimension Door or Town Portal spells, visiting map objects such as Stables, releasing heroes from prisons, etc.
Once detected, contact can never be "lost". If game detected contact between two players, this contact will remain active till the end of the game, even if their heroes move far enough from each other.
Game performs contact detection once per turn, at the very start of each in-game day. Once contact detection has been performed, players that are not in contact with each other can start making turn. For example, in game with 4 players: red, blue, brown and green. If game detected contact between red and blue following will happen:
- red, brown and green will all instantly start turn
- once red ends his turn, blue will be able to start his own turn (even if brown or green are still making turn)
Once maximal duration of simultaneous turns (as specified during scenario setup) has been reached, or if all players are in contact with each other, game will return to standard turn order: red, blue, brown, green...
### Differences compared to HD Mod version
- In VCMI, players can see actions of other players immediately (provided that they have revealed fog of war) instead of waiting for next turn
- In VCMI, attempt to attack hero of another player during simultaneous turns will be blocked instead of reloading save from start of turn like in HD Mod
# Manuals and guides

View File

@ -23,7 +23,7 @@ class DLL_LINKAGE ACreature: public AFactionMember
{
public:
bool isLiving() const; //non-undead, non-non living or alive
ui32 speed(int turn = 0, bool useBind = false) const; //get speed (in moving tiles) of creature with all modificators
ui32 getMovementRange(int turn = 0) const; //get speed (in moving tiles) of creature with all modificators
virtual ui32 getMaxHealth() const; //get max HP of stack with all modifiers
};

View File

@ -44,6 +44,7 @@ public:
virtual bool isMagical() const = 0; //Should this spell considered as magical effect or as ability (like dendroid's bind)
virtual bool hasSchool(SpellSchool school) const = 0;
virtual bool canCastOnSelf() const = 0;
virtual void forEachSchool(const SchoolCallback & cb) const = 0;
virtual int32_t getCost(const int32_t skillLevel) const = 0;

View File

@ -59,6 +59,7 @@ set(launcher_FORMS
set(launcher_TS
translation/chinese.ts
translation/czech.ts
translation/english.ts
translation/french.ts
translation/german.ts

View File

@ -76,6 +76,7 @@
</screenshot>
</screenshots>
<releases>
<release version="1.4.3" date="2024-01-19" type="development"/>
<release version="1.4.2" date="2023-12-25" type="stable"/>
<release version="1.4.1" date="2023-12-12" type="stable"/>
<release version="1.4.0" date="2023-12-08" type="stable"/>

View File

@ -134,7 +134,16 @@ void FirstLaunchView::activateTabHeroesData()
ui->pushButtonDataHelp->hide();
ui->labelDataHelp->hide();
}
heroesDataUpdate();
if(heroesDataUpdate())
return;
QString installPath = getHeroesInstallDir();
if(!installPath.isEmpty())
{
auto reply = QMessageBox::question(this, tr("Heroes III installation found!"), tr("Copy data to VCMI folder?"), QMessageBox::Yes | QMessageBox::No);
if(reply == QMessageBox::Yes)
copyHeroesData(installPath);
}
}
void FirstLaunchView::activateTabModPreset()
@ -164,12 +173,14 @@ void FirstLaunchView::languageSelected(const QString & selectedLanguage)
mainWindow->updateTranslation();
}
void FirstLaunchView::heroesDataUpdate()
bool FirstLaunchView::heroesDataUpdate()
{
if(heroesDataDetect())
bool detected = heroesDataDetect();
if(detected)
heroesDataDetected();
else
heroesDataMissing();
return detected;
}
void FirstLaunchView::heroesDataMissing()
@ -254,9 +265,26 @@ void FirstLaunchView::forceHeroesLanguage(const QString & language)
node->String() = language.toStdString();
}
void FirstLaunchView::copyHeroesData()
QString FirstLaunchView::getHeroesInstallDir()
{
QDir sourceRoot = QFileDialog::getExistingDirectory(this, "", "", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
#ifdef VCMI_WINDOWS
QString gogPath = QSettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\GOG.com\\Games\\1207658787", QSettings::NativeFormat).value("path").toString();
if(!gogPath.isEmpty())
return gogPath;
QString cdPath = QSettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\New World Computing\\Heroes of Might and Magic® III\\1.0", QSettings::NativeFormat).value("AppPath").toString();
if(!cdPath.isEmpty())
return cdPath;
#endif
return QString{};
}
void FirstLaunchView::copyHeroesData(const QString & path)
{
QDir sourceRoot = QDir(path);
if(path.isEmpty())
sourceRoot.setPath(QFileDialog::getExistingDirectory(this, {}, {}, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks));
if(!sourceRoot.exists())
return;

View File

@ -42,7 +42,7 @@ class FirstLaunchView : public QWidget
void languageSelected(const QString & languageCode);
// Tab Heroes III Data
void heroesDataUpdate();
bool heroesDataUpdate();
bool heroesDataDetect();
void heroesDataMissing();
@ -51,7 +51,8 @@ class FirstLaunchView : public QWidget
void heroesLanguageUpdate();
void forceHeroesLanguage(const QString & language);
void copyHeroesData();
QString getHeroesInstallDir();
void copyHeroesData(const QString & path = {});
// Tab Mod Preset
void modPresetUpdate();

View File

@ -86,7 +86,7 @@ QString Languages::generateLanguageName(const Languages::Options & language)
void Languages::fillLanguages(QComboBox * widget, bool includeAll)
{
widget->blockSignals(true); // we do not want calls caused by initialization
QSignalBlocker guard(widget); // we do not want calls caused by initialization
widget->clear();
std::string activeLanguage = includeAll ?
@ -115,13 +115,11 @@ void Languages::fillLanguages(QComboBox * widget, bool includeAll)
if(activeLanguage == language.identifier)
widget->setCurrentIndex(widget->count() - 1);
}
widget->blockSignals(false);
}
void Languages::fillLanguages(QListWidget * widget, bool includeAll)
{
widget->blockSignals(true); // we do not want calls caused by initialization
QSignalBlocker guard(widget); // we do not want calls caused by initialization
widget->clear();
std::string activeLanguage = includeAll ?
@ -154,5 +152,4 @@ void Languages::fillLanguages(QListWidget * widget, bool includeAll)
if(activeLanguage == language.identifier)
widget->setCurrentRow(widget->count() - 1);
}
widget->blockSignals(false);
}

View File

@ -34,3 +34,8 @@ QString CLauncherDirs::modsPath()
{
return pathToQString(VCMIDirs::get().userDataPath() / "Mods");
}
QString CLauncherDirs::mapsPath()
{
return pathToQString(VCMIDirs::get().userDataPath() / "Maps");
}

View File

@ -19,4 +19,5 @@ public:
QString downloadsPath();
QString modsPath();
QString mapsPath();
};

View File

@ -48,6 +48,43 @@ void CModListView::changeEvent(QEvent *event)
QWidget::changeEvent(event);
}
void CModListView::dragEnterEvent(QDragEnterEvent* event)
{
if(event->mimeData()->hasUrls())
for(const auto & url : event->mimeData()->urls())
for(const auto & ending : QStringList({".zip", ".h3m", ".h3c", ".vmap", ".vcmp"}))
if(url.fileName().endsWith(ending, Qt::CaseInsensitive))
{
event->acceptProposedAction();
return;
}
}
void CModListView::dropEvent(QDropEvent* event)
{
const QMimeData* mimeData = event->mimeData();
if(mimeData->hasUrls())
{
const QList<QUrl> urlList = mimeData->urls();
for (const auto & url : urlList)
{
QString urlStr = url.toString();
QString fileName = url.fileName();
if(urlStr.endsWith(".zip", Qt::CaseInsensitive))
downloadFile(fileName.toLower()
// mod name currently comes from zip file -> remove suffixes from github zip download
.replace(QRegularExpression("-[0-9a-f]{40}"), "")
.replace(QRegularExpression("-vcmi-.+\\.zip"), ".zip")
.replace("-main.zip", ".zip")
, urlStr, "mods", 0);
else
downloadFile(fileName, urlStr, "mods", 0);
}
}
}
void CModListView::setupFilterModel()
{
filterModel = new CModFilterModel(modModel, this);
@ -100,6 +137,8 @@ CModListView::CModListView(QWidget * parent)
{
ui->setupUi(this);
setAcceptDrops(true);
setupModModel();
setupFilterModel();
setupModsView();
@ -677,15 +716,18 @@ void CModListView::hideProgressBar()
void CModListView::installFiles(QStringList files)
{
QStringList mods;
QStringList maps;
QStringList images;
QVector<QVariantMap> repositories;
// TODO: some better way to separate zip's with mods and downloaded repository files
for(QString filename : files)
{
if(filename.endsWith(".zip"))
if(filename.endsWith(".zip", Qt::CaseInsensitive))
mods.push_back(filename);
if(filename.endsWith(".json"))
else if(filename.endsWith(".h3m", Qt::CaseInsensitive) || filename.endsWith(".h3c", Qt::CaseInsensitive) || filename.endsWith(".vmap", Qt::CaseInsensitive) || filename.endsWith(".vcmp", Qt::CaseInsensitive))
maps.push_back(filename);
else if(filename.endsWith(".json", Qt::CaseInsensitive))
{
//download and merge additional files
auto repoData = JsonUtils::JsonFromFile(filename).toMap();
@ -709,7 +751,7 @@ void CModListView::installFiles(QStringList files)
}
repositories.push_back(repoData);
}
if(filename.endsWith(".png"))
else if(filename.endsWith(".png", Qt::CaseInsensitive))
images.push_back(filename);
}
@ -718,6 +760,9 @@ void CModListView::installFiles(QStringList files)
if(!mods.empty())
installMods(mods);
if(!maps.empty())
installMaps(maps);
if(!images.empty())
loadScreenshots();
}
@ -794,6 +839,16 @@ void CModListView::installMods(QStringList archives)
QFile::remove(archive);
}
void CModListView::installMaps(QStringList maps)
{
QString destDir = CLauncherDirs::get().mapsPath() + "/";
for(QString map : maps)
{
QFile(map).rename(destDir + map.section('/', -1, -1));
}
}
void CModListView::on_refreshButton_clicked()
{
loadRepositories();
@ -963,4 +1018,3 @@ void CModListView::on_allModsView_doubleClicked(const QModelIndex &index)
return;
}
}

View File

@ -54,12 +54,15 @@ class CModListView : public QWidget
void downloadFile(QString file, QString url, QString description, qint64 size = 0);
void installMods(QStringList archives);
void installMaps(QStringList maps);
void installFiles(QStringList mods);
QString genChangelogText(CModEntry & mod);
QString genModInfoText(CModEntry & mod);
void changeEvent(QEvent *event) override;
void dragEnterEvent(QDragEnterEvent* event) override;
void dropEvent(QDropEvent *event) override;
signals:
void modsChanged();

View File

@ -161,9 +161,6 @@ bool CModManager::canInstallMod(QString modname)
if(mod.isInstalled())
return addError(modname, "Mod is already installed");
if(!mod.isAvailable())
return addError(modname, "Mod is not available");
return true;
}

View File

@ -117,6 +117,7 @@ void CSettingsView::loadSettings()
ui->lineEditAutoSavePrefix->setEnabled(settings["general"]["useSavePrefix"].Bool());
Languages::fillLanguages(ui->comboBoxLanguage, false);
fillValidRenderers();
std::string cursorType = settings["video"]["cursor"].String();
size_t cursorTypeIndex = boost::range::find(cursorTypesList, cursorType) - cursorTypesList;
@ -163,6 +164,26 @@ void CSettingsView::fillValidScalingRange()
#ifndef VCMI_MOBILE
static QStringList getAvailableRenderingDrivers()
{
SDL_Init(SDL_INIT_VIDEO);
QStringList result;
result += QString(); // empty value for autoselection
int driversCount = SDL_GetNumRenderDrivers();
for(int it = 0; it < driversCount; it++)
{
SDL_RendererInfo info;
if (SDL_GetRenderDriverInfo(it, &info) == 0)
result += QString::fromLatin1(info.name);
}
SDL_Quit();
return result;
}
static QVector<QSize> findAvailableResolutions(int displayIndex)
{
// Ugly workaround since we don't actually need SDL in Launcher
@ -197,13 +218,13 @@ static QVector<QSize> findAvailableResolutions(int displayIndex)
void CSettingsView::fillValidResolutionsForScreen(int screenIndex)
{
ui->comboBoxResolution->blockSignals(true); // avoid saving wrong resolution after adding first item from the list
QSignalBlocker guard(ui->comboBoxResolution); // avoid saving wrong resolution after adding first item from the list
ui->comboBoxResolution->clear();
bool fullscreen = settings["video"]["fullscreen"].Bool();
bool realFullscreen = settings["video"]["realFullscreen"].Bool();
if (!fullscreen || realFullscreen)
{
QVector<QSize> resolutions = findAvailableResolutions(screenIndex);
@ -225,8 +246,21 @@ void CSettingsView::fillValidResolutionsForScreen(int screenIndex)
// if selected resolution no longer exists, force update value to the largest (last) resolution
if(resIndex == -1)
ui->comboBoxResolution->setCurrentIndex(ui->comboBoxResolution->count() - 1);
}
ui->comboBoxResolution->blockSignals(false);
void CSettingsView::fillValidRenderers()
{
QSignalBlocker guard(ui->comboBoxRendererType); // avoid saving wrong renderer after adding first item from the list
ui->comboBoxRendererType->clear();
auto driversList = getAvailableRenderingDrivers();
ui->comboBoxRendererType->addItems(driversList);
std::string rendererName = settings["video"]["driver"].String();
int index = ui->comboBoxRendererType->findText(QString::fromStdString(rendererName));
ui->comboBoxRendererType->setCurrentIndex(index);
}
#else
void CSettingsView::fillValidResolutionsForScreen(int screenIndex)
@ -235,6 +269,13 @@ void CSettingsView::fillValidResolutionsForScreen(int screenIndex)
ui->comboBoxResolution->hide();
ui->labelResolution->hide();
}
void CSettingsView::fillValidRenderers()
{
// untested on mobile platforms
ui->comboBoxRendererType->hide();
ui->labelRendererType->hide();
}
#endif
CSettingsView::CSettingsView(QWidget * parent)
@ -542,3 +583,10 @@ void CSettingsView::on_spinBoxReservedArea_valueChanged(int arg1)
node->Float() = float(arg1) / 100; // percentage -> ratio
}
void CSettingsView::on_comboBoxRendererType_currentTextChanged(const QString &arg1)
{
Settings node = settings.write["video"]["driver"];
node->String() = arg1.toStdString();
}

View File

@ -76,9 +76,12 @@ private slots:
void on_spinBoxReservedArea_valueChanged(int arg1);
void on_comboBoxRendererType_currentTextChanged(const QString &arg1);
private:
Ui::CSettingsView * ui;
void fillValidRenderers();
void fillValidResolutionsForScreen(int screenIndex);
void fillValidScalingRange();
QSize getPreferredRenderingResolution();

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>832</width>
<height>350</height>
<width>985</width>
<height>683</height>
</rect>
</property>
<property name="windowTitle">
@ -26,65 +26,6 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QListWidget" name="listWidgetSettings">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="autoScroll">
<bool>false</bool>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="spacing">
<number>4</number>
</property>
<item>
<property name="text">
<string>General</string>
</property>
</item>
<item>
<property name="text">
<string>Video</string>
</property>
</item>
<item>
<property name="text">
<string>Artificial Intelligence</string>
</property>
</item>
<item>
<property name="text">
<string>Mod Repositories</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QScrollArea" name="settingsScrollArea">
<property name="sizePolicy">
@ -106,28 +47,105 @@
<property name="geometry">
<rect>
<x>0</x>
<y>-356</y>
<width>610</width>
<height>873</height>
<y>0</y>
<width>969</width>
<height>818</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="2,0,1,1,1">
<item row="5" column="0">
<widget class="QLabel" name="labelTranslation">
<item row="20" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
</item>
<item row="5" column="1" colspan="3">
<widget class="QLabel" name="labelTranslationStatus">
<property name="text">
<string>Heroes III Translation</string>
<string/>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelGeneral">
<item row="27" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxFriendlyAI">
<property name="editable">
<bool>false</bool>
</property>
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelVideo">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>General</string>
<string>Video</string>
</property>
</widget>
</item>
<item row="23" column="0">
<widget class="QLabel" name="labelArtificialIntelligence">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Artificial Intelligence</string>
</property>
</widget>
</item>
<item row="22" column="0">
<widget class="QLabel" name="labelCursorType">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguageBase"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelLanguageBase">
<property name="text">
<string>Heroes III Data Language</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxAutoSaveLimit"/>
</item>
<item row="20" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="31" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryDefault">
<property name="text">
<string notr="true"/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
@ -138,72 +156,62 @@
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelInterfaceScaling">
<item row="5" column="0">
<widget class="QLabel" name="labelTranslation">
<property name="text">
<string>Interface Scaling</string>
<string>Heroes III Translation</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelAutoSavePrefix">
<item row="28" column="0">
<widget class="QLabel" name="labelEnemyAI">
<property name="text">
<string>Autosave prefix</string>
<string>Enemy AI in battles</string>
</property>
</widget>
</item>
<item row="23" column="0">
<item row="32" column="0">
<widget class="QLabel" name="labelRepositoryExtra">
<property name="text">
<string>Additional repository</string>
</property>
</widget>
</item>
<item row="32" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryExtra">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="19" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
</property>
</widget>
</item>
<item row="29" column="0">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mod Repositories</string>
</property>
</widget>
</item>
<item row="25" column="0">
<widget class="QLabel" name="labelAlliedPlayerAI">
<property name="text">
<string>Adventure Map Allies</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelVideo">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Video</string>
</property>
</widget>
</item>
<item row="16" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxFramerateLimit">
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="21" column="0">
<widget class="QLabel" name="labelArtificialIntelligence">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Artificial Intelligence</string>
</property>
</widget>
</item>
<item row="9" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditAutoSavePrefix">
<property name="placeholderText">
<string>empty = map name prefix</string>
</property>
</widget>
</item>
<item row="29" column="1">
<item row="31" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryDefault">
<property name="enabled">
<bool>true</bool>
@ -216,27 +224,40 @@
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="checkBoxAutoSavePrefix">
<item row="14" column="0">
<widget class="QLabel" name="labelInterfaceScaling">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelAutoSaveLimit">
<property name="text">
<string>Autosave limit (0 = off)</string>
<string>Interface Scaling</string>
</property>
</widget>
</item>
<item row="19" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
<widget class="QComboBox" name="comboBoxShowIntro">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="30" column="0">
<widget class="QLabel" name="labelRepositoryExtra">
<property name="text">
<string>Additional repository</string>
<item row="14" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxInterfaceScaling">
<property name="minimum">
<number>50</number>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
@ -259,56 +280,21 @@
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
<item row="6" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxNetworkPort">
<property name="minimum">
<number>1024</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>3030</number>
</property>
</widget>
</item>
<item row="18" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxShowIntro">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="26" column="0">
<widget class="QLabel" name="labelEnemyAI">
<property name="text">
<string>Enemy AI in battles</string>
</property>
</widget>
</item>
<item row="23" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAlliedPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="25" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxFriendlyAI">
<item row="28" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxEnemyAI">
<property name="editable">
<bool>false</bool>
</property>
@ -327,10 +313,99 @@
</item>
</widget>
</item>
<item row="30" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryExtra">
<item row="9" column="1">
<widget class="QCheckBox" name="checkBoxAutoSavePrefix">
<property name="text">
<string notr="true"/>
<string/>
</property>
</widget>
</item>
<item row="16" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxFramerateLimit">
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="32" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryExtra">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelReservedArea">
<property name="text">
<string>Reserved screen area</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelResolution">
<property name="text">
<string>Resolution</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelLanguage">
<property name="text">
<string>VCMI Language</string>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="labelFramerateLimit">
<property name="text">
<string>Framerate Limit</string>
</property>
</widget>
</item>
<item row="25" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAlliedPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="26" column="0">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI in battles</string>
</property>
</widget>
</item>
<item row="27" column="0">
<widget class="QLabel" name="labelFriendlyAI">
<property name="text">
<string>Friendly AI in battles</string>
</property>
</widget>
</item>
<item row="17" column="1">
<widget class="QCheckBox" name="checkBoxVSync">
<property name="text">
<string/>
</property>
</widget>
</item>
@ -365,123 +440,10 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
</item>
</widget>
</item>
<item row="11" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="19" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<item row="7" column="0">
<widget class="QLabel" name="labelAutoSave">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="22" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxEnemyPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="5" column="1" colspan="3">
<widget class="QLabel" name="labelTranslationStatus">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="29" column="0">
<widget class="QLabel" name="labelRepositoryDefault">
<property name="text">
<string>Default repository</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelLanguageBase">
<property name="text">
<string>Heroes III Data Language</string>
</property>
</widget>
</item>
<item row="30" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryExtra">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="labelFramerateLimit">
<property name="text">
<string>Framerate Limit</string>
</property>
</widget>
</item>
<item row="25" column="0">
<widget class="QLabel" name="labelFriendlyAI">
<property name="text">
<string>Friendly AI in battles</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelLanguage">
<property name="text">
<string>VCMI Language</string>
</property>
</widget>
</item>
<item row="29" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryDefault">
<property name="text">
<string notr="true"/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguageBase"/>
</item>
<item row="14" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxInterfaceScaling">
<property name="minimum">
<number>50</number>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="8" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxAutoSaveLimit"/>
</item>
<item row="27" column="0">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mod Repositories</string>
<string>Autosave</string>
</property>
</widget>
</item>
@ -492,84 +454,13 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelResolution">
<item row="9" column="0">
<widget class="QLabel" name="labelAutoSavePrefix">
<property name="text">
<string>Resolution</string>
<string>Autosave prefix</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxNetworkPort">
<property name="minimum">
<number>1024</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>3030</number>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="labelAutoSave">
<property name="text">
<string>Autosave</string>
</property>
</widget>
</item>
<item row="20" column="0">
<widget class="QLabel" name="labelCursorType">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="20" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxCursorType">
<item>
<property name="text">
<string>Hardware</string>
</property>
</item>
<item>
<property name="text">
<string>Software</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelNetworkPort">
<property name="text">
<string>Network port</string>
</property>
</widget>
</item>
<item row="26" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxEnemyAI">
<property name="editable">
<bool>false</bool>
</property>
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="7" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAutoSave">
<property name="currentIndex">
@ -587,59 +478,58 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
</item>
</widget>
</item>
<item row="28" column="3" colspan="2">
<widget class="QPushButton" name="refreshRepositoriesButton">
<item row="9" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditAutoSavePrefix">
<property name="placeholderText">
<string>empty = map name prefix</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelGeneral">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Refresh now</string>
<string>General</string>
</property>
</widget>
</item>
<item row="24" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxNeutralAI">
<widget class="QComboBox" name="comboBoxEnemyPlayerAI">
<property name="currentText">
<string notr="true">BattleAI</string>
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="28" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string>Check on startup</string>
</property>
<item row="22" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxCursorType">
<item>
<property name="text">
<string>Hardware</string>
</property>
</item>
<item>
<property name="text">
<string>Software</string>
</property>
</item>
</widget>
</item>
<item row="24" column="0">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI in battles</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelReservedArea">
<property name="text">
<string>Reserved screen area</string>
</property>
</widget>
</item>
<item row="22" column="0">
<widget class="QLabel" name="labelEnemyPlayerAI">
<property name="text">
<string>Adventure Map Enemies</string>
</property>
</widget>
</item>
<item row="28" column="1" colspan="2">
<item row="30" column="1" colspan="2">
<widget class="QComboBox" name="comboBoxAutoCheck">
<property name="currentIndex">
<number>1</number>
@ -656,6 +546,16 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
</item>
</widget>
</item>
<item row="24" column="0">
<widget class="QLabel" name="labelEnemyPlayerAI">
<property name="text">
<string>Adventure Map Enemies</string>
</property>
</widget>
</item>
<item row="11" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="17" column="0">
<widget class="QLabel" name="labelVSync">
<property name="text">
@ -663,10 +563,65 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
</property>
</widget>
</item>
<item row="17" column="1">
<widget class="QCheckBox" name="checkBoxVSync">
<item row="26" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxNeutralAI">
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="30" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string/>
<string>Check on startup</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelAutoSaveLimit">
<property name="text">
<string>Autosave limit (0 = off)</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelNetworkPort">
<property name="text">
<string>Network port</string>
</property>
</widget>
</item>
<item row="30" column="3" colspan="2">
<widget class="QPushButton" name="refreshRepositoriesButton">
<property name="text">
<string>Refresh now</string>
</property>
</widget>
</item>
<item row="31" column="0">
<widget class="QLabel" name="labelRepositoryDefault">
<property name="text">
<string>Default repository</string>
</property>
</widget>
</item>
<item row="21" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxRendererType"/>
</item>
<item row="21" column="0">
<widget class="QLabel" name="labelRendererType">
<property name="text">
<string>Renderer</string>
</property>
</widget>
</item>

View File

@ -254,7 +254,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation></translation>
</message>
@ -304,125 +304,125 @@
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>VCMI版本</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>VCMI版本</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>VCMI版本</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translatorcomment>Mod统一翻译为模组</translatorcomment>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translatorcomment>Mod统一翻译为模组</translatorcomment>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<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="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<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="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<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="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<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="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation> %s%. %p% (%v MB %m MB) </translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -435,7 +435,7 @@ Encountered errors:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
@ -444,29 +444,29 @@ Install successfully downloaded?</source>
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation> %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation>
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation> %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translatorcomment>Mod统一翻译为模组</translatorcomment>
<translation></translation>
@ -475,123 +475,126 @@ Install successfully downloaded?</source>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation>AI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation>AI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation> (0 = )</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation>AI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation> = </translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>3</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -608,105 +611,103 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
- 使</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translatorcomment></translatorcomment>
<translation>3</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>VCMI语言</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation></translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation>Popis</translation>
</message>
@ -302,123 +302,123 @@
<translation>Zrušit</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Název modifikace</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Nainstalovaná verze</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Nejnovější verze</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation>Velikost</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Velikost ke stažení</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Autoři</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Licence</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Kontakt</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Kompabilita</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Vyžadovaná verze VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Podporovaná verze VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Podporované verze VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Jazyky</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Vyžadované modifikace VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Modifikace v kolizi</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<source>This mod can not be installed or enabled because the following dependencies are not present</source>
<translation>Tato modifikace nemůže být nainstalována nebo povolena, protože následující závislosti nejsou přítomny</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<source>This mod can not be enabled because the following mods are incompatible with it</source>
<translation>Tato modifikace nemůže být povolena, protože následující modifikace s nejsou kompatibilní</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<source>This mod cannot be disabled because it is required by the following mods</source>
<translation>Tato modifikace nemůže být zakázána, protože je vyžadována následujícími modifikacemi</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
<translation>Tato modifikace nemůže být odinstalována nebo aktualizována, protože je vyžadována následujícími modifikacemi</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation>Toto je podmodifikace, která nemůže být nainstalována nebo odinstalována bez její rodičovské modifikace</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Poznámky</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation>Stahování %s%. %p% (%v MB z %m MB) dokončeno</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation>Stahování selhalo</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -431,7 +431,7 @@ Vyskytly se chyby:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
@ -440,29 +440,29 @@ Install successfully downloaded?</source>
Nainstalovat úspěšně stažené?</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation>Instalování modifikace %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation>Operace selhala</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation>Vyskytly se chyby:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Snímek obrazovky %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>Modifikace není kompatibilní</translation>
</message>
@ -470,123 +470,126 @@ Nainstalovat úspěšně stažené?</translation>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Vypnuto</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Umělá inteligence</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Repozitáře modifikací</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation>Škálování rozhraní</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation>Neutrální AI v bitvách</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation>Nepřátelská AI v bitvách</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation>Další repozitáře</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation>Spojenci na mapě světa</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation>Nepřátelé na mapě světa</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation>V okně</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation>Celá obrazovka bez okrajů</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation>Exkluzivní celá obrazovka</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation>Limit aut. uložení (0=vypnuto)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation>Přátelské AI v bitvách</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation>Omezení snímků za sekundu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation>Předpona aut. uložení</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation>prázná = předpona - název mapy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation>Obnovit nyní</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation>Výchozí repozitář</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>Zapnuto</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Kurzor</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Jazyk dat Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -603,106 +606,104 @@ Celá obrazovka bez okrajů- hra poběží v okně, které zakryje vaši celou
Exkluzivní celá obrazovka - hra zakryje vaši celou obrazovku a použije vybrané rozlišení.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation>Vyhrazená část obrazovky</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Hardware</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Software</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Překlad Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Zkontrolovat při zapnutí</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Celá obrazovka</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>Všeobecné</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>Jazyk VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Rozlišení</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Automatické uložení</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation>VSync</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Síťový port</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Zobrazení</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Zobrazit intro</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Aktivní</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Povolit</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Instalovat</translation>
</message>
</context>
<context>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
@ -302,123 +302,123 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<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="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<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="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<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="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<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="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<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="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -427,35 +427,35 @@ Encountered errors:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation type="unfinished"></translation>
</message>
@ -463,123 +463,126 @@ Install successfully downloaded?</source>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -590,104 +593,102 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation>Description</translation>
</message>
@ -302,128 +302,128 @@
<translation>Abandonner</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Nom du mod</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Version installée</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Dernière version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Taille de téléchargement</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Auteur(s)</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Licence</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Contact</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Compatibilité</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Version requise de VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Version supportée de VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Versions supportées de VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Langues</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Mods requis</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Mods en conflit</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<source>This mod can not be installed or enabled because the following dependencies are not present</source>
<translation>Ce mod ne peut pas être installé ou activé car les dépendances suivantes ne sont pas présents
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<source>This mod can not be enabled because the following mods are incompatible with it</source>
<translation>Ce mod ne peut pas être installé ou activé, car les dépendances suivantes sont incompatibles avec lui
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<source>This mod cannot be disabled because it is required by the following mods</source>
<translation>Ce mod ne peut pas être désactivé car il est requis pour les dépendances suivantes
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
<translation>Ce mod ne peut pas être désinstallé ou mis à jour car il est requis pour les dépendances suivantes
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation>Ce sous-mod ne peut pas être installé ou mis à jour séparément du mod parent
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Notes</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -432,35 +432,35 @@ Encountered errors:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Impression écran %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>Ce mod est incompatible</translation>
</message>
@ -468,48 +468,46 @@ Install successfully downloaded?</source>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Désactivé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Intelligence Artificielle</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Dépôts de Mod</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>Activé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation>IA ennemie dans les batailles</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation>Dépôt par défaut</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -526,179 +524,182 @@ Mode fenêtré sans bord - le jeu s&quot;exécutera dans une fenêtre qui couvre
Mode exclusif plein écran - le jeu couvrira l&quot;intégralité de votre écran et utilisera la résolution sélectionnée.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation>Fenêtré</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation>Fenêtré sans bord</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation>Plein écran exclusif</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation>IA neutre dans les batailles</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation>Ennemis de la carte d&quot;aventure</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation>Mise à l&quot;échelle de l&quot;interface</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Curseur</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Langue des Données de Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation>Limite de fréquence d&quot;images</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Matériel</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Logiciel</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Traduction de Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation>Alliés de la carte d&quot;aventure</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation>Dépôt supplémentaire</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Vérifier au démarrage</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation>Actualiser maintenant</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation>IA amicale dans les batailles</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Plein écran</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>Général</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>Langue de VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Résolution</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Sauvegarde automatique</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation>Index d&apos;affichage</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Port de réseau</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Vidéo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Montrer l&apos;intro</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Actif</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation>Désactivé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation>Activé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation>Pas Installé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation>Installer</translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation>Beschreibung</translation>
</message>
@ -302,123 +302,123 @@
<translation>Abbrechen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Mod-Name</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Installierte Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Letzte Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation>Größe</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Downloadgröße</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Autoren</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Lizenz</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Kontakt</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Kompatibilität</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Benötigte VCMI Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Unterstützte VCMI Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Unterstützte VCMI Versionen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Sprachen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Benötigte Mods</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Mods mit Konflikt</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<source>This mod can not be installed or enabled because the following dependencies are not present</source>
<translation>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="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<source>This mod can not be enabled because the following mods are incompatible with it</source>
<translation>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="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<source>This mod cannot be disabled because it is required by the following mods</source>
<translation>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="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
<translation>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="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation>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="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Anmerkungen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation>Herunterladen von %s%. %p% (%v MB von %m MB) beendet</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation>Download fehlgeschlagen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -431,7 +431,7 @@ Es sind Fehler aufgetreten:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
@ -440,29 +440,29 @@ Install successfully downloaded?</source>
Installation erfolgreich heruntergeladen?</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation>Installation von Mod %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation>Operation fehlgeschlagen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation>Aufgetretene Fehler:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Screenshot %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>Mod ist inkompatibel</translation>
</message>
@ -470,123 +470,126 @@ Installation erfolgreich heruntergeladen?</translation>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Aus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Künstliche Intelligenz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Mod-Repositorien</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation>Skalierung der Benutzeroberfläche</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation>Neutrale KI in Kämpfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation>Gegnerische KI in Kämpfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation>Zusätzliches Repository</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation>Abenteuerkarte Verbündete</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation>Abenteuerkarte Feinde</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation>Fenstermodus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation>Randloser Vollbildmodus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation>Exklusiver Vollbildmodus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation>Limit für Autospeicherung (0 = aus)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation>Freundliche KI in Kämpfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation>Limit der Bildrate</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation>Präfix für Autospeicherung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation>leer = Kartenname als Präfix</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation>Jetzt aktualisieren</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation>Standard Repository</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>An</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Zeiger</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Sprache der Heroes III Daten</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -603,104 +606,102 @@ Randloser Fenstermodus - das Spiel läuft in einem Fenster, das den gesamten Bil
Exklusiver Vollbildmodus - das Spiel bedeckt den gesamten Bildschirm und verwendet die gewählte Auflösung.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation>Reservierter Bildschirmbereich</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Hardware</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Software</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Heroes III Übersetzung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Beim Start prüfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Vollbild</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>Allgemein</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>VCMI-Sprache</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Auflösung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Autospeichern</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation>VSync</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation>Anzeige-Index</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Netzwerk-Port</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Video</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Intro anzeigen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Aktiv</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="412"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation>Deaktiviert</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation>Aktivieren</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="418"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation>Nicht installiert</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="419"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation>Installieren</translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation>Opis</translation>
</message>
@ -302,123 +302,123 @@
<translation>Przerwij</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Nazwa moda</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Zainstalowana wersja</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Najnowsza wersja</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation>Rozmiar</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Rozmiar pobierania</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Autorzy</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Licencja</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Kontakt</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Kompatybilność</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Wymagana wersja VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Wspierana wersja VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Wspierane wersje VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Języki</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Wymagane mody</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Konfliktujące mody</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<source>This mod can not be installed or enabled because the 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>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<source>This mod can not be enabled because the following mods are incompatible with it</source>
<translation>Ten mod nie może zostać włączony ponieważ następujące mody z nim niekompatybilne</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<source>This mod cannot be disabled because it is required by the following mods</source>
<translation>Ten mod nie może zostać wyłączony ponieważ jest wymagany do uruchomienia następujących modów</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
<translation>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="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its 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>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Uwagi</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation>Pobieranie %s%. %p% (%v MB z %m MB) ukończono</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation>Pobieranie nieudane</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -431,7 +431,7 @@ Napotkane błędy:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
@ -440,29 +440,29 @@ Install successfully downloaded?</source>
Zainstalować pomyślnie pobrane?</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation>Instalowanie modyfikacji %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation>Operacja nieudana</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation>Napotkane błędy:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Zrzut ekranu %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>Mod jest niekompatybilny</translation>
</message>
@ -470,123 +470,126 @@ Zainstalować pomyślnie pobrane?</translation>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Wyłączony</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Sztuczna Inteligencja</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Repozytoria modów</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation>Skala interfejsu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation>AI bitewne jednostek neutralnych</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation>AI bitewne wrogów</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation>Dodatkowe repozytorium</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation>AI sojuszników mapy przygody</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation>AI wrogów mapy przygody</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation>Okno</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation>Pełny ekran (tryb okna)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation>Pełny ekran klasyczny</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation>Limit autozapisów (0 = brak)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation>AI bitewne sojuszników</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation>Limit FPS</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation>Przedrostek autozapisu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation>puste = przedrostek z nazwy mapy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation>Odśwież</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation>Domyślne repozytorium</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>Włączony</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Kursor</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Język plików Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -603,104 +606,102 @@ Pełny ekran w trybie okna - gra uruchomi się w oknie przysłaniającym cały e
Pełny ekran klasyczny - gra przysłoni cały ekran uruchamiając się w wybranej przez ciebie rozdzielczości ekranu.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation>Zarezerwowany obszar ekranu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Sprzętowy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Programowy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Tłumaczenie Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Sprawdzaj przy uruchomieniu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Pełny ekran</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>Ogólne</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>Język VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Rozdzielczość</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Autozapis</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation>Synchronizacja pionowa (VSync)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation>Numer wyświetlacza</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Port sieciowy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Obraz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Pokaż intro</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Aktywny</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation>Wyłączone</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation>Włącz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation>Nie zainstalowano</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation>Zainstaluj</translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation>Описание</translation>
</message>
@ -302,123 +302,123 @@
<translation>Отмена</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Название мода</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Установленная версия</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Последняя версия</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Размер загрузки</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Авторы</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Лицензия</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Контакты</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Совместимость</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Требуемая версия VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Поддерживаемая версия VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Поддерживаемые версии VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Языки</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Зависимости</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Конфликтующие моды</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<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="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<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="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<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="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<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="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation>Это вложенный мод, он не может быть установлен или удален отдельно от родительского</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Замечания</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -427,35 +427,35 @@ Encountered errors:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Скриншот %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>Мод несовместим</translation>
</message>
@ -463,154 +463,156 @@ Install successfully downloaded?</source>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Отключено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>Включено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Проверять при запуске</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Полноэкранный режим</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>Общее</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>Язык VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Курсор</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Искусственный интеллект</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Репозитории модов</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Язык данных Героев III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -621,73 +623,72 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Аппаратный</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Программный</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Перевод Героев III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Разрешение экрана</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Автосохранение</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation>Дисплей</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Сетевой порт</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Графика</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Вступление</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Активен</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation>Отключен</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation>Включить</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation>Не установлен</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation>Установить</translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation>Descripción</translation>
</message>
@ -302,123 +302,123 @@
<translation>Cancelar</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Nombre del mod</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Versión instalada</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Última versión</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Tamaño de descarga</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Autores</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Licencia</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Contacto</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Compatibilidad</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Versión de VCMI requerida</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Versión de VCMI compatible</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Versiones de VCMI compatibles</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Idiomas</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Mods requeridos</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Mods conflictivos</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<source>This mod can not be installed or enabled because the following dependencies are not present</source>
<translation>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="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<source>This mod can not be enabled because the following mods are incompatible with it</source>
<translation>Este mod no se puede habilitar porque los siguientes mods son incompatibles con él</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<source>This mod cannot be disabled because it is required by the following mods</source>
<translation>No se puede desactivar este mod porque es necesario para ejecutar los siguientes mods</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
<translation>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="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation>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="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Notas</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -427,35 +427,35 @@ Encountered errors:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Captura de pantalla %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>El mod es incompatible</translation>
</message>
@ -463,175 +463,176 @@ Install successfully downloaded?</source>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Desactivado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Inteligencia Artificial</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Repositorios de Mods</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>Encendido</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Cursor</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Traducción de Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Pantalla completa</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>Idioma de VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Resolución</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Autoguardado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation>Mostrar índice</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Puerto de red</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Vídeo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -642,52 +643,52 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Hardware</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Software</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Mostrar introducción</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Comprovar al inicio</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Idioma de los datos de Heroes III.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Activado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation>Desactivado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation>Activar</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation>No Instalado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation>Instalar</translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation>Опис</translation>
</message>
@ -302,123 +302,123 @@
<translation>Відмінити</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Назва модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Встановлена версія</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Найновіша версія</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation>Розмір</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Розмір для завантаження</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Автори</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Ліцензія</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Контакти</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Сумісність</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Необхідна версія VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Підтримувана версія VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Підтримувані версії VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Мови</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Необхідні модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Конфліктуючі модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<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="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<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="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<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="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<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="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation>Це вкладена модифікація, і її не можна встановити або видалити окремо від батьківської модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Примітки</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation>Завантажуємо %s%. %p% (%v МБ з %m Мб) виконано</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation>Помилка завантаження</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -431,7 +431,7 @@ Encountered errors:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
@ -440,29 +440,29 @@ Install successfully downloaded?</source>
Встановити успішно завантажені?</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation>Встановлення модифікації %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation>Операція завершилася невдало</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation>Виникли помилки:
</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Знімок екрану %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>Модифікація несумісна</translation>
</message>
@ -470,123 +470,126 @@ Install successfully downloaded?</source>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Вимкнено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Штучний інтелект</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Репозиторії модифікацій</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation>Масштабування інтерфейсу</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation>Нейтральний ШІ в боях</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation>Ворожий ШІ в боях</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation>Додатковий репозиторій</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation>Союзники на мапі пригод</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation>Вороги на мапі пригод</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation>У вікні</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation>Повноекранне вікно</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation>Повноекранний (ексклюзивно)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation>Кількість автозбережень</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation>Дружній ШІ в боях</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation>Обмеження частоти кадрів</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation>Префікс назв автозбережень</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation>(використовувати назву карти)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation>Оновити зараз</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation>Стандартний репозиторій</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation>Рендерер</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>Увімкнено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Курсор</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Мова Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -603,104 +606,102 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
Повноекранний ексклюзивний режим - гра займатиме весь екран і використовуватиме вибрану роздільну здатність.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation>Зарезервована зона екрану</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Апаратний</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Програмний</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Переклад Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Перевіряти на старті</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Повноекранний режим</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>Загальні налаштування</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>Мова VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Роздільна здатність</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Автозбереження</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation>Вертикальна синхронізація</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation>Дісплей</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Мережевий порт</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Графіка</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Вступні відео</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Активні</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation>Деактивований</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation>Активувати</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation>Не встановлено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation>Встановити</translation>
</message>

View File

@ -252,7 +252,7 @@
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="316"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="355"/>
<source>Description</source>
<translation> tả</translation>
</message>
@ -302,123 +302,123 @@
<translation>Hủy</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<source>Mod name</source>
<translation>Tên bản sửa đi</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="249"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<source>Installed version</source>
<translation>Phiên bản cài đt</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="250"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="289"/>
<source>Latest version</source>
<translation>Phiên bản mới nhất</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<source>Download size</source>
<translation>Kích thước tải về</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="257"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<source>Authors</source>
<translation>Tác giả</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="260"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="299"/>
<source>License</source>
<translation>Giấy phép</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="302"/>
<source>Contact</source>
<translation>Liên hệ</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<source>Compatibility</source>
<translation>Tương thích</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="274"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="313"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<source>Required VCMI version</source>
<translation>Cần phiên bản VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="319"/>
<source>Supported VCMI version</source>
<translation>Hỗ trợ phiên bản VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="285"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<source>Supported VCMI versions</source>
<translation>Phiên bản VCMI hỗ trợ</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="351"/>
<source>Languages</source>
<translation>Ngôn ngữ</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="314"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="353"/>
<source>Required mods</source>
<translation>Cần các bản sửa đi</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="354"/>
<source>Conflicting mods</source>
<translation>Bản sửa đi không tương thích</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="320"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="359"/>
<source>This mod can not be installed or enabled because the following dependencies are not present</source>
<translation>Bản sửa đi này không thể cài đt hoặc kích hoạt do thiếu các bản sửa đi sau</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="321"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="360"/>
<source>This mod can not be enabled because the following mods are incompatible with it</source>
<translation>Bản sửa đi này không thể kích hoạt do không tương thích các bản sửa đi sau</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="322"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="361"/>
<source>This mod cannot be disabled because it is required by the following mods</source>
<translation>Bản sửa đi này không thể tắt do cần thiết cho các bản sửa đi sau</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="323"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="362"/>
<source>This mod cannot be uninstalled or updated because it is required by the following mods</source>
<translation>Bản sửa đi này không thể gỡ bỏ hoặc nâng cấp do cần thiết cho các bản sửa đi sau</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="324"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="363"/>
<source>This is a submod and it cannot be installed or uninstalled separately from its parent mod</source>
<translation>Đây bản con, không thể cài đt hoặc gỡ bỏ tách biệt với bản cha</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="339"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="378"/>
<source>Notes</source>
<translation>Ghi chú</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="599"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="638"/>
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="618"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="665"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="619"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="666"/>
<source>Unable to download all files.
Encountered errors:
@ -427,35 +427,35 @@ Encountered errors:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="620"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="667"/>
<source>
Install successfully downloaded?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="759"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<source>Installing mod %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="811"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="874"/>
<source>Operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="812"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="875"/>
<source>Encountered errors:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="847"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="910"/>
<source>Screenshot %1</source>
<translation>Hình nh %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="243"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<source>Mod is incompatible</source>
<translation>Bản sửa đi này không tương thích</translation>
</message>
@ -463,123 +463,126 @@ Install successfully downloaded?</source>
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="276"/>
<location filename="../settingsView/csettingsview_moc.ui" line="580"/>
<location filename="../settingsView/csettingsview_moc.ui" line="649"/>
<location filename="../settingsView/csettingsview_moc.ui" line="241"/>
<location filename="../settingsView/csettingsview_moc.ui" line="471"/>
<location filename="../settingsView/csettingsview_moc.ui" line="539"/>
<source>Off</source>
<translation>Tắt</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Artificial Intelligence</source>
<translation>Trí tuệ nhân tạo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="203"/>
<source>Mod Repositories</source>
<translation>Nguồn bản sửa đi</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<location filename="../settingsView/csettingsview_moc.ui" line="230"/>
<source>Interface Scaling</source>
<translation>Phóng đi giao diện</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<location filename="../settingsView/csettingsview_moc.ui" line="394"/>
<source>Neutral AI in battles</source>
<translation>Máy hoang trong trận đánh</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="289"/>
<location filename="../settingsView/csettingsview_moc.ui" line="169"/>
<source>Enemy AI in battles</source>
<translation>Máy đi thủ trong trận đánh</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="239"/>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<source>Additional repository</source>
<translation>Nguồn bổ sung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<location filename="../settingsView/csettingsview_moc.ui" line="210"/>
<source>Adventure Map Allies</source>
<translation>Máy liên minh bản đ phiêu lưu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="638"/>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Adventure Map Enemies</source>
<translation>Máy đi thủ bản đ phiêu lưu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<location filename="../settingsView/csettingsview_moc.ui" line="428"/>
<source>Windowed</source>
<translation>Cửa sổ</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="358"/>
<location filename="../settingsView/csettingsview_moc.ui" line="433"/>
<source>Borderless fullscreen</source>
<translation>Toàn màn hình không viền</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<location filename="../settingsView/csettingsview_moc.ui" line="438"/>
<source>Exclusive fullscreen</source>
<translation>Toàn màn hình riêng biệt</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="229"/>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<source>Autosave limit (0 = off)</source>
<translation>Giới hạn lưu tự đng (0 = không giới hạn)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="401"/>
<source>Friendly AI in battles</source>
<translation>Máy liên minh trong trận đánh</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<source>Framerate Limit</source>
<translation>Giới hạn khung hình</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<location filename="../settingsView/csettingsview_moc.ui" line="460"/>
<source>Autosave prefix</source>
<translation>Thêm tiền tố vào lưu tự đng</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="202"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<source>empty = map name prefix</source>
<translation>Rỗng = tên bản đ</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="593"/>
<location filename="../settingsView/csettingsview_moc.ui" line="607"/>
<source>Refresh now</source>
<translation>Làm mới</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="405"/>
<location filename="../settingsView/csettingsview_moc.ui" line="614"/>
<source>Default repository</source>
<translation>Nguồn mặc đnh</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<location filename="../settingsView/csettingsview_moc.ui" line="654"/>
<location filename="../settingsView/csettingsview_moc.ui" line="624"/>
<source>Renderer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="246"/>
<location filename="../settingsView/csettingsview_moc.ui" line="476"/>
<location filename="../settingsView/csettingsview_moc.ui" line="544"/>
<source>On</source>
<translation>Bật</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Cursor</source>
<translation>Con trỏ</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="412"/>
<location filename="../settingsView/csettingsview_moc.ui" line="125"/>
<source>Heroes III Data Language</source>
<translation>Ngôn ngữ dữ liệu Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="340"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -596,104 +599,102 @@ Toàn màn hình không viền - Trò chơi chạy toàn màn hình, dùng chung
Toàn màn hình riêng biệt - Trò chơi chạy toàn màn hình dùng đ phân giải đưc chọn.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="631"/>
<location filename="../settingsView/csettingsview_moc.ui" line="349"/>
<source>Reserved screen area</source>
<translation>Diện tích màn hình dành riêng</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="533"/>
<location filename="../settingsView/csettingsview_moc.ui" line="522"/>
<source>Hardware</source>
<translation>Phần cứng</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="538"/>
<location filename="../settingsView/csettingsview_moc.ui" line="527"/>
<source>Software</source>
<translation>Phần mềm</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="162"/>
<source>Heroes III Translation</source>
<translation>Bản dịch Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="617"/>
<location filename="../settingsView/csettingsview_moc.ui" line="586"/>
<source>Check on startup</source>
<translation>Kiểm tra khi khởi đng</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="137"/>
<location filename="../settingsView/csettingsview_moc.ui" line="155"/>
<source>Fullscreen</source>
<translation>Toàn màn hình</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="130"/>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>General</source>
<translation>Chung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="443"/>
<location filename="../settingsView/csettingsview_moc.ui" line="363"/>
<source>VCMI Language</source>
<translation>Ngôn ngữ VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<location filename="../settingsView/csettingsview_moc.ui" line="356"/>
<source>Resolution</source>
<translation>Đ phân giải</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="518"/>
<location filename="../settingsView/csettingsview_moc.ui" line="446"/>
<source>Autosave</source>
<translation>Tự đng lưu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="662"/>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>VSync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="374"/>
<location filename="../settingsView/csettingsview_moc.ui" line="135"/>
<source>Display index</source>
<translation>Mục hiện thị</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="600"/>
<source>Network port</source>
<translation>Cổng mạng</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<location filename="../settingsView/csettingsview_moc.ui" line="95"/>
<source>Video</source>
<translation>Phim nh</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="265"/>
<location filename="../settingsView/csettingsview_moc.ui" line="190"/>
<source>Show intro</source>
<translation>Hiện thị giới thiệu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="409"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
<source>Active</source>
<translation>Bật</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
<source>Disabled</source>
<translation>Tắt</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="415"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
<source>Enable</source>
<translation>Bật</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="420"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
<source>Not Installed</source>
<translation>Chưa cài đt</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="421"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
<source>Install</source>
<translation>Cài đt</translation>
</message>

View File

@ -1,10 +1,15 @@
[Desktop Entry]
Type=Application
Name=VCMI
GenericName=Strategy Game Engine
Comment=Launcher for open engine of Heroes of Might and Magic 3
GenericName=Strategy Game
GenericName[cs]=Strategická hra
GenericName[de]=Strategiespiel
Comment=Open-source recreation of Heroes of Might & Magic III
Comment[cs]=Spouštěč enginu s otevřeným kódem pro Heroes of Might and Magic III
Comment[de]=Open-Source-Nachbau von Heroes of Might and Magic III
Icon=vcmiclient
Exec=vcmilauncher
Categories=Game;StrategyGame;
Version=1.0
Keywords=heroes;homm3;
Version=1.5
Keywords=heroes of might and magic;heroes;homm;homm3;strategy;
SingleMainWindow=yes

Some files were not shown because too many files have changed in this diff Show More