1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-22 22:13:35 +02:00

Merge branch 'release_131' into master

This commit is contained in:
Ivan Savenko 2023-08-17 16:19:20 +03:00
commit daa8a494fc
61 changed files with 1269 additions and 957 deletions

View File

@ -254,6 +254,13 @@ void CBattleAI::yourTacticPhase(int distance)
cb->battleMakeTacticAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
}
uint64_t timeElapsed(std::chrono::time_point<std::chrono::high_resolution_clock> start)
{
auto end = std::chrono::high_resolution_clock::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
}
void CBattleAI::activeStack( const CStack * stack )
{
LOG_TRACE_PARAMS(logAi, "stack: %s", stack->nodeName());
@ -261,6 +268,8 @@ void CBattleAI::activeStack( const CStack * stack )
BattleAction result = BattleAction::makeDefend(stack);
setCbc(cb); //TODO: make solid sure that AIs always use their callbacks (need to take care of event handlers too)
auto start = std::chrono::high_resolution_clock::now();
try
{
if(stack->creatureId() == CreatureID::CATAPULT)
@ -276,6 +285,8 @@ void CBattleAI::activeStack( const CStack * stack )
attemptCastingSpell();
logAi->trace("Spellcast attempt completed in %lld", timeElapsed(start));
if(cb->battleIsFinished() || !stack->alive())
{
//spellcast may finish battle or kill active stack
@ -312,6 +323,8 @@ void CBattleAI::activeStack( const CStack * stack )
movesSkippedByDefense = 0;
}
logAi->trace("BattleAI decission made in %lld", timeElapsed(start));
cb->battleMakeUnitAction(result);
}
@ -494,7 +507,12 @@ void CBattleAI::attemptCastingSpell()
{
spells::BattleCast temp(cb.get(), hero, spells::Mode::HERO, spell);
for(auto & target : temp.findPotentialTargets())
if(!spell->isDamage() && spell->getTargetType() == spells::AimType::LOCATION)
continue;
const bool FAST = true;
for(auto & target : temp.findPotentialTargets(FAST))
{
PossibleSpellcast ps;
ps.dest = target;

View File

@ -600,6 +600,8 @@ void BattleExchangeEvaluator::updateReachabilityMap(HypotheticBattle & hb)
if(unit->isTurret())
continue;
auto unitSpeed = unit->speed(turn);
if(turnBattle.battleCanShoot(unit))
{
for(BattleHex hex = BattleHex::TOP_LEFT; hex.isValid(); hex = hex + 1)
@ -614,7 +616,7 @@ void BattleExchangeEvaluator::updateReachabilityMap(HypotheticBattle & hb)
for(BattleHex hex = BattleHex::TOP_LEFT; hex.isValid(); hex = hex + 1)
{
bool reachable = unitReachability.distances[hex] <= unit->speed(turn);
bool reachable = unitReachability.distances[hex] <= unitSpeed;
if(!reachable && unitReachability.accessibility[hex] == EAccessibility::ALIVE_STACK)
{
@ -624,7 +626,7 @@ void BattleExchangeEvaluator::updateReachabilityMap(HypotheticBattle & hb)
{
for(BattleHex neighbor : hex.neighbouringTiles())
{
reachable = unitReachability.distances[neighbor] <= unit->speed(turn);
reachable = unitReachability.distances[neighbor] <= unitSpeed;
if(reachable) break;
}

View File

@ -84,17 +84,6 @@ PotentialTargets::PotentialTargets(const battle::Unit * attacker, const Hypothet
{
return lhs.damageDiff() > rhs.damageDiff();
});
if (!possibleAttacks.empty())
{
auto & bestAp = possibleAttacks[0];
logGlobal->debug("Battle AI best: %s -> %s at %d from %d, affects %d units: d:%lld a:%lld c:%lld s:%lld",
bestAp.attack.attacker->unitType()->getJsonKey(),
state.battleGetUnitByPos(bestAp.dest)->unitType()->getJsonKey(),
(int)bestAp.dest, (int)bestAp.from, (int)bestAp.affectedUnits.size(),
bestAp.defenderDamageReduce, bestAp.attackerDamageReduce, bestAp.collateralDamageReduce, bestAp.shootersBlockedDmg);
}
}
int64_t PotentialTargets::bestActionValue() const

View File

@ -170,7 +170,7 @@ std::vector<SlotInfo> ArmyManager::getBestArmy(const IBonusBearer * armyCarrier,
std::vector<SlotInfo> newArmy;
uint64_t newValue = 0;
newArmyInstance.clear();
newArmyInstance.clearSlots();
for(auto & slot : sortedSlots)
{

View File

@ -84,7 +84,7 @@ Goals::TGoalVec RecruitHeroBehavior::decompose() const
}
}
if(treasureSourcesCount < 5)
if(treasureSourcesCount < 5 && (town->garrisonHero || town->getUpperArmy()->getArmyStrength() < 10000))
continue;
if(cb->getHeroesInfo().size() < cb->getTownsInfo().size() + 1

View File

@ -1,3 +1,51 @@
# 1.3.0 -> 1.3.1
### GENERAL:
* Fixed framerate drops on hero movement with active hota mod
* Fade-out animations will now be skipped when instant hero movement speed is used
* Restarting loaded campaing scenario will now correctly reapply starting bonus
* Reverted FPS limit on mobile systems back to 60 fps
* Fixed loading of translations for maps and campaigns
* Fixed loading of preconfigured starting army for heroes with preconfigured spells
* Background battlefield obstacles will now appear below creatures
* it is now possible to load save game located inside mod
* Added option to configure reserved screen area in Launcher on iOS
* Fixed border scrolling when game window is maximized
### AI PLAYER:
* BattleAI: Improved performance of AI spell selection
* NKAI: Fixed freeze on attempt to exchange army between garrisoned and visiting hero
* NKAI: Fixed town threat calculation
* NKAI: Fixed recruitment of new heroes
* VCAI: Added workaround to avoid freeze on attempting to reach unreachable location
* VCAI: Fixed spellcasting by Archangels
### RANDOM MAP GENERATOR:
* Fixed placement of roads inside rock in underground
* Fixed placement of shifted creature animations from HotA
* Fixed placement of treasures at the boundary of wide connections
* Added more potential locations for quest artifacts in zone
### STABILITY:
* When starting client without H3 data game will now show message instead of silently crashing
* When starting invalid map in campaign, game will now show message instead of silently crashing
* Blocked loading of saves made with different set of mods to prevent crashes
* Fixed crash on starting game with outdated mods
* Fixed crash on attempt to sacrifice all your artifacts in Altar of Sacrifice
* Fixed crash on leveling up after winning battle as defender
* Fixed possible crash on end of battle opening sound
* Fixed crash on accepting battle result after winning battle as defender
* Fixed possible crash on casting spell in battle by AI
* Fixed multiple possible crashes on managing mods on Android
* Fixed multiple possible crashes on importing data on Android
* Fixed crash on refusing rewards from town building
* Fixed possible crash on threat evaluation by NKAI
* Fixed crash on using haptic feedback on some Android systems
* Fixed crash on right-clicking flags area in RMG setup mode
* Fixed crash on opening Blacksmith window and Build Structure dialogs in some localizations
* Fixed possible crash on displaying animated main menu
* Fixed crash on recruiting hero in town located on the border of map
# 1.2.1 -> 1.3.0
### GENERAL:

View File

@ -118,6 +118,7 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
#include <memory>
#include <mutex>
#include <numeric>
#include <optional>
#include <queue>
#include <random>
#include <set>
@ -126,6 +127,7 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <variant>
#include <vector>
//The only available version is 3, as of Boost 1.50

View File

@ -1,6 +1,7 @@
[![GitHub](https://github.com/vcmi/vcmi/actions/workflows/github.yml/badge.svg)](https://github.com/vcmi/vcmi/actions/workflows/github.yml)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/vcmi/badge.svg)](https://scan.coverity.com/projects/vcmi)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.3.0/total)](https://github.com/vcmi/vcmi/releases/tag/1.3.0)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.3.1/total)](https://github.com/vcmi/vcmi/releases/tag/1.3.1)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/total)](https://github.com/vcmi/vcmi/releases)
# VCMI Project
VCMI is work-in-progress attempt to recreate engine for Heroes III, giving it new and extended possibilities.

View File

@ -10,8 +10,8 @@ android {
applicationId "is.xyz.vcmi"
minSdk 19
targetSdk 31
versionCode 1306
versionName "1.3.0"
versionCode 1310
versionName "1.3.1"
setProperty("archivesBaseName", "vcmi")
}

View File

@ -54,6 +54,7 @@
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/asio.hpp>
#include "../lib/serializer/Cast.h"
#include "LobbyClientNetPackVisitors.h"

View File

@ -219,7 +219,7 @@ void CClient::loadGame(CGameState * initializedGameState)
// try to deserialize client data including sleepingHeroes
try
{
boost::filesystem::path clientSaveName = *CResourceHandler::get("local")->getResourceName(ResourceID(CSH->si->mapname, EResType::CLIENT_SAVEGAME));
boost::filesystem::path clientSaveName = *CResourceHandler::get()->getResourceName(ResourceID(CSH->si->mapname, EResType::CLIENT_SAVEGAME));
if(clientSaveName.empty())
throw std::runtime_error("Cannot open client part of " + CSH->si->mapname);

View File

@ -169,10 +169,10 @@ void AdventureMapInterface::tick(uint32_t msPassed)
void AdventureMapInterface::handleMapScrollingUpdate(uint32_t timePassed)
{
/// Width of window border, in pixels, that triggers map scrolling
static constexpr uint32_t borderScrollWidth = 15;
static constexpr int32_t borderScrollWidth = 15;
uint32_t scrollSpeedPixels = settings["adventure"]["scrollSpeedPixels"].Float();
uint32_t scrollDistance = scrollSpeedPixels * timePassed / 1000;
int32_t scrollSpeedPixels = settings["adventure"]["scrollSpeedPixels"].Float();
int32_t scrollDistance = scrollSpeedPixels * timePassed / 1000;
Point cursorPosition = GH.getCursorPosition();
Point scrollDirection;
@ -822,6 +822,15 @@ void AdventureMapInterface::hotkeyZoom(int delta)
void AdventureMapInterface::onScreenResize()
{
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
// remember our activation state and reactive after reconstruction
// since othervice activate() calls for created elements will bypass virtual dispatch
// and will call directly CIntObject::activate() instead of dispatching virtual function call
bool widgetActive = isActive();
if (widgetActive)
deactivate();
widget.reset();
pos.x = pos.y = 0;
pos.w = GH.screenDimensions().x;
@ -838,4 +847,7 @@ void AdventureMapInterface::onScreenResize()
widget->getMapView()->onCenteredObject(LOCPLINT->localState->getCurrentArmy());
adjustActiveness();
if (widgetActive)
activate();
}

View File

@ -445,6 +445,8 @@ void BattleInterface::spellCast(const BattleSpellCast * sc)
stacksController->addNewAnim(new EffectAnimation(*this, side ? "SP07_B.DEF" : "SP07_A.DEF", rightHero));
});
}
// animations will be executed by spell effects
}
void BattleInterface::battleStacksEffectsSet(const SetStackEffect & sse)

View File

@ -127,13 +127,26 @@ void BattleObstacleController::obstaclePlaced(const std::vector<std::shared_ptr<
void BattleObstacleController::showAbsoluteObstacles(Canvas & canvas)
{
//Blit absolute obstacles
for(auto & oi : owner.curInt->cb->battleGetAllObstacles())
for(auto & obstacle : owner.curInt->cb->battleGetAllObstacles())
{
if(oi->obstacleType == CObstacleInstance::ABSOLUTE_OBSTACLE)
if(obstacle->obstacleType == CObstacleInstance::ABSOLUTE_OBSTACLE)
{
auto img = getObstacleImage(*oi);
auto img = getObstacleImage(*obstacle);
if(img)
canvas.draw(img, Point(oi->getInfo().width, oi->getInfo().height));
canvas.draw(img, Point(obstacle->getInfo().width, obstacle->getInfo().height));
}
if (obstacle->obstacleType == CObstacleInstance::USUAL)
{
if (obstacle->getInfo().isForegroundObstacle)
continue;
auto img = getObstacleImage(*obstacle);
if(img)
{
Point p = getObstaclePosition(img, *obstacle);
canvas.draw(img, p);
}
}
}
}
@ -148,11 +161,10 @@ void BattleObstacleController::collectRenderableObjects(BattleRenderer & rendere
if (obstacle->obstacleType == CObstacleInstance::MOAT)
continue;
bool isForeground = obstacle->obstacleType == CObstacleInstance::USUAL && obstacle->getInfo().isForegroundObstacle;
if (obstacle->obstacleType == CObstacleInstance::USUAL && !obstacle->getInfo().isForegroundObstacle)
continue;
auto layer = isForeground ? EBattleFieldLayer::OBSTACLES_FG : EBattleFieldLayer::OBSTACLES_BG;
renderer.insert(layer, obstacle->pos, [this, obstacle]( BattleRenderer::RendererRef canvas ){
renderer.insert(EBattleFieldLayer::OBSTACLES, obstacle->pos, [this, obstacle]( BattleRenderer::RendererRef canvas ){
auto img = getObstacleImage(*obstacle);
if(img)
{

View File

@ -16,12 +16,11 @@ class BattleInterface;
enum class EBattleFieldLayer {
// confirmed ordering requirements:
OBSTACLES_BG = 0,
CORPSES = 0,
WALLS = 1,
HEROES = 2,
STACKS = 2, // after corpses, obstacles, walls
OBSTACLES_FG = 3, // after stacks
OBSTACLES = 3, // after stacks
STACK_AMOUNTS = 3, // after stacks, obstacles, corpses
EFFECTS = 4, // after obstacles, battlements
};

View File

@ -307,15 +307,13 @@ void BattleSiegeController::collectRenderableObjects(BattleRenderer & renderer)
renderer.insert( EBattleFieldLayer::STACKS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
owner.stacksController->showStack(canvas, getTurretStack(wallPiece));
});
renderer.insert( EBattleFieldLayer::OBSTACLES_FG, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
renderer.insert( EBattleFieldLayer::OBSTACLES, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
showWallPiece(canvas, wallPiece);
});
}
renderer.insert( EBattleFieldLayer::WALLS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
showWallPiece(canvas, wallPiece);
});
}
}

View File

@ -499,7 +499,7 @@ void BattleStacksController::stacksAreAttacked(std::vector<StackAttackedInfo> at
void BattleStacksController::stackTeleported(const CStack *stack, std::vector<BattleHex> destHex, int distance)
{
assert(destHex.size() > 0);
owner.checkForAnimations();
//owner.checkForAnimations(); // NOTE: at this point spellcast animations were added, but not executed
owner.addToAnimationStage(EAnimationEvents::HIT, [=](){
addNewAnim( new ColorTransformAnimation(owner, stack, "teleportFadeOut", nullptr) );

View File

@ -31,8 +31,6 @@ namespace Cursor
};
enum class Combat {
INVALID = -1,
BLOCKED = 0,
MOVE = 1,
FLY = 2,
@ -157,12 +155,16 @@ public:
template<typename Index>
Index get()
{
assert((std::is_same<Index, Cursor::Default>::value )|| type != Cursor::Type::DEFAULT );
assert((std::is_same<Index, Cursor::Map>::value )|| type != Cursor::Type::ADVENTURE );
assert((std::is_same<Index, Cursor::Combat>::value )|| type != Cursor::Type::COMBAT );
assert((std::is_same<Index, Cursor::Spellcast>::value )|| type != Cursor::Type::SPELLBOOK );
bool typeValid = true;
return static_cast<Index>(frame);
typeValid &= (std::is_same<Index, Cursor::Default>::value )|| type != Cursor::Type::DEFAULT;
typeValid &= (std::is_same<Index, Cursor::Map>::value )|| type != Cursor::Type::ADVENTURE;
typeValid &= (std::is_same<Index, Cursor::Combat>::value )|| type != Cursor::Type::COMBAT;
typeValid &= (std::is_same<Index, Cursor::Spellcast>::value )|| type != Cursor::Type::SPELLBOOK;
if (typeValid)
return static_cast<Index>(frame);
return Index::POINTER;
}
Point getPivotOffsetDefault(size_t index);

View File

@ -426,7 +426,7 @@ void SelectionTab::select(int position)
if(inputName && inputName->isActive())
{
auto filename = *CResourceHandler::get("local")->getResourceName(ResourceID(curItems[py]->fileURI, EResType::SAVEGAME));
auto filename = *CResourceHandler::get()->getResourceName(ResourceID(curItems[py]->fileURI, EResType::SAVEGAME));
inputName->setText(filename.stem().string());
}

View File

@ -247,6 +247,20 @@ void MapViewController::afterRender()
}
}
bool MapViewController::isEventInstant(const CGObjectInstance * obj)
{
if (!isEventVisible(obj))
return true;
if(!LOCPLINT->makingTurn && settings["adventure"]["enemyMoveTime"].Float() <= 0)
return true; // instant movement speed
if(LOCPLINT->makingTurn && settings["adventure"]["heroMoveTime"].Float() <= 0)
return true; // instant movement speed
return false;
}
bool MapViewController::isEventVisible(const CGObjectInstance * obj)
{
if(adventureContext == nullptr)
@ -358,7 +372,8 @@ void MapViewController::onBeforeHeroEmbark(const CGHeroInstance * obj, const int
{
if(isEventVisible(obj, from, dest))
{
fadeOutObject(obj);
if (!isEventInstant(obj))
fadeOutObject(obj);
setViewCenter(obj->getSightCenter());
}
else
@ -381,7 +396,8 @@ void MapViewController::onAfterHeroDisembark(const CGHeroInstance * obj, const i
{
if(isEventVisible(obj, from, dest))
{
fadeInObject(obj);
if (!isEventInstant(obj))
fadeInObject(obj);
setViewCenter(obj->getSightCenter());
}
addObject(obj);
@ -391,7 +407,7 @@ void MapViewController::onObjectFadeIn(const CGObjectInstance * obj)
{
assert(!hasOngoingAnimations());
if(isEventVisible(obj))
if(isEventVisible(obj) && !isEventInstant(obj) )
fadeInObject(obj);
addObject(obj);
@ -401,7 +417,7 @@ void MapViewController::onObjectFadeOut(const CGObjectInstance * obj)
{
assert(!hasOngoingAnimations());
if(isEventVisible(obj))
if(isEventVisible(obj) && !isEventInstant(obj) )
fadeOutObject(obj);
else
removeObject(obj);

View File

@ -50,6 +50,7 @@ class MapViewController : public IMapObjectObserver
std::shared_ptr<MapRendererPuzzleMapContext> puzzleMapContext;
private:
bool isEventInstant(const CGObjectInstance * obj);
bool isEventVisible(const CGObjectInstance * obj);
bool isEventVisible(const CGHeroInstance * obj, const int3 & from, const int3 & dest);

View File

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

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
vcmi (1.3.1) jammy; urgency=medium
* New upstream release
-- Ivan Savenko <saven.ivan@gmail.com> Fri, 18 Aug 2023 16:00:00 +0200
vcmi (1.3.0) jammy; urgency=medium
* New upstream release

View File

@ -51,6 +51,7 @@
<category>StrategyGame</category>
</categories>
<releases>
<release version="1.3.1" date="2023-08-18" />
<release version="1.3.0" date="2023-08-04" />
<release version="1.2.1" date="2023-04-28" />
<release version="1.2.0" date="2023-04-14" />

View File

@ -72,6 +72,8 @@ void CSettingsView::loadSettings()
ui->comboBoxFullScreen->hide();
ui->labelFullScreen->hide();
#else
ui->labelReservedArea->hide();
ui->spinBoxReservedArea->hide();
if (settings["video"]["realFullscreen"].Bool())
ui->comboBoxFullScreen->setCurrentIndex(2);
else
@ -81,6 +83,7 @@ void CSettingsView::loadSettings()
ui->spinBoxInterfaceScaling->setValue(settings["video"]["resolution"]["scaling"].Float());
ui->spinBoxFramerateLimit->setValue(settings["video"]["targetfps"].Float());
ui->spinBoxReservedArea->setValue(std::round(settings["video"]["reservedWidth"].Float() * 100));
ui->comboBoxFriendlyAI->setCurrentText(QString::fromStdString(settings["server"]["friendlyAI"].String()));
ui->comboBoxNeutralAI->setCurrentText(QString::fromStdString(settings["server"]["neutralAI"].String()));
@ -468,14 +471,12 @@ void CSettingsView::on_lineEditRepositoryExtra_textEdited(const QString &arg1)
node->String() = arg1.toStdString();
}
void CSettingsView::on_spinBoxInterfaceScaling_valueChanged(int arg1)
{
Settings node = settings.write["video"]["resolution"]["scaling"];
node->Float() = arg1;
}
void CSettingsView::on_refreshRepositoriesButton_clicked()
{
auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow());
@ -487,7 +488,6 @@ void CSettingsView::on_refreshRepositoriesButton_clicked()
mainWindow->getModView()->loadRepositories();
}
void CSettingsView::on_spinBoxFramerateLimit_valueChanged(int arg1)
{
Settings node = settings.write["video"]["targetfps"];
@ -500,14 +500,12 @@ void CSettingsView::on_comboBoxEnemyPlayerAI_currentTextChanged(const QString &a
node->String() = arg1.toUtf8().data();
}
void CSettingsView::on_comboBoxAlliedPlayerAI_currentTextChanged(const QString &arg1)
{
Settings node = settings.write["server"]["alliedAI"];
node->String() = arg1.toUtf8().data();
}
void CSettingsView::on_checkBoxAutoSavePrefix_stateChanged(int arg1)
{
Settings node = settings.write["general"]["useSavePrefix"];
@ -515,17 +513,21 @@ void CSettingsView::on_checkBoxAutoSavePrefix_stateChanged(int arg1)
ui->lineEditAutoSavePrefix->setEnabled(arg1);
}
void CSettingsView::on_spinBoxAutoSaveLimit_valueChanged(int arg1)
{
Settings node = settings.write["general"]["autosaveCountLimit"];
node->Float() = arg1;
}
void CSettingsView::on_lineEditAutoSavePrefix_textEdited(const QString &arg1)
{
Settings node = settings.write["general"]["savePrefix"];
node->String() = arg1.toStdString();
}
void CSettingsView::on_spinBoxReservedArea_valueChanged(int arg1)
{
Settings node = settings.write["video"]["reservedWidth"];
node->Float() = float(arg1) / 100; // percentage -> ratio
}

View File

@ -72,6 +72,8 @@ private slots:
void on_lineEditAutoSavePrefix_textEdited(const QString &arg1);
void on_spinBoxReservedArea_valueChanged(int arg1);
private:
Ui::CSettingsView * ui;

View File

@ -42,6 +42,7 @@
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
@ -106,35 +107,136 @@
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<y>-197</y>
<width>610</width>
<height>790</height>
<height>768</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="2,0,1,1,1">
<item row="18" column="0">
<widget class="QLabel" name="labelArtificialIntelligence">
<item row="5" column="1" colspan="3">
<widget class="QLabel" name="labelTranslationStatus">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="23" 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="17" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="21" 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="8" column="0">
<widget class="QLabel" name="labelAutoSaveLimit">
<property name="text">
<string>Autosave limit (0 = off)</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="labelFullScreen">
<property name="text">
<string>Fullscreen</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="0" column="0">
<widget class="QLabel" name="labelGeneral">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Artificial Intelligence</string>
<string>General</string>
</property>
</widget>
</item>
<item row="26" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryDefault">
<item row="7" column="0">
<widget class="QLabel" name="labelAutoSave">
<property name="text">
<string notr="true"/>
<string>Autosave</string>
</property>
<property name="readOnly">
</widget>
</item>
<item row="18" 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="16" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
</property>
</widget>
</item>
<item row="28" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryExtra">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="26" column="1">
<item row="27" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryDefault">
<property name="enabled">
<bool>true</bool>
@ -147,13 +249,358 @@
</property>
</widget>
</item>
<item row="27" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryExtra">
<item row="15" 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="17" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
</item>
<item row="15" column="0">
<widget class="QLabel" name="labelFramerateLimit">
<property name="text">
<string>Framerate Limit</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguageBase"/>
</item>
<item row="20" column="0">
<widget class="QLabel" name="labelEnemyPlayerAI">
<property name="text">
<string>Adventure Map Enemies</string>
</property>
</widget>
</item>
<item row="27" column="0">
<widget class="QLabel" name="labelRepositoryDefault">
<property name="text">
<string>Default repository</string>
</property>
</widget>
</item>
<item row="11" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="7" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAutoSave">
<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="10" column="0">
<widget class="QLabel" name="labelVideo">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Video</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelAutoSavePrefix">
<property name="text">
<string>Autosave prefix</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="28" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryExtra">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="27" 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="18" column="0">
<widget class="QLabel" name="labelCursorType">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="26" column="1" colspan="2">
<widget class="QComboBox" name="comboBoxAutoCheck">
<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="3" colspan="2">
<widget class="QPushButton" name="refreshRepositoriesButton">
<property name="text">
<string>Refresh now</string>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QPushButton" name="pushButtonTranslation">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelTranslation">
<property name="text">
<string>Heroes III Translation</string>
</property>
</widget>
</item>
<item row="16" 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="24" column="0">
<widget class="QLabel" name="labelEnemyAI">
<property name="text">
<string>Enemy AI in battles</string>
</property>
</widget>
</item>
<item row="25" 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="28" column="0">
<widget class="QLabel" name="labelRepositoryExtra">
<property name="text">
<string>Additional repository</string>
</property>
</widget>
</item>
<item row="24" 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="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="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="22" column="0">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI in battles</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelInterfaceScaling">
<property name="text">
<string>Interface Scaling</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="9" column="1">
<widget class="QCheckBox" name="checkBoxAutoSavePrefix">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="23" 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="1" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="26" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string>Check on startup</string>
</property>
</widget>
</item>
<item row="22" 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="21" column="0">
<widget class="QLabel" name="labelAlliedPlayerAI">
<property name="text">
<string>Adventure Map Allies</string>
</property>
</widget>
</item>
<item row="19" 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="20" 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="9" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditAutoSavePrefix">
<property name="placeholderText">
<string>empty = map name prefix</string>
</property>
</widget>
</item>
@ -188,445 +635,29 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
</item>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelResolution">
<item row="13" column="0">
<widget class="QLabel" name="labelReservedArea">
<property name="text">
<string>Resolution</string>
</property>
</widget>
</item>
<item row="20" column="0">
<widget class="QLabel" name="labelAlliedPlayerAI">
<property name="text">
<string>Adventure Map Allies</string>
</property>
</widget>
</item>
<item row="23" 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="24" column="0">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mod Repositories</string>
</property>
</widget>
</item>
<item row="25" column="1" colspan="2">
<widget class="QComboBox" name="comboBoxAutoCheck">
<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="5" column="1" colspan="3">
<widget class="QLabel" name="labelTranslationStatus">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="26" column="0">
<widget class="QLabel" name="labelRepositoryDefault">
<property name="text">
<string>Default repository</string>
</property>
</widget>
</item>
<item row="27" column="0">
<widget class="QLabel" name="labelRepositoryExtra">
<property name="text">
<string>Additional repository</string>
</property>
</widget>
</item>
<item row="21" column="0">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI in battles</string>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QPushButton" name="pushButtonTranslation">
<property name="text">
<string/>
<string>Reserved screen area</string>
</property>
</widget>
</item>
<item row="13" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxInterfaceScaling">
<widget class="QSpinBox" name="spinBoxReservedArea">
<property name="suffix">
<string notr="true">%</string>
</property>
<property name="minimum">
<number>50</number>
<number>0</number>
</property>
<property name="maximum">
<number>400</number>
<number>25</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelInterfaceScaling">
<property name="text">
<string>Interface Scaling</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="8" column="0">
<widget class="QLabel" name="labelAutoSaveLimit">
<property name="text">
<string>Autosave limit (0 = off)</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguageBase"/>
</item>
<item row="22" column="0">
<widget class="QLabel" name="labelFriendlyAI">
<property name="text">
<string>Friendly AI in battles</string>
</property>
</widget>
</item>
<item row="22" 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="11" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="20" 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="16" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="19" column="0">
<widget class="QLabel" name="labelEnemyPlayerAI">
<property name="text">
<string>Adventure Map Enemies</string>
</property>
</widget>
</item>
<item row="14" 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="15" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAutoSave">
<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="1" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="17" 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="12" column="0">
<widget class="QLabel" name="labelFullScreen">
<property name="text">
<string>Fullscreen</string>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="labelCursorType">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="27" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryExtra">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="23" column="0">
<widget class="QLabel" name="labelEnemyAI">
<property name="text">
<string>Enemy AI in battles</string>
</property>
</widget>
</item>
<item row="25" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string>Check on startup</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelGeneral">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>General</string>
</property>
</widget>
</item>
<item row="21" 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="25" column="3" colspan="2">
<widget class="QPushButton" name="refreshRepositoriesButton">
<property name="text">
<string>Refresh now</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="6" column="0">
<widget class="QLabel" name="labelNetworkPort">
<property name="text">
<string>Network port</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelTranslation">
<property name="text">
<string>Heroes III Translation</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="7" column="0">
<widget class="QLabel" name="labelAutoSave">
<property name="text">
<string>Autosave</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="19" 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="16" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelFramerateLimit">
<property name="text">
<string>Framerate Limit</string>
</property>
</widget>
</item>
<item row="15" 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="9" column="0">
<widget class="QLabel" name="labelAutoSavePrefix">
<property name="text">
<string>Autosave prefix</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxAutoSaveLimit"/>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="checkBoxAutoSavePrefix">
<property name="text">
<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>
<number>0</number>
</property>
</widget>
</item>

View File

@ -407,123 +407,123 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation>3</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -534,95 +534,100 @@ 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="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translatorcomment></translatorcomment>
<translation>3</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation>VCMI语言</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation></translation>
</message>

View File

@ -406,123 +406,123 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<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="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -533,94 +533,99 @@ 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="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<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="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>

View File

@ -411,43 +411,43 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation>Désactivé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<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="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation>Dépôts de Mod</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation>Activé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation>IA ennemie dans les batailles</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation>Dépôt par défaut</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -464,174 +464,179 @@ 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="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation>Fenêtré</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation>Fenêtré sans bord</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation>Plein écran exclusif</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation>IA neutre dans les batailles</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation>Ennemis de la carte d&quot;aventure</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation>Mise à l&quot;échelle de l&quot;interface</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation>Curseur</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation>Langue des Données de Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation>Limite de fréquence d&quot;images</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation>Matériel</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation>Logiciel</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translation>Traduction de Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation>Alliés de la carte d&quot;aventure</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation>Dépôt supplémentaire</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation>Vérifier au démarrage</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation>Actualiser maintenant</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation>IA amicale dans les batailles</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source>
<translation>Plein écran</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation>Général</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation>Langue de VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation>Résolution</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation>Sauvegarde automatique</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation>Index d&apos;affichage</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<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="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation>Vidéo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation>Montrer l&apos;intro</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation>Actif</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation>Désactivé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation>Activé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation>Pas Installé</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation>Installer</translation>
</message>

View File

@ -406,123 +406,123 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation>Aus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<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="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation>Mod-Repositorien</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation>Skalierung der Benutzeroberfläche</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation>Neutrale KI in Kämpfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation>Gegnerische KI in Kämpfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation>Zusätzliches Repository</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation>Abenteuerkarte Verbündete</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation>Abenteuerkarte Feinde</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation>Fenstermodus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation>Randloser Vollbildmodus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation>Exklusiver Vollbildmodus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation>Limit für Autospeicherung (0 = aus)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation>Freundliche KI in Kämpfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation>Limit der Bildrate</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation>Präfix für Autospeicherung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation>leer = Kartenname als Präfix</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation>Jetzt aktualisieren</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation>Standard Repository</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation>An</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation>Zeiger</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation>Sprache der Heroes III Daten</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -539,94 +539,99 @@ 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="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation>Hardware</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation>Software</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translation>Heroes III Übersetzung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation>Beim Start prüfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source>
<translation>Vollbild</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation>Allgemein</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation>VCMI-Sprache</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation>Auflösung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation>Autospeichern</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation>Anzeige-Index</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<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="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation>Video</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation>Intro anzeigen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation>Aktiv</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation>Deaktiviert</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation>Aktivieren</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation>Nicht installiert</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation>Installieren</translation>
</message>

View File

@ -406,123 +406,123 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation>Wyłączony</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<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="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation>Repozytoria modów</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation>Skala interfejsu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation>AI bitewne jednostek neutralnych</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation>AI bitewne wrogów</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation>Dodatkowe repozytorium</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation>AI sojuszników mapy przygody</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation>AI wrogów mapy przygody</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation>Okno</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation>Pełny ekran (tryb okna)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation>Pełny ekran klasyczny</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation>Limit autozapisów (0 = brak)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation>AI bitewne sojuszników</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation>Limit FPS</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation>Przedrostek autozapisu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation>puste = przedrostek z nazwy mapy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation>Odśwież</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation>Domyślne repozytorium</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation>Włączony</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation>Kursor</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation>Język plików Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -539,94 +539,99 @@ 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="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation>Sprzętowy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation>Programowy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translation>Tłumaczenie Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation>Sprawdzaj przy uruchomieniu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<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="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation>Ogólne</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation>Język VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation>Rozdzielczość</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation>Autozapis</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation>Numer wyświetlacza</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<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="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation>Obraz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation>Pokaż intro</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation>Aktywny</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation>Wyłączone</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation>Włącz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation>Nie zainstalowano</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation>Zainstaluj</translation>
</message>

View File

@ -406,144 +406,149 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation>Отключено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation>Включено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation>Проверять при запуске</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source>
<translation>Полноэкранный режим</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation>Общее</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation>Язык VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation>Курсор</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source>
<translation>Искусственный интеллект</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation>Репозитории модов</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation>Язык данных Героев III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -554,73 +559,73 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation>Аппаратный</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation>Программный</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translation>Перевод Героев III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation>Разрешение экрана</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation>Автосохранение</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation>Дисплей</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source>
<translation>Сетевой порт</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation>Графика</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation>Вступление</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation>Активен</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation>Отключен</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation>Включить</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation>Не установлен</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation>Установить</translation>
</message>

View File

@ -406,165 +406,170 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation>Desactivado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<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="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation>Repositorios de Mods</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation>Encendido</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation>Cursor</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translation>Traducción de Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source>
<translation>Pantalla completa</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation>Idioma de VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation>Resolución</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation>Autoguardado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation>Mostrar índice</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<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="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation>Vídeo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -575,52 +580,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="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation>Hardware</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation>Software</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation>Mostrar introducción</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation>Comprovar al inicio</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation>Idioma de los datos de Heroes III.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation>Activado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation>Desactivado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation>Activar</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation>No Instalado</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation>Instalar</translation>
</message>

View File

@ -406,123 +406,123 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/>
<location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source>
<translation>Вимкнено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source>
<translation>Штучний інтелект</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source>
<translation>Репозиторії модифікацій</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/>
<location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source>
<translation>Масштабування інтерфейсу</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source>
<translation>Нейтральний ШІ в боях</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/>
<location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source>
<translation>Ворожий ШІ в боях</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source>
<translation>Додатковий репозиторій</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/>
<location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source>
<translation>Союзники на мапі пригод</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source>
<translation>Вороги на мапі пригод</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/>
<location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source>
<translation>У вікні</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source>
<translation>Повноекранне вікно</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/>
<location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source>
<translation>Повноекранний (ексклюзивно)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source>
<translation>Кількість автозбережень</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/>
<location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source>
<translation>Дружній ШІ в боях</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source>
<translation>Обмеження частоти кадрів</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/>
<location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source>
<translation>Префікс назв автозбережень</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/>
<location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source>
<translation>(використовувати назву карти)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source>
<translation>Оновити зараз</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source>
<translation>Стандартний репозиторій</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/>
<location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source>
<translation>Увімкнено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/>
<location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source>
<translation>Курсор</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source>
<translation>Мова Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/>
<location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen
@ -539,94 +539,99 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
Повноекранний ексклюзивний режим - гра займатиме весь екран і використовуватиме вибрану роздільну здатність.</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/>
<location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation>Зарезервована зона екрану</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source>
<translation>Апаратний</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/>
<location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source>
<translation>Програмний</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/>
<location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source>
<translation>Переклад Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source>
<translation>Перевіряти на старті</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source>
<translation>Повноекранний режим</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source>
<translation>Загальні налаштування</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source>
<translation>Мова VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/>
<location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source>
<translation>Роздільна здатність</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source>
<translation>Автозбереження</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/>
<location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source>
<translation>Дісплей</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/>
<location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source>
<translation>Мережевий порт</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source>
<translation>Графіка</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/>
<location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source>
<translation>Вступні відео</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source>
<translation>Активні</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source>
<translation>Деактивований</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source>
<translation>Активувати</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source>
<translation>Не встановлено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/>
<location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source>
<translation>Встановити</translation>
</message>

View File

@ -445,7 +445,7 @@ void CCreatureSet::setStackExp(const SlotID & slot, TExpType exp)
stacks[slot]->experience = exp;
}
void CCreatureSet::clear()
void CCreatureSet::clearSlots()
{
while(!stacks.empty())
{
@ -533,12 +533,12 @@ void CCreatureSet::changeStackCount(const SlotID & slot, TQuantity toAdd)
CCreatureSet::~CCreatureSet()
{
clear();
clearSlots();
}
void CCreatureSet::setToArmy(CSimpleArmy &src)
{
clear();
clearSlots();
while(src)
{
auto i = src.army.begin();
@ -1050,7 +1050,7 @@ void CStackBasicDescriptor::serializeJson(JsonSerializeFormat & handler)
}
}
void CSimpleArmy::clear()
void CSimpleArmy::clearSlots()
{
army.clear();
}

View File

@ -181,7 +181,7 @@ using TCreatureQueue = std::priority_queue<TPairCreatureSlot, std::vector<TPairC
class IArmyDescriptor
{
public:
virtual void clear() = 0;
virtual void clearSlots() = 0;
virtual bool setCreature(SlotID slot, CreatureID cre, TQuantity count) = 0;
};
@ -190,7 +190,7 @@ class DLL_LINKAGE CSimpleArmy : public IArmyDescriptor
{
public:
TSimpleSlots army;
void clear() override;
void clearSlots() override;
bool setCreature(SlotID slot, CreatureID cre, TQuantity count) override;
operator bool() const;
@ -226,7 +226,7 @@ public:
void addToSlot(const SlotID & slot, const CreatureID & cre, TQuantity count, bool allowMerging = true); //Adds stack to slot. Slot must be empty or with same type creature
void addToSlot(const SlotID & slot, CStackInstance * stack, bool allowMerging = true); //Adds stack to slot. Slot must be empty or with same type creature
void clear() override;
void clearSlots() override;
void setFormation(bool tight);
CArmedInstance *castToArmyObj();

View File

@ -313,19 +313,7 @@ void CGeneralTextHandler::registerStringOverride(const std::string & modContext,
assert(!modContext.empty());
assert(!language.empty());
std::string baseModLanguage = getModLanguage(modContext);
if (baseModLanguage != language)
{
// this is translation - only add text to existing strings, do not register new ones
if (stringsLocalizations.count(UID.get()) == 0)
{
logMod->warn("Unknown string '%s' in mod '%s' for language '%s'. Ignoring", UID.get(), modContext, language);
return;
}
}
// NOTE: implicitly creates entry, intended - strings added by vcmi (and potential UI mods) are not registered anywhere at the moment
// NOTE: implicitly creates entry, intended - strings added by maps, campaigns, vcmi and potentially - UI mods are not registered anywhere at the moment
auto & entry = stringsLocalizations[UID.get()];
entry.overrideLanguage = language;
@ -349,6 +337,9 @@ bool CGeneralTextHandler::validateTranslation(const std::string & language, cons
if (string.second.baseLanguage == language && !string.second.baseValue.empty())
continue; // Base string already uses our language
if (string.second.baseLanguage.empty())
continue; // String added in localization, not present in base language (e.g. maps/campaigns)
if (config.Struct().count(string.first) > 0)
continue;

View File

@ -335,7 +335,7 @@ struct DLL_LINKAGE SetAvailableHero : public CPackForClient
{
SetAvailableHero()
{
army.clear();
army.clearSlots();
}
void applyGs(CGameState * gs);

View File

@ -38,6 +38,8 @@
VCMI_LIB_NAMESPACE_BEGIN
#define THROW_IF_NO_BATTLE if (!gs->curB) throw std::runtime_error("Trying to apply pack when no battle!");
void CPack::visit(ICPackVisitor & visitor)
{
visitBasic(visitor);
@ -2127,16 +2129,19 @@ void BattleStart::applyGs(CGameState * gs) const
void BattleNextRound::applyGs(CGameState * gs) const
{
THROW_IF_NO_BATTLE
gs->curB->nextRound(round);
}
void BattleSetActiveStack::applyGs(CGameState * gs) const
{
THROW_IF_NO_BATTLE
gs->curB->nextTurn(stack);
}
void BattleTriggerEffect::applyGs(CGameState * gs) const
{
THROW_IF_NO_BATTLE
CStack * st = gs->curB->getStack(stackID);
assert(st);
switch(static_cast<BonusType>(effect))
@ -2232,6 +2237,7 @@ void BattleLogMessage::applyBattle(IBattleState * battleState)
void BattleStackMoved::applyGs(CGameState *gs)
{
THROW_IF_NO_BATTLE
applyBattle(gs->curB);
}
@ -2242,6 +2248,7 @@ void BattleStackMoved::applyBattle(IBattleState * battleState)
void BattleStackAttacked::applyGs(CGameState * gs)
{
THROW_IF_NO_BATTLE
applyBattle(gs->curB);
}
@ -2252,6 +2259,7 @@ void BattleStackAttacked::applyBattle(IBattleState * battleState)
void BattleAttack::applyGs(CGameState * gs)
{
THROW_IF_NO_BATTLE
CStack * attacker = gs->curB->getStack(stackAttacking);
assert(attacker);
@ -2265,6 +2273,8 @@ void BattleAttack::applyGs(CGameState * gs)
void StartAction::applyGs(CGameState *gs)
{
THROW_IF_NO_BATTLE
CStack *st = gs->curB->getStack(ba.stackNumber);
if(ba.actionType == EActionType::END_TACTIC_PHASE)
@ -2313,7 +2323,7 @@ void StartAction::applyGs(CGameState *gs)
void BattleSpellCast::applyGs(CGameState * gs) const
{
assert(gs->curB);
THROW_IF_NO_BATTLE
if(castByHero)
{
@ -2326,6 +2336,7 @@ void BattleSpellCast::applyGs(CGameState * gs) const
void SetStackEffect::applyGs(CGameState *gs)
{
THROW_IF_NO_BATTLE
applyBattle(gs->curB);
}
@ -2344,6 +2355,7 @@ void SetStackEffect::applyBattle(IBattleState * battleState)
void StacksInjured::applyGs(CGameState *gs)
{
THROW_IF_NO_BATTLE
applyBattle(gs->curB);
}
@ -2355,6 +2367,7 @@ void StacksInjured::applyBattle(IBattleState * battleState)
void BattleUnitsChanged::applyGs(CGameState *gs)
{
THROW_IF_NO_BATTLE
applyBattle(gs->curB);
}
@ -2385,8 +2398,8 @@ void BattleUnitsChanged::applyBattle(IBattleState * battleState)
void BattleObstaclesChanged::applyGs(CGameState * gs)
{
if(gs->curB)
applyBattle(gs->curB);
THROW_IF_NO_BATTLE;
applyBattle(gs->curB);
}
void BattleObstaclesChanged::applyBattle(IBattleState * battleState)
@ -2417,8 +2430,8 @@ CatapultAttack::~CatapultAttack() = default;
void CatapultAttack::applyGs(CGameState * gs)
{
if(gs->curB)
applyBattle(gs->curB);
THROW_IF_NO_BATTLE
applyBattle(gs->curB);
}
void CatapultAttack::visitTyped(ICPackVisitor & visitor)
@ -2444,6 +2457,7 @@ void CatapultAttack::applyBattle(IBattleState * battleState)
void BattleSetStackProperty::applyGs(CGameState * gs) const
{
THROW_IF_NO_BATTLE
CStack * stack = gs->curB->getStack(stackID);
switch(which)
{

View File

@ -1732,6 +1732,10 @@ SpellID CBattleInfoCallback::getRandomCastedSpell(CRandomGenerator & rand,const
TConstBonusListPtr bl = caster->getBonuses(Selector::type()(BonusType::SPELLCASTER));
if (!bl->size())
return SpellID::NONE;
if(bl->size() == 1)
return SpellID(bl->front()->subtype);
int totalWeight = 0;
for(const auto & b : *bl)
{

View File

@ -58,7 +58,7 @@ std::string CBank::getHoverText(PlayerColor player) const
void CBank::setConfig(const BankConfig & config)
{
bc = std::make_unique<BankConfig>(config);
clear(); // remove all stacks, if any
clearSlots(); // remove all stacks, if any
for(const auto & stack : config.guards)
setCreature (SlotID(stacksCount()), stack.type->getId(), stack.count);

View File

@ -356,6 +356,9 @@ void CTownRewardableBuilding::heroLevelUpDone(const CGHeroInstance *hero) const
void CTownRewardableBuilding::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const
{
if(answer == 0)
return; // player refused
if(visitors.find(hero->id) != visitors.end())
return; // query not for this building

View File

@ -1736,7 +1736,7 @@ CGObjectInstance * CMapLoaderH3M::readHero(const int3 & mapPosition, const Objec
{
if(!object->spells.empty())
{
object->clear();
object->spells.clear();
logGlobal->debug("Hero %s subID=%d has spells set twice (in map properties and on adventure map instance). Using the latter set...", object->getNameTextID(), object->subID);
}

View File

@ -376,6 +376,12 @@ void Area::translate(const int3 & shift)
//toAbsolute(dTiles, shift);
}
void Area::erase_if(std::function<bool(const int3&)> predicate)
{
invalidate();
vstd::erase_if(dTiles, predicate);
}
Area operator- (const Area & l, const int3 & r)
{
Area result(l);

View File

@ -64,6 +64,7 @@ namespace rmg
void intersect(const Area & area);
void subtract(const Area & area);
void translate(const int3 & shift);
void erase_if(std::function<bool(const int3&)> predicate);
friend Area operator+ (const Area & l, const int3 & r); //translation
friend Area operator- (const Area & l, const int3 & r); //translation

View File

@ -344,16 +344,6 @@ void Object::Instance::finalize(RmgMap & map)
setTemplate(terrainType->getId());
}
}
if (dObject.ID == Obj::MONSTER)
{
//Make up for extra offset in HotA creature templates
auto visitableOffset = dObject.getVisitableOffset();
auto fixedPos = getPosition(true) + visitableOffset;
vstd::abetween(fixedPos.x, visitableOffset.x, map.width() - 1);
vstd::abetween(fixedPos.y, visitableOffset.y, map.height() - 1);
int3 parentPos = getPosition(true) - getPosition(false);
setPosition(fixedPos - parentPos);
}
if (dObject.isVisitable() && !map.isOnMap(dObject.visitablePos()))
throw rmgException(boost::to_string(boost::format("Visitable tile %s of object %d at %s is outside the map") % dObject.visitablePos().toString() % dObject.id % dObject.pos.toString()));

View File

@ -129,6 +129,19 @@ int3 ObjectManager::findPlaceForObject(const rmg::Area & searchArea, rmg::Object
{
float bestWeight = 0.f;
int3 result(-1, -1, -1);
//Blocked area might not cover object position if it has an offset from (0,0)
auto outsideTheMap = [this, &obj]() -> bool
{
for (const auto& oi : obj.instances())
{
if (!map.isOnMap(oi->getPosition(true)))
{
return true;
}
}
return false;
};
if(optimizer & OptimizeType::DISTANCE)
{
@ -149,6 +162,9 @@ int3 ObjectManager::findPlaceForObject(const rmg::Area & searchArea, rmg::Object
if(!searchArea.contains(obj.getArea()) || !searchArea.overlap(obj.getAccessibleArea()))
continue;
if (outsideTheMap())
continue;
float weight = weightFunction(tile);
if(weight > bestWeight)
@ -168,9 +184,12 @@ int3 ObjectManager::findPlaceForObject(const rmg::Area & searchArea, rmg::Object
if (obj.getVisibleTop().y < 0)
continue;
if(!searchArea.contains(obj.getArea()) || !searchArea.overlap(obj.getAccessibleArea()))
continue;
if (outsideTheMap())
continue;
float weight = weightFunction(tile);
if(weight > bestWeight)
@ -416,7 +435,7 @@ bool ObjectManager::createRequiredObjects()
//create object on specific positions
//TODO: implement guards
for (const auto &objInfo : instantObjects)
for (const auto &objInfo : instantObjects) //Unused ATM
{
rmg::Object rmgObject(*objInfo.obj);
rmgObject.setPosition(objInfo.pos);
@ -433,6 +452,28 @@ bool ObjectManager::createRequiredObjects()
void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateDistance, bool createRoad/* = false*/)
{
//object.finalize(map);
if (object.instances().size() == 1 && object.instances().front()->object().ID == Obj::MONSTER)
{
//Fix for HoTA offset - lonely guards
auto monster = object.instances().front();
if (!monster->object().appearance)
{
//Needed to determine visitable offset
monster->setAnyTemplate();
}
object.getPosition();
auto visitableOffset = monster->object().getVisitableOffset();
auto fixedPos = monster->getPosition(true) + visitableOffset;
//Do not place guard outside the map
vstd::abetween(fixedPos.x, visitableOffset.x, map.width() - 1);
vstd::abetween(fixedPos.y, visitableOffset.y, map.height() - 1);
int3 parentOffset = monster->getPosition(true) - monster->getPosition(false);
monster->setPosition(fixedPos - parentOffset);
}
object.finalize(map);
Zone::Lock lock(zone.areaMutex);
@ -443,8 +484,8 @@ void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateD
zone.freePaths().add(object.getVisitablePosition());
zone.areaUsed().unite(object.getArea());
zone.areaUsed().erase(object.getVisitablePosition());
if(guarded)
if(guarded) //We assume the monster won't be guarded
{
auto guardedArea = object.instances().back()->getAccessibleArea();
guardedArea.add(object.instances().back()->getVisitablePosition());
@ -501,6 +542,7 @@ void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateD
{
case Obj::RANDOM_TREASURE_ART:
case Obj::RANDOM_MINOR_ART: //In OH3 quest artifacts have higher value than normal arts
case Obj::RANDOM_RESOURCE:
{
if (auto * qap = zone.getModificator<QuestArtifactPlacer>())
{
@ -629,8 +671,12 @@ bool ObjectManager::addGuard(rmg::Object & object, si32 strength, bool zoneGuard
});
auto & instance = object.addInstance(*guard);
instance.setPosition(guardPos - object.getPosition());
instance.setAnyTemplate(); //terrain is irrelevant for monsters, but monsters need some template now
//Fix HoTA monsters with offset template
auto visitableOffset = instance.object().getVisitableOffset();
auto fixedPos = guardPos - object.getPosition() + visitableOffset;
instance.setPosition(fixedPos);
return true;
}

View File

@ -89,14 +89,15 @@ void QuestArtifactPlacer::placeQuestArtifacts(CRandomGenerator & rand)
artifactToReplace->getObjectName(),
artifactToReplace->getPosition().toString(),
VLC->artifacts()->getById(artifactToPlace)->getNameTranslated());
artifactToReplace->ID = Obj::ARTIFACT;
artifactToReplace->subID = artifactToPlace;
//Update appearance. Terrain is irrelevant.
auto handler = VLC->objtypeh->getHandlerFor(Obj::ARTIFACT, artifactToPlace);
auto newObj = handler->create();
auto templates = handler->getTemplates();
artifactToReplace->appearance = templates.front();
//FIXME: Instance name is still "randomArtifact"
//artifactToReplace->appearance = templates.front();
newObj->appearance = templates.front();
newObj->pos = artifactToReplace->pos;
mapProxy->insertObject(newObj);
for (auto z : map.getZones())
{
@ -107,6 +108,7 @@ void QuestArtifactPlacer::placeQuestArtifacts(CRandomGenerator & rand)
localQap->dropReplacedArtifact(artifactToReplace);
}
}
mapProxy->removeObject(artifactToReplace);
break;
}
}

View File

@ -18,9 +18,12 @@
#include "../threadpool/MapProxy.h"
#include "../../CModHandler.h"
#include "../../mapping/CMapEditManager.h"
#include "../../TerrainHandler.h"
VCMI_LIB_NAMESPACE_BEGIN
class TerrainType;
void RoadPlacer::process()
{
if(generator.getConfig().defaultRoadType.empty() && generator.getConfig().secondaryRoadType.empty())
@ -114,6 +117,13 @@ void RoadPlacer::drawRoads(bool secondary)
//Clean space under roads even if they won't be eventually generated
Zone::Lock lock(zone.areaMutex);
//Do not draw roads on underground rock or water
roads.erase_if([this](const int3& pos) -> bool
{
const auto* terrain = map.getTile(pos).terType;;
return !terrain->isPassable() || !terrain->isLand();
});
zone.areaPossible().subtract(roads);
zone.freePaths().unite(roads);
}

View File

@ -30,6 +30,12 @@ void MapProxy::insertObjects(std::set<CGObjectInstance*>& objects)
map.getEditManager()->insertObjects(objects);
}
void MapProxy::removeObject(CGObjectInstance * obj)
{
Lock lock(mx);
map.getEditManager()->removeObject(obj);
}
void MapProxy::drawTerrain(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain)
{
Lock lock(mx);

View File

@ -26,6 +26,7 @@ public:
void insertObject(CGObjectInstance * obj);
void insertObjects(std::set<CGObjectInstance*>& objects);
void removeObject(CGObjectInstance* obj);
void drawTerrain(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain);
void drawRivers(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain);

View File

@ -590,7 +590,7 @@ std::vector<AimType> BattleSpellMechanics::getTargetTypes() const
return ret;
}
std::vector<Destination> BattleSpellMechanics::getPossibleDestinations(size_t index, AimType aimType, const Target & current) const
std::vector<Destination> BattleSpellMechanics::getPossibleDestinations(size_t index, AimType aimType, const Target & current, bool fast) const
{
//TODO: BattleSpellMechanics::getPossibleDestinations
@ -602,19 +602,66 @@ std::vector<Destination> BattleSpellMechanics::getPossibleDestinations(size_t in
switch(aimType)
{
case AimType::CREATURE:
case AimType::LOCATION:
for(int i = 0; i < GameConstants::BFIELD_SIZE; i++)
{
auto stacks = battle()->battleGetAllStacks();
for(auto stack : stacks)
{
BattleHex dest(i);
if(dest.isAvailable())
Target tmp = current;
tmp.emplace_back(stack->getPosition());
detail::ProblemImpl ignored;
if(canBeCastAt(tmp, ignored))
ret.emplace_back(stack->getPosition());
}
break;
}
case AimType::LOCATION:
if(fast)
{
auto stacks = battle()->battleGetAllStacks();
std::set<BattleHex> hexesToCheck;
for(auto stack : stacks)
{
Target tmp = current;
tmp.emplace_back(dest);
hexesToCheck.insert(stack->getPosition());
detail::ProblemImpl ignored;
for(auto adjacent : stack->getPosition().neighbouringTiles())
hexesToCheck.insert(adjacent);
}
if(canBeCastAt(tmp, ignored))
ret.emplace_back(dest);
for(auto hex : hexesToCheck)
{
if(hex.isAvailable())
{
Target tmp = current;
tmp.emplace_back(hex);
detail::ProblemImpl ignored;
if(canBeCastAt(tmp, ignored))
ret.emplace_back(hex);
}
}
}
else
{
for(int i = 0; i < GameConstants::BFIELD_SIZE; i++)
{
BattleHex dest(i);
if(dest.isAvailable())
{
Target tmp = current;
tmp.emplace_back(dest);
detail::ProblemImpl ignored;
if(canBeCastAt(tmp, ignored))
ret.emplace_back(dest);
}
}
}
break;

View File

@ -50,7 +50,7 @@ public:
/// Returns vector of all possible destinations for specified aim type
/// index - ???
/// current - ???
std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current) const override final;
std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current, bool fast) const override final;
/// Returns true if spell can be cast on unit
bool isReceptive(const battle::Unit * target) const override;

View File

@ -326,7 +326,7 @@ bool BattleCast::castIfPossible(ServerCallback * server, Target target)
return false;
}
std::vector<Target> BattleCast::findPotentialTargets() const
std::vector<Target> BattleCast::findPotentialTargets(bool fast) const
{
//TODO: for more than 2 destinations per target much more efficient algorithm is required
@ -354,7 +354,7 @@ std::vector<Target> BattleCast::findPotentialTargets() const
if(previous.empty())
{
Target empty;
destinations = m->getPossibleDestinations(index, targetTypes.at(index), empty);
destinations = m->getPossibleDestinations(index, targetTypes.at(index), empty, fast);
for(auto & destination : destinations)
{
@ -367,7 +367,7 @@ std::vector<Target> BattleCast::findPotentialTargets() const
{
for(const Target & current : previous)
{
destinations = m->getPossibleDestinations(index, targetTypes.at(index), current);
destinations = m->getPossibleDestinations(index, targetTypes.at(index), current, fast);
for(auto & destination : destinations)
{

View File

@ -139,7 +139,7 @@ public:
///cast with silent check for permitted cast
bool castIfPossible(ServerCallback * server, Target target);
std::vector<Target> findPotentialTargets() const;
std::vector<Target> findPotentialTargets(bool fast = false) const;
private:
///spell school level
@ -199,7 +199,7 @@ public:
virtual std::vector<AimType> getTargetTypes() const = 0;
virtual std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current) const = 0;
virtual std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current, bool fast = false) const = 0;
virtual const Spell * getSpell() const = 0;

View File

@ -222,7 +222,7 @@ bool RewardsWidget::commitChanges()
pandora->resources = ResourceSet();
pandora->artifacts.clear();
pandora->spells.clear();
pandora->creatures.clear();
pandora->creatures.clearSlots();
for(int row = 0; row < rewards; ++row)
{

View File

@ -2943,7 +2943,7 @@ bool CGameHandler::load(const std::string & filename)
try
{
{
CLoadFile lf(*CResourceHandler::get("local")->getResourceName(ResourceID(stem.to_string(), EResType::SAVEGAME)), MINIMAL_SERIALIZATION_VERSION);
CLoadFile lf(*CResourceHandler::get()->getResourceName(ResourceID(stem.to_string(), EResType::SAVEGAME)), MINIMAL_SERIALIZATION_VERSION);
loadCommonState(lf);
logGlobal->info("Loading server state");
lf >> *this;

View File

@ -277,6 +277,12 @@ void CVCMIServer::prepareToRestart()
* si = * gh->gs->initialOpts;
si->seedToBeUsed = si->seedPostInit = 0;
state = EServerState::LOBBY;
if (si->campState)
{
assert(si->campState->currentScenario().has_value());
campaignMap = si->campState->currentScenario().value_or(CampaignScenarioID(0));
campaignBonus = si->campState->getBonusID(campaignMap).value_or(-1);
}
// FIXME: dirry hack to make sure old CGameHandler::run is finished
boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
}

View File

@ -112,7 +112,7 @@ void HeroPoolProcessor::onHeroEscaped(const PlayerColor & color, const CGHeroIns
sah.slotID = selectSlotForRole(color, sah.roleID);
sah.player = color;
sah.hid = hero->subID;
sah.army.clear();
sah.army.clearSlots();
sah.army.setCreature(SlotID(0), hero->type->initialArmy.at(0).creature, 1);
gameHandler->sendAndApply(&sah);
@ -148,7 +148,7 @@ void HeroPoolProcessor::selectNewHeroForSlot(const PlayerColor & color, TavernHe
else
{
sah.roleID = TavernSlotRole::SINGLE_UNIT;
sah.army.clear();
sah.army.clearSlots();
sah.army.setCreature(SlotID(0), newHero->type->initialArmy[0].creature, 1);
}
}
@ -244,7 +244,7 @@ bool HeroPoolProcessor::hireHero(const ObjectInstanceID & objectID, const HeroTy
hr.hid = recruitedHero->subID;
hr.player = player;
hr.tile = recruitedHero->convertFromVisitablePos(targetPos );
if(gameHandler->getTile(hr.tile)->isWater() && !recruitedHero->boat)
if(gameHandler->getTile(targetPos)->isWater() && !recruitedHero->boat)
{
//Create a new boat for hero
gameHandler->createObject(targetPos , Obj::BOAT, recruitedHero->getBoatType().getNum());

View File

@ -34,7 +34,7 @@ public:
MOCK_CONST_METHOD1(isReceptive, bool(const battle::Unit * ));
MOCK_CONST_METHOD0(getTargetTypes, std::vector<AimType>());
MOCK_CONST_METHOD3(getPossibleDestinations, std::vector<Destination>(size_t, AimType, const Target &));
MOCK_CONST_METHOD4(getPossibleDestinations, std::vector<Destination>(size_t, AimType, const Target &, bool));
MOCK_CONST_METHOD0(getSpell, const Spell *());