From 2982d4ef7bbd49f622bc51c8364e1846fbd196d9 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 31 Aug 2025 02:52:34 +0200 Subject: [PATCH 01/22] fix android url encoding --- launcher/helper.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/launcher/helper.cpp b/launcher/helper.cpp index e741dfb43..ac211e4b6 100644 --- a/launcher/helper.cpp +++ b/launcher/helper.cpp @@ -89,8 +89,34 @@ QString getRealPath(QString path) void performNativeCopy(QString src, QString dst) { #ifdef VCMI_ANDROID - auto srcStr = QAndroidJniObject::fromString(src); - auto dstStr = QAndroidJniObject::fromString(dst); + auto percentEncodeNonAscii = [](const QString &input) { + QByteArray utf8 = input.toUtf8(); + QByteArray encoded; + + for (char c : utf8) { + // If ASCII (0x00 to 0x7F), keep as is + if (static_cast(c) < 0x80) { + encoded.append(c); + } else { + // Non-ASCII: encode as %HH + encoded.append('%'); + encoded.append(QByteArray::number(static_cast(c), 16).toUpper().rightJustified(2, '0')); + } + } + + return QString::fromUtf8(encoded); + }; + + auto safeEncode = [&](QString uri) -> QString + { + if (!uri.startsWith("content://", Qt::CaseInsensitive)) + return uri; + uri.replace(" ", "%20"); + return percentEncodeNonAscii(uri); + }; + + auto srcStr = QAndroidJniObject::fromString(safeEncode(src)); + auto dstStr = QAndroidJniObject::fromString(safeEncode(dst)); QAndroidJniObject::callStaticObjectMethod("eu/vcmi/vcmi/util/FileUtil", "copyFileFromUri", "(Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;)V", srcStr.object(), dstStr.object(), QtAndroid::androidContext().object()); #else QFile::copy(src, dst); From 644f2ea312862753480f531d61c1636bd0f97cc2 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 31 Aug 2025 02:59:09 +0200 Subject: [PATCH 02/22] codestyle --- launcher/helper.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/launcher/helper.cpp b/launcher/helper.cpp index ac211e4b6..87aa72d07 100644 --- a/launcher/helper.cpp +++ b/launcher/helper.cpp @@ -93,11 +93,13 @@ void performNativeCopy(QString src, QString dst) QByteArray utf8 = input.toUtf8(); QByteArray encoded; - for (char c : utf8) { + for (char c : utf8) + { // If ASCII (0x00 to 0x7F), keep as is - if (static_cast(c) < 0x80) { + if (static_cast(c) < 0x80) encoded.append(c); - } else { + else + { // Non-ASCII: encode as %HH encoded.append('%'); encoded.append(QByteArray::number(static_cast(c), 16).toUpper().rightJustified(2, '0')); From 5344fdae914781609977cfe046836f64187feb69 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 31 Aug 2025 11:22:44 +0200 Subject: [PATCH 03/22] review --- launcher/helper.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/launcher/helper.cpp b/launcher/helper.cpp index 87aa72d07..27ced433c 100644 --- a/launcher/helper.cpp +++ b/launcher/helper.cpp @@ -89,20 +89,21 @@ QString getRealPath(QString path) void performNativeCopy(QString src, QString dst) { #ifdef VCMI_ANDROID - auto percentEncodeNonAscii = [](const QString &input) { + auto percentEncodeNonAscii = [](const QString &input) -> QString + { QByteArray utf8 = input.toUtf8(); QByteArray encoded; - for (char c : utf8) + for(unsigned char c : utf8) { // If ASCII (0x00 to 0x7F), keep as is - if (static_cast(c) < 0x80) + if(c < 0x80) encoded.append(c); else { // Non-ASCII: encode as %HH encoded.append('%'); - encoded.append(QByteArray::number(static_cast(c), 16).toUpper().rightJustified(2, '0')); + encoded.append(QByteArray::number(static_cast(c), 16).toUpper().rightJustified(2, '0')); } } @@ -111,7 +112,7 @@ void performNativeCopy(QString src, QString dst) auto safeEncode = [&](QString uri) -> QString { - if (!uri.startsWith("content://", Qt::CaseInsensitive)) + if(!uri.startsWith("content://", Qt::CaseInsensitive)) return uri; uri.replace(" ", "%20"); return percentEncodeNonAscii(uri); From 20488067533f432a1e47a475b47157bcde0ada43 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 31 Aug 2025 14:02:19 +0200 Subject: [PATCH 04/22] keep screen on --- launcher/firstLaunch/firstlaunch_moc.cpp | 2 ++ launcher/helper.cpp | 29 ++++++++++++++++++++++++ launcher/helper.h | 1 + launcher/modManager/cmodlistview_moc.cpp | 3 +++ 4 files changed, 35 insertions(+) diff --git a/launcher/firstLaunch/firstlaunch_moc.cpp b/launcher/firstLaunch/firstlaunch_moc.cpp index f4c209721..977a2ae0c 100644 --- a/launcher/firstLaunch/firstlaunch_moc.cpp +++ b/launcher/firstLaunch/firstlaunch_moc.cpp @@ -443,10 +443,12 @@ void FirstLaunchView::extractGogDataAsync(QString filePathBin, QString filePathE if(errorText.isEmpty()) { logGlobal->info("Performing extraction using innoextract..."); + Helper::keepScreenOn(true); errorText = Innoextract::extract(tmpFileExe, tempDir.path(), [this](float progress) { ui->progressBarGog->setValue(progress * 100); qApp->processEvents(); }); + Helper::keepScreenOn(false); logGlobal->info("Extraction done!"); } diff --git a/launcher/helper.cpp b/launcher/helper.cpp index e741dfb43..8d02c0989 100644 --- a/launcher/helper.cpp +++ b/launcher/helper.cpp @@ -22,6 +22,7 @@ #ifdef VCMI_ANDROID #include #include +#include #endif #ifdef VCMI_IOS @@ -114,4 +115,32 @@ MainWindow * getMainWindow() return mainWin; return nullptr; } + + +void keepScreenOn(bool on) +{ +#if defined(VCMI_ANDROID) + // based on https://stackoverflow.com/a/38846485 + QtAndroid::runOnAndroidThread([on] + { + QAndroidJniObject activity = QtAndroid::androidActivity(); + if(activity.isValid()) + { + QAndroidJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;"); + + if(window.isValid()) + { + const int FLAG_KEEP_SCREEN_ON = 128; + if(on) + window.callMethod("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON); + else + window.callMethod("clearFlags", "(I)V", FLAG_KEEP_SCREEN_ON); + } + } + QAndroidJniEnvironment env; + if (env->ExceptionCheck()) + env->ExceptionClear(); + }); +#endif +} } diff --git a/launcher/helper.h b/launcher/helper.h index 032fd59af..23358b3e2 100644 --- a/launcher/helper.h +++ b/launcher/helper.h @@ -23,4 +23,5 @@ QString getRealPath(QString path); void performNativeCopy(QString src, QString dst); void revealDirectoryInFileBrowser(QString path); MainWindow * getMainWindow(); +void keepScreenOn(bool on); } diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp index ebafaf487..be27e60e8 100644 --- a/launcher/modManager/cmodlistview_moc.cpp +++ b/launcher/modManager/cmodlistview_moc.cpp @@ -798,6 +798,7 @@ void CModListView::downloadFile(QString file, QUrl url, QString description, qin void CModListView::downloadProgress(qint64 current, qint64 max) { + Helper::keepScreenOn(true); // display progress, in megabytes ui->progressBar->setVisible(true); ui->progressBar->setMaximum(max / (1024 * 1024)); @@ -806,6 +807,7 @@ void CModListView::downloadProgress(qint64 current, qint64 max) void CModListView::extractionProgress(qint64 current, qint64 max) { + Helper::keepScreenOn(true); // display progress, in extracted files ui->progressBar->setVisible(true); ui->progressBar->setMaximum(max); @@ -857,6 +859,7 @@ void CModListView::downloadFinished(QStringList savedFiles, QStringList failedFi void CModListView::hideProgressBar() { + Helper::keepScreenOn(false); if(dlManager == nullptr) // it was not recreated meanwhile { ui->progressWidget->setVisible(false); From 0847485345d3d5031e45ce8ab4ef1e209d45e4df Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Mon, 1 Sep 2025 19:37:54 +0200 Subject: [PATCH 05/22] screensaver - ios support / android refactor --- .../java/eu/vcmi/vcmi/ActivityLauncher.java | 10 ++++++++ ios/CMakeLists.txt | 1 + ios/iOS_utils.h | 1 + ios/iOS_utils.mm | 6 +++++ launcher/helper.cpp | 23 ++++--------------- launcher/modManager/cmodlistview_moc.cpp | 2 +- 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java b/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java index 858da49b4..25ed0026f 100644 --- a/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java +++ b/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java @@ -6,6 +6,8 @@ import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.DocumentsContract; +import android.view.Window; +import android.view.WindowManager; import androidx.annotation.Nullable; @@ -55,6 +57,14 @@ public class ActivityLauncher extends org.qtproject.qt5.android.bindings.QtActiv startActivityForResult(intent, PICK_EXTERNAL_VCMI_DATA_TO_COPY); } + public void setScreensaverEnabled(boolean on) + { + if(on) + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + else + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + public void onLaunchGameBtnPressed() { startActivity(new Intent(ActivityLauncher.this, VcmiSDLActivity.class)); diff --git a/ios/CMakeLists.txt b/ios/CMakeLists.txt index c4e4ded93..905f6daa2 100644 --- a/ios/CMakeLists.txt +++ b/ios/CMakeLists.txt @@ -4,6 +4,7 @@ add_library(iOS_utils SHARED ) target_link_libraries(iOS_utils PRIVATE "-framework Foundation" + "-framework UIKit" ) target_include_directories(iOS_utils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/ios/iOS_utils.h b/ios/iOS_utils.h index a50bf18f1..66a9ac28c 100644 --- a/ios/iOS_utils.h +++ b/ios/iOS_utils.h @@ -27,5 +27,6 @@ const char *frameworksPath(); const char *bundleIdentifier(); bool isOsVersionAtLeast(unsigned int osMajorVersion); +void setScreensaverEnabled(bool isEnabled); } #pragma GCC visibility pop diff --git a/ios/iOS_utils.mm b/ios/iOS_utils.mm index 7f25a9fdc..f85363b15 100644 --- a/ios/iOS_utils.mm +++ b/ios/iOS_utils.mm @@ -11,6 +11,7 @@ #include "iOS_utils.h" #import +#import namespace { @@ -51,4 +52,9 @@ bool isOsVersionAtLeast(unsigned int osMajorVersion) { return NSProcessInfo.processInfo.operatingSystemVersion.majorVersion >= osMajorVersion; } + +void setScreensaverEnabled(bool isEnabled) +{ + UIApplication.sharedApplication.idleTimerDisabled = isEnabled ? NO : YES; +} } diff --git a/launcher/helper.cpp b/launcher/helper.cpp index 8d02c0989..c64a389ff 100644 --- a/launcher/helper.cpp +++ b/launcher/helper.cpp @@ -22,11 +22,11 @@ #ifdef VCMI_ANDROID #include #include -#include #endif #ifdef VCMI_IOS #include "ios/revealdirectoryinfiles.h" +#include "iOS_utils.h" #endif #ifdef VCMI_MOBILE @@ -120,27 +120,12 @@ MainWindow * getMainWindow() void keepScreenOn(bool on) { #if defined(VCMI_ANDROID) - // based on https://stackoverflow.com/a/38846485 QtAndroid::runOnAndroidThread([on] { - QAndroidJniObject activity = QtAndroid::androidActivity(); - if(activity.isValid()) - { - QAndroidJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;"); - - if(window.isValid()) - { - const int FLAG_KEEP_SCREEN_ON = 128; - if(on) - window.callMethod("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON); - else - window.callMethod("clearFlags", "(I)V", FLAG_KEEP_SCREEN_ON); - } - } - QAndroidJniEnvironment env; - if (env->ExceptionCheck()) - env->ExceptionClear(); + QtAndroid::androidActivity().callMethod("setScreensaverEnabled", "(Z)V", !on); }); +#elif defined(VCMI_IOS) + iOS_utils::setScreensaverEnabled(!on); #endif } } diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp index be27e60e8..75c9becce 100644 --- a/launcher/modManager/cmodlistview_moc.cpp +++ b/launcher/modManager/cmodlistview_moc.cpp @@ -793,12 +793,12 @@ void CModListView::downloadFile(QString file, QUrl url, QString description, qin ui->progressBar->setFormat(progressBarFormat); } + Helper::keepScreenOn(true); dlManager->downloadFile(url, file, sizeBytes); } void CModListView::downloadProgress(qint64 current, qint64 max) { - Helper::keepScreenOn(true); // display progress, in megabytes ui->progressBar->setVisible(true); ui->progressBar->setMaximum(max / (1024 * 1024)); From 48a683ae49bd38fc2f50021806eeaf755881e9bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zaremba?= Date: Tue, 2 Sep 2025 22:37:32 +0200 Subject: [PATCH 06/22] Fix incrementing PlayerConnectionID --- server/CVCMIServer.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/CVCMIServer.cpp b/server/CVCMIServer.cpp index 2c3ee13e7..d25b2be64 100644 --- a/server/CVCMIServer.cpp +++ b/server/CVCMIServer.cpp @@ -419,18 +419,20 @@ void CVCMIServer::clientConnected(std::shared_ptr c, std::vector si->mode = mode; } - logNetwork->info("Connection with client %d established. UUID: %s", static_cast(c->connectionID), c->uuid); + auto connID = static_cast(c->connectionID); + logNetwork->info("Connection with client %d established. UUID: %s", connID, c->uuid); + + PlayerConnectionID id = currentPlayerId; for(auto & name : names) { - logNetwork->info("Client %d player: %s", static_cast(c->connectionID), name); - PlayerConnectionID id = vstd::next(currentPlayerId, 1); + logNetwork->info("Client %d player: %s", connID, name); ClientPlayer cp; cp.connection = c->connectionID; cp.name = name; playerNames.try_emplace(id, cp); - announceTxt(boost::str(boost::format("%s (pid %d cid %d) joins the game") % name % static_cast(id) % static_cast(c->connectionID))); + announceTxt(boost::str(boost::format("%s (pid %d cid %d) joins the game") % name % static_cast(id) % connID)); //put new player in first slot with AI for(auto & elem : si->playerInfos) @@ -441,6 +443,7 @@ void CVCMIServer::clientConnected(std::shared_ptr c, std::vector break; } } + id = vstd::next(id, 1); } } From 0df1b1e9c1761326c2b7304fec1ff2eb13ff4ef0 Mon Sep 17 00:00:00 2001 From: George King <98261225+GeorgeK1ng@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:05:18 +0200 Subject: [PATCH 07/22] Update czech.json --- Mods/vcmi/Content/config/czech.json | 319 ++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) diff --git a/Mods/vcmi/Content/config/czech.json b/Mods/vcmi/Content/config/czech.json index ec022591f..fd188143a 100644 --- a/Mods/vcmi/Content/config/czech.json +++ b/Mods/vcmi/Content/config/czech.json @@ -97,7 +97,12 @@ "vcmi.randomMap.description.monster.normal" : "normální", "vcmi.randomMap.description.monster.strong" : "vysoká", + "vcmi.overlay.battery" : "Baterie", + "vcmi.overlay.charging" : "Nabíjení", + "vcmi.spellBook.search" : "Hledat", + "vcmi.spellBook.tab.hover" : "Kouzla: %s", + "vcmi.spellBook.tab.help" : "Otočit pro zobrazení %s kouzel", "vcmi.spellResearch.canNotAfford" : "Nemáš dostatek prostředků na výměnu kouzla {%SPELL1} za {%SPELL2}. Můžeš ho však odstranit a pokračovat ve výzkumu.", "vcmi.spellResearch.comeAgain" : "Výzkum už byl dnes proveden. Vrať se zítra.", @@ -257,6 +262,276 @@ "vcmi.settingsMainWindow.adventureTab.hover" : "Mapa světa", "vcmi.settingsMainWindow.adventureTab.help" : "Přepne na kartu nastavení mapy světa (mapa světa je sekce hry, ve které hráči mohou ovládat pohyb hrdinů).", + "vcmi.keyBindings.button.hover" : "Klávesové zkratky", + "vcmi.keyBindings.button.help" : "{Klávesové zkratky}\n\nOtevře nabídku pro zobrazení a úpravu klávesových zkratek", + "vcmi.keyBindings.editButton.help" : "Upravit klávesovou zkratku", + "vcmi.keyBindings.input" : "Změnit klávesovou zkratku pro {%s}.\n\nZadejte klávesu nebo jejich kombinaci. Klikněte mimo pro zrušení.", + "vcmi.keyBindings.inputSet" : "Klávesová zkratka pro {%s} bude změněna na {%s}.\n\nChcete ji přidat k existující, nebo nahradit?", + "vcmi.keyBindings.popup" : "Pro {%s} jsou nastaveny následující klávesy:\n\n", + "vcmi.keyBindings.reset" : "Obnovit", + "vcmi.keyBindings.reset.help" : "{Obnovit}\n\nObnoví výchozí klávesové zkratky", + "vcmi.keyBindings.resetConfirm" : "Chcete obnovit všechny klávesové zkratky na výchozí?", + "vcmi.keyBindings.group.keyboard" : "Klávesnice", + "vcmi.keyBindings.group.joystickAxes" : "Osy joysticku", + "vcmi.keyBindings.group.joystickButtons" : "Tlačítka joysticku", + "vcmi.keyBindings.keyBinding.adventureCastSpell": "Mapa: seslat kouzlo", + "vcmi.keyBindings.keyBinding.adventureDigGrail": "Mapa: kopat Grál", + "vcmi.keyBindings.keyBinding.adventureEndTurn": "Mapa: ukončit tah", + "vcmi.keyBindings.keyBinding.adventureExitWorldView": "Mapa: zavřít přehled království", + "vcmi.keyBindings.keyBinding.adventureFirstHero": "Mapa: první hrdina", + "vcmi.keyBindings.keyBinding.adventureFirstTown": "Mapa: první město", + "vcmi.keyBindings.keyBinding.adventureGameOptions": "Mapa: nastavení hry", + "vcmi.keyBindings.keyBinding.adventureKingdomOverview": "Mapa: přehled království", + "vcmi.keyBindings.keyBinding.adventureLoadGame": "Mapa: načíst hru", + "vcmi.keyBindings.keyBinding.adventureMainMenu": "Mapa: hlavní menu", + "vcmi.keyBindings.keyBinding.adventureMarketplace": "Mapa: tržnice", + "vcmi.keyBindings.keyBinding.adventureMoveHero": "Mapa: pohyb hrdiny", + "vcmi.keyBindings.keyBinding.adventureMoveHeroEE": "Mapa: pohyb hrdiny VV", + "vcmi.keyBindings.keyBinding.adventureMoveHeroNE": "Mapa: pohyb hrdiny SV", + "vcmi.keyBindings.keyBinding.adventureMoveHeroNN": "Mapa: pohyb hrdiny SS", + "vcmi.keyBindings.keyBinding.adventureMoveHeroNW": "Mapa: pohyb hrdiny SZ", + "vcmi.keyBindings.keyBinding.adventureMoveHeroSE": "Mapa: pohyb hrdiny JV", + "vcmi.keyBindings.keyBinding.adventureMoveHeroSS": "Mapa: pohyb hrdiny JJ", + "vcmi.keyBindings.keyBinding.adventureMoveHeroSW": "Mapa: pohyb hrdiny JZ", + "vcmi.keyBindings.keyBinding.adventureMoveHeroWW": "Mapa: pohyb hrdiny ZZ", + "vcmi.keyBindings.keyBinding.adventureNewGame": "Mapa: nová hra", + "vcmi.keyBindings.keyBinding.adventureNextHero": "Mapa: další hrdina", + "vcmi.keyBindings.keyBinding.adventureNextObject": "Mapa: další objekt", + "vcmi.keyBindings.keyBinding.adventureNextTown": "Mapa: další město", + "vcmi.keyBindings.keyBinding.adventureQuestLog": "Mapa: seznam úkolů", + "vcmi.keyBindings.keyBinding.adventureQuitGame": "Mapa: ukončit hru", + "vcmi.keyBindings.keyBinding.adventureReplayTurn": "Mapa: přehrát tah", + "vcmi.keyBindings.keyBinding.adventureRestartGame": "Mapa: restartovat hru", + "vcmi.keyBindings.keyBinding.adventureSaveGame": "Mapa: uložit hru", + "vcmi.keyBindings.keyBinding.adventureSetHeroAsleep": "Mapa: uspat hrdinu", + "vcmi.keyBindings.keyBinding.adventureSetHeroAwake": "Mapa: probudit hrdinu", + "vcmi.keyBindings.keyBinding.adventureThievesGuild": "Mapa: cech zlodějů", + "vcmi.keyBindings.keyBinding.adventureToggleGrid": "Mapa: zapnout/vypnout mřížku", + "vcmi.keyBindings.keyBinding.adventureToggleVisitable": "Mapa: zapnout/vypnout navštívitelné", + "vcmi.keyBindings.keyBinding.adventureToggleBlocked": "Mapa: zapnout/vypnout blokované", + "vcmi.keyBindings.keyBinding.adventureToggleMapLevel": "Mapa: přepnout úroveň mapy", + "vcmi.keyBindings.keyBinding.adventureToggleSleep": "Mapa: přepnout spánek", + "vcmi.keyBindings.keyBinding.adventureTrackHero": "Mapa: sledovat hrdinu", + "vcmi.keyBindings.keyBinding.adventureViewPuzzle": "Mapa: zobrazit skládačku", + "vcmi.keyBindings.keyBinding.adventureViewScenario": "Mapa: zobrazit scénář", + "vcmi.keyBindings.keyBinding.adventureViewSelected": "Mapa: zobrazit vybraný objekt", + "vcmi.keyBindings.keyBinding.adventureViewWorld": "Mapa: přehled světa", + "vcmi.keyBindings.keyBinding.adventureViewWorld1": "Mapa: přehled světa 1", + "vcmi.keyBindings.keyBinding.adventureViewWorld2": "Mapa: přehled světa 2", + "vcmi.keyBindings.keyBinding.adventureViewWorld4": "Mapa: přehled světa 4", + "vcmi.keyBindings.keyBinding.adventureVisitObject": "Mapa: navštívit objekt", + "vcmi.keyBindings.keyBinding.adventureZoomIn": "Mapa: přiblížit", + "vcmi.keyBindings.keyBinding.adventureZoomOut": "Mapa: oddálit", + "vcmi.keyBindings.keyBinding.adventureZoomReset": "Mapa: resetovat přiblížení", + "vcmi.keyBindings.keyBinding.adventureSearch": "Mapa: hledat", + "vcmi.keyBindings.keyBinding.adventureSearchContinue": "Mapa: pokračovat v hledání", + "vcmi.keyBindings.keyBinding.battleAutocombat": "Bitva: automatický boj", + "vcmi.keyBindings.keyBinding.battleAutocombatEnd": "Bitva: ukončit automatický boj", + "vcmi.keyBindings.keyBinding.battleCastSpell": "Bitva: seslat kouzlo", + "vcmi.keyBindings.keyBinding.battleConsoleDown": "Bitva: konzole dolů", + "vcmi.keyBindings.keyBinding.battleConsoleUp": "Bitva: konzole nahoru", + "vcmi.keyBindings.keyBinding.battleDefend": "Bitva: bránit se", + "vcmi.keyBindings.keyBinding.battleOpenActiveUnit": "Bitva: otevřít aktivní jednotku", + "vcmi.keyBindings.keyBinding.battleOpenHoveredUnit": "Bitva: otevřít jednotku pod kurzorem", + "vcmi.keyBindings.keyBinding.battleRetreat": "Bitva: útěk", + "vcmi.keyBindings.keyBinding.battleToggleQuickSpell": "Bitva: přepnout rychlé kouzlo", + "vcmi.keyBindings.keyBinding.battleSpellShortcut0": "Bitva: zkratka kouzla 0", + "vcmi.keyBindings.keyBinding.battleSpellShortcut1": "Bitva: zkratka kouzla 1", + "vcmi.keyBindings.keyBinding.battleSpellShortcut2": "Bitva: zkratka kouzla 2", + "vcmi.keyBindings.keyBinding.battleSpellShortcut3": "Bitva: zkratka kouzla 3", + "vcmi.keyBindings.keyBinding.battleSpellShortcut4": "Bitva: zkratka kouzla 4", + "vcmi.keyBindings.keyBinding.battleSpellShortcut5": "Bitva: zkratka kouzla 5", + "vcmi.keyBindings.keyBinding.battleSpellShortcut6": "Bitva: zkratka kouzla 6", + "vcmi.keyBindings.keyBinding.battleSpellShortcut7": "Bitva: zkratka kouzla 7", + "vcmi.keyBindings.keyBinding.battleSpellShortcut8": "Bitva: zkratka kouzla 8", + "vcmi.keyBindings.keyBinding.battleSpellShortcut9": "Bitva: zkratka kouzla 9", + "vcmi.keyBindings.keyBinding.battleSpellShortcut10": "Bitva: zkratka kouzla 10", + "vcmi.keyBindings.keyBinding.battleSpellShortcut11": "Bitva: zkratka kouzla 11", + "vcmi.keyBindings.keyBinding.battleSurrender": "Bitva: kapitulovat", + "vcmi.keyBindings.keyBinding.battleTacticsEnd": "Bitva: konec taktiky", + "vcmi.keyBindings.keyBinding.battleTacticsNext": "Bitva: další v taktice", + "vcmi.keyBindings.keyBinding.battleToggleHeroesStats": "Bitva: přepnout statistiky hrdinů", + "vcmi.keyBindings.keyBinding.battleToggleQueue": "Bitva: přepnout pořadí", + "vcmi.keyBindings.keyBinding.battleUseCreatureSpell": "Bitva: použít schopnost jednotky", + "vcmi.keyBindings.keyBinding.battleWait": "Bitva: čekat", + "vcmi.keyBindings.keyBinding.exchangeArmySwap": "Výměna: prohodit armády", + "vcmi.keyBindings.keyBinding.exchangeArmyToLeft": "Výměna: armáda doleva", + "vcmi.keyBindings.keyBinding.exchangeArmyToRight": "Výměna: armáda doprava", + "vcmi.keyBindings.keyBinding.exchangeArtifactsSwap": "Výměna: prohodit artefakty", + "vcmi.keyBindings.keyBinding.exchangeArtifactsToLeft": "Výměna: artefakty doleva", + "vcmi.keyBindings.keyBinding.exchangeArtifactsToRight": "Výměna: artefakty doprava", + "vcmi.keyBindings.keyBinding.exchangeBackpackLeft": "Výměna: batoh doleva", + "vcmi.keyBindings.keyBinding.exchangeBackpackRight": "Výměna: batoh doprava", + "vcmi.keyBindings.keyBinding.exchangeBackpackSwap": "Výměna: prohodit batoh", + "vcmi.keyBindings.keyBinding.exchangeBackpackToLeft": "Výměna: přesun batohu doleva", + "vcmi.keyBindings.keyBinding.exchangeBackpackToRight": "Výměna: přesun batohu doprava", + "vcmi.keyBindings.keyBinding.exchangeEquippedSwap": "Výměna: prohodit vybavení", + "vcmi.keyBindings.keyBinding.exchangeEquippedToLeft": "Výměna: vybavení doleva", + "vcmi.keyBindings.keyBinding.exchangeEquippedToRight": "Výměna: vybavení doprava", + "vcmi.keyBindings.keyBinding.gameActivateConsole": "Hra: otevřít konzoli", + "vcmi.keyBindings.keyBinding.globalAccept": "Obecné: potvrdit", + "vcmi.keyBindings.keyBinding.globalBackspace": "Obecné: Backspace", + "vcmi.keyBindings.keyBinding.globalCancel": "Obecné: zrušit", + "vcmi.keyBindings.keyBinding.globalFullscreen": "Obecné: celá obrazovka", + "vcmi.keyBindings.keyBinding.globalMoveFocus": "Obecné: přesunout zaměření", + "vcmi.keyBindings.keyBinding.globalOptions": "Obecné: možnosti", + "vcmi.keyBindings.keyBinding.globalReturn": "Obecné: Enter", + "vcmi.keyBindings.keyBinding.heroArmySplit": "Hrdina: rozdělit armádu", + "vcmi.keyBindings.keyBinding.heroBackpack": "Hrdina: batoh", + "vcmi.keyBindings.keyBinding.heroCommander": "Hrdina: velitel", + "vcmi.keyBindings.keyBinding.heroCostumeLoad0": "Hrdina: načíst předvolbu výbavy 0", + "vcmi.keyBindings.keyBinding.heroCostumeLoad1": "Hrdina: načíst předvolbu výbavy 1", + "vcmi.keyBindings.keyBinding.heroCostumeLoad2": "Hrdina: načíst předvolbu výbavy 2", + "vcmi.keyBindings.keyBinding.heroCostumeLoad3": "Hrdina: načíst předvolbu výbavy 3", + "vcmi.keyBindings.keyBinding.heroCostumeLoad4": "Hrdina: načíst předvolbu výbavy 4", + "vcmi.keyBindings.keyBinding.heroCostumeLoad5": "Hrdina: načíst předvolbu výbavy 5", + "vcmi.keyBindings.keyBinding.heroCostumeLoad6": "Hrdina: načíst předvolbu výbavy 6", + "vcmi.keyBindings.keyBinding.heroCostumeLoad7": "Hrdina: načíst předvolbu výbavy 7", + "vcmi.keyBindings.keyBinding.heroCostumeLoad8": "Hrdina: načíst předvolbu výbavy 8", + "vcmi.keyBindings.keyBinding.heroCostumeLoad9": "Hrdina: načíst předvolbu výbavy 9", + "vcmi.keyBindings.keyBinding.heroCostumeSave0": "Hrdina: uložit předvolbu výbavy 0", + "vcmi.keyBindings.keyBinding.heroCostumeSave1": "Hrdina: uložit předvolbu výbavy 1", + "vcmi.keyBindings.keyBinding.heroCostumeSave2": "Hrdina: uložit předvolbu výbavy 2", + "vcmi.keyBindings.keyBinding.heroCostumeSave3": "Hrdina: uložit předvolbu výbavy 3", + "vcmi.keyBindings.keyBinding.heroCostumeSave4": "Hrdina: uložit předvolbu výbavy 4", + "vcmi.keyBindings.keyBinding.heroCostumeSave5": "Hrdina: uložit předvolbu výbavy 5", + "vcmi.keyBindings.keyBinding.heroCostumeSave6": "Hrdina: uložit předvolbu výbavy 6", + "vcmi.keyBindings.keyBinding.heroCostumeSave7": "Hrdina: uložit předvolbu výbavy 7", + "vcmi.keyBindings.keyBinding.heroCostumeSave8": "Hrdina: uložit předvolbu výbavy 8", + "vcmi.keyBindings.keyBinding.heroCostumeSave9": "Hrdina: uložit předvolbu výbavy 9", + "vcmi.keyBindings.keyBinding.heroDismiss": "Hrdina: propustit", + "vcmi.keyBindings.keyBinding.heroLooseFormation": "Hrdina: volná formace", + "vcmi.keyBindings.keyBinding.heroTightFormation": "Hrdina: sevřená formace", + "vcmi.keyBindings.keyBinding.heroToggleTactics": "Hrdina: přepnout taktiku" + "vcmi.keyBindings.keyBinding.highScoresCampaigns": "Žebříčky: kampaně", + "vcmi.keyBindings.keyBinding.highScoresReset": "Žebříčky: reset", + "vcmi.keyBindings.keyBinding.highScoresStatistics": "Žebříčky: statistiky", + "vcmi.keyBindings.keyBinding.highScoresScenarios": "Žebříčky: scénáře", + "vcmi.keyBindings.keyBinding.kingdomHeroesTab": "Království: karta hrdinů", + "vcmi.keyBindings.keyBinding.kingdomTownsTab": "Království: karta měst", + "vcmi.keyBindings.keyBinding.lobbyAdditionalOptions": "Lobby: další volby", + "vcmi.keyBindings.keyBinding.lobbyBeginCampaign": "Lobby: začít kampaň", + "vcmi.keyBindings.keyBinding.lobbyBeginStandardGame": "Lobby: začít hru", + "vcmi.keyBindings.keyBinding.lobbyExtraOptions": "Lobby: rozšířené volby", + "vcmi.keyBindings.keyBinding.lobbyFlipCoin": "Lobby: hod mincí", + "vcmi.keyBindings.keyBinding.lobbyInvitePlayers": "Lobby: pozvat hráče", + "vcmi.keyBindings.keyBinding.lobbyLoadGame": "Lobby: načíst hru", + "vcmi.keyBindings.keyBinding.lobbyRandomMap": "Lobby: náhodná mapa", + "vcmi.keyBindings.keyBinding.lobbyRandomTown": "Lobby: náhodné město", + "vcmi.keyBindings.keyBinding.lobbyRandomTownVs": "Lobby: náhodné město vs", + "vcmi.keyBindings.keyBinding.lobbyHandicap": "Lobby: postih", + "vcmi.keyBindings.keyBinding.lobbyReplayVideo": "Lobby: přehrát video", + "vcmi.keyBindings.keyBinding.lobbySaveGame": "Lobby: uložit hru", + "vcmi.keyBindings.keyBinding.lobbySelectScenario": "Lobby: vybrat scénář", + "vcmi.keyBindings.keyBinding.lobbyToggleChat": "Lobby: přepnout chat", + "vcmi.keyBindings.keyBinding.lobbyTurnOptions": "Lobby: volby tahu", + "vcmi.keyBindings.keyBinding.mainMenuBack": "Hlavní menu: zpět", + "vcmi.keyBindings.keyBinding.mainMenuCampaign": "Hlavní menu: kampaň", + "vcmi.keyBindings.keyBinding.mainMenuCampaignAb": "Hlavní menu: kampaň AB", + "vcmi.keyBindings.keyBinding.mainMenuCampaignCustom": "Hlavní menu: vlastní kampaň", + "vcmi.keyBindings.keyBinding.mainMenuCampaignRoe": "Hlavní menu: kampaň RoE", + "vcmi.keyBindings.keyBinding.mainMenuCampaignSod": "Hlavní menu: kampaň SoD", + "vcmi.keyBindings.keyBinding.mainMenuCampaignChr": "Hlavní menu: kampaň Kroniky", + "vcmi.keyBindings.keyBinding.mainMenuCampaignHota": "Hlavní menu: kampaň HotA", + "vcmi.keyBindings.keyBinding.mainMenuCampaignWog": "Hlavní menu: kampaň WoG", + "vcmi.keyBindings.keyBinding.mainMenuCampaignVCMI": "Hlavní menu: kampaň VCMI", + "vcmi.keyBindings.keyBinding.mainMenuCredits": "Hlavní menu: autoři", + "vcmi.keyBindings.keyBinding.mainMenuHighScores": "Hlavní menu: žebříčky", + "vcmi.keyBindings.keyBinding.mainMenuHostGame": "Hlavní menu: hostovat hru", + "vcmi.keyBindings.keyBinding.mainMenuHotseat": "Hlavní menu: horké křeslo", + "vcmi.keyBindings.keyBinding.mainMenuJoinGame": "Hlavní menu: připojit se", + "vcmi.keyBindings.keyBinding.mainMenuLoadGame": "Hlavní menu: načíst hru", + "vcmi.keyBindings.keyBinding.mainMenuLobby": "Hlavní menu: lobby", + "vcmi.keyBindings.keyBinding.mainMenuMultiplayer": "Hlavní menu: hra více hráčů", + "vcmi.keyBindings.keyBinding.mainMenuNewGame": "Hlavní menu: nová hra", + "vcmi.keyBindings.keyBinding.mainMenuQuit": "Hlavní menu: ukončit", + "vcmi.keyBindings.keyBinding.mainMenuSingleplayer": "Hlavní menu: hra jednoho hráče", + "vcmi.keyBindings.keyBinding.mainMenuTutorial": "Hlavní menu: výuka", + "vcmi.keyBindings.keyBinding.mapsSizeAll": "Mapy: všechny velikosti", + "vcmi.keyBindings.keyBinding.mapsSizeL": "Mapy: velikost L", + "vcmi.keyBindings.keyBinding.mapsSizeM": "Mapy: velikost M", + "vcmi.keyBindings.keyBinding.mapsSizeS": "Mapy: velikost S", + "vcmi.keyBindings.keyBinding.mapsSizeXl": "Mapy: velikost XL", + "vcmi.keyBindings.keyBinding.mapsSortChangedate": "Mapy: seřadit podle data změny", + "vcmi.keyBindings.keyBinding.mapsSortDefeat": "Mapy: seřadit podle porážky", + "vcmi.keyBindings.keyBinding.mapsSortFormat": "Mapy: seřadit podle formátu", + "vcmi.keyBindings.keyBinding.mapsSortMaps": "Mapy: seřadit podle map", + "vcmi.keyBindings.keyBinding.mapsSortName": "Mapy: seřadit podle názvu", + "vcmi.keyBindings.keyBinding.mapsSortPlayers": "Mapy: seřadit podle hráčů", + "vcmi.keyBindings.keyBinding.mapsSortSize": "Mapy: seřadit podle velikosti", + "vcmi.keyBindings.keyBinding.mapsSortVictory": "Mapy: seřadit podle vítězství", + "vcmi.keyBindings.keyBinding.marketArtifactExperience": "Trh: artefakty za zkušenosti", + "vcmi.keyBindings.keyBinding.marketArtifactResource": "Trh: artefakty za suroviny", + "vcmi.keyBindings.keyBinding.marketCreatureExperience": "Trh: jednotky za zkušenosti", + "vcmi.keyBindings.keyBinding.marketCreatureResource": "Trh: jednotky za suroviny", + "vcmi.keyBindings.keyBinding.marketDeal": "Trh: obchod", + "vcmi.keyBindings.keyBinding.marketMaxAmount": "Trh: maximální množství", + "vcmi.keyBindings.keyBinding.marketResourceArtifact": "Trh: suroviny za artefakty", + "vcmi.keyBindings.keyBinding.marketResourcePlayer": "Trh: suroviny od hráče", + "vcmi.keyBindings.keyBinding.marketResourceResource": "Trh: směna surovin", + "vcmi.keyBindings.keyBinding.marketSacrificeAll": "Trh: obětovat vše", + "vcmi.keyBindings.keyBinding.marketSacrificeBackpack": "Trh: obětovat batoh", + "vcmi.keyBindings.keyBinding.moveDown": "Pohyb: dolů", + "vcmi.keyBindings.keyBinding.moveFirst": "Pohyb: první", + "vcmi.keyBindings.keyBinding.moveLast": "Pohyb: poslední", + "vcmi.keyBindings.keyBinding.moveLeft": "Pohyb: doleva", + "vcmi.keyBindings.keyBinding.movePageDown": "Pohyb: stránka dolů", + "vcmi.keyBindings.keyBinding.movePageUp": "Pohyb: stránka nahoru", + "vcmi.keyBindings.keyBinding.moveRight": "Pohyb: doprava", + "vcmi.keyBindings.keyBinding.moveUp": "Pohyb: nahoru", + "vcmi.keyBindings.keyBinding.recruitmentMax": "Nábor: maximum", + "vcmi.keyBindings.keyBinding.recruitmentMin": "Nábor: minimum", + "vcmi.keyBindings.keyBinding.recruitmentSwitchLevel": "Nábor: změnit úroveň", + "vcmi.keyBindings.keyBinding.recruitmentUpgrade": "Nábor: vylepšit", + "vcmi.keyBindings.keyBinding.recruitmentUpgradeAll": "Nábor: vylepšit vše", + "vcmi.keyBindings.keyBinding.selectIndex1": "Výběr: index 1", + "vcmi.keyBindings.keyBinding.selectIndex2": "Výběr: index 2", + "vcmi.keyBindings.keyBinding.selectIndex3": "Výběr: index 3", + "vcmi.keyBindings.keyBinding.selectIndex4": "Výběr: index 4", + "vcmi.keyBindings.keyBinding.selectIndex5": "Výběr: index 5", + "vcmi.keyBindings.keyBinding.selectIndex6": "Výběr: index 6", + "vcmi.keyBindings.keyBinding.selectIndex7": "Výběr: index 7", + "vcmi.keyBindings.keyBinding.selectIndex8": "Výběr: index 8", + "vcmi.keyBindings.keyBinding.settingsLoadGame": "Nastavení: načíst hru", + "vcmi.keyBindings.keyBinding.settingsNewGame": "Nastavení: nová hra", + "vcmi.keyBindings.keyBinding.settingsQuitGame": "Nastavení: ukončit hru", + "vcmi.keyBindings.keyBinding.settingsRestartGame": "Nastavení: restartovat hru", + "vcmi.keyBindings.keyBinding.settingsSaveGame": "Nastavení: uložit hru", + "vcmi.keyBindings.keyBinding.settingsToMainMenu": "Nastavení: do hlavního menu", + "vcmi.keyBindings.keyBinding.spectateSkipBattle": "Divák: přeskočit bitvu", + "vcmi.keyBindings.keyBinding.spectateSkipBattleResult": "Divák: přeskočit výsledek bitvy", + "vcmi.keyBindings.keyBinding.spectateTrackHero": "Divák: sledovat hrdinu", + "vcmi.keyBindings.keyBinding.spellbookTabAdventure": "Kniha kouzel: karta dobrodružství", + "vcmi.keyBindings.keyBinding.spellbookTabCombat": "Kniha kouzel: karta boje", + "vcmi.keyBindings.keyBinding.spellbookSearchFocus": "Kniha kouzel: hledání", + "vcmi.keyBindings.keyBinding.townOpenFort": "Město: pevnost", + "vcmi.keyBindings.keyBinding.townOpenGarrisonedHero": "Město: hrdina v posádce", + "vcmi.keyBindings.keyBinding.townOpenHall": "Město: radnice", + "vcmi.keyBindings.keyBinding.townOpenHero": "Město: hrdina", + "vcmi.keyBindings.keyBinding.townOpenHeroExchange": "Město: výměna hrdinů", + "vcmi.keyBindings.keyBinding.townOpenMageGuild": "Město: věž kouzel", + "vcmi.keyBindings.keyBinding.townOpenMarket": "Město: tržnice", + "vcmi.keyBindings.keyBinding.townOpenRecruitment": "Město: nábor", + "vcmi.keyBindings.keyBinding.townOpenTavern": "Město: putyka", + "vcmi.keyBindings.keyBinding.townOpenThievesGuild": "Město: cech zlodějů", + "vcmi.keyBindings.keyBinding.townOpenVisitingHero": "Město: hrdina na návštěvě", + "vcmi.keyBindings.keyBinding.townSwapArmies": "Město: prohodit armády", + "vcmi.keyBindings.keyBinding.listHeroUp": "Seznam: hrdina nahoru", + "vcmi.keyBindings.keyBinding.listHeroDown": "Seznam: hrdina dolů", + "vcmi.keyBindings.keyBinding.listHeroTop": "Seznam: první hrdina", + "vcmi.keyBindings.keyBinding.listHeroBottom": "Seznam: poslední hrdina", + "vcmi.keyBindings.keyBinding.listHeroDismiss": "Seznam: propustit hrdinu", + "vcmi.keyBindings.keyBinding.listTownUp": "Seznam: město nahoru", + "vcmi.keyBindings.keyBinding.listTownDown": "Seznam: město dolů", + "vcmi.keyBindings.keyBinding.listTownTop": "Seznam: první město", + "vcmi.keyBindings.keyBinding.listTownBottom": "Seznam: poslední město", + "vcmi.keyBindings.keyBinding.mouseCursorX" : "Myš: kurzor X", + "vcmi.keyBindings.keyBinding.mouseCursorY" : "Myš: kurzor Y", + "vcmi.keyBindings.keyBinding.mouseSwipeX" : "Myš: gesto X", + "vcmi.keyBindings.keyBinding.mouseSwipeY" : "Myš: gesto Y", + "vcmi.keyBindings.keyBinding.mouseClickLeft": "Myš: levé tlačítko", + "vcmi.keyBindings.keyBinding.mouseClickRight": "Myš: pravé tlačítko", + "vcmi.systemOptions.videoGroup" : "Nastavení obrazu", "vcmi.systemOptions.audioGroup" : "Nastavení zvuku", "vcmi.systemOptions.otherGroup" : "Ostatní nastavení", // unused right now @@ -311,6 +586,8 @@ "vcmi.systemOptions.longTouchMenu.hover" : "Vybrat dobu dlouhého podržení", "vcmi.systemOptions.longTouchMenu.help" : "Změnit dobu dlouhého podržení.", "vcmi.systemOptions.longTouchMenu.entry" : "%d milisekund", + "vcmi.systemOptions.performanceOverlayButton.hover" : "Zobrazit stavové okno", + "vcmi.systemOptions.performanceOverlayButton.help" : "{Zobrazit stavové okno}\n\nPřepíná zobrazení stavového okna s údaji, jako jsou snímky za sekundu, čas a stav baterie (pokud je dostupný) v rohu herního okna.", "vcmi.systemOptions.hapticFeedbackButton.hover" : "Vibrace", "vcmi.systemOptions.hapticFeedbackButton.help" : "{Vibrace}\n\nPřepnout stav vibrací při dotykovém ovládání.", "vcmi.systemOptions.enableUiEnhancementsButton.hover" : "Vylepšení rozhraní", @@ -415,6 +692,36 @@ "vcmi.battleResultsWindow.spellDurationRemaining.1" : "Zbývající trvání: %d kolo boje", "vcmi.battleResultsWindow.spellDurationRemaining.2" : "Zbývající trvání: %d kola boje", + "vcmi.credits.website" : "Internetové stránky", + "vcmi.credits.vcmi" : "VCMI", + "vcmi.credits.heroes" : "Heroes III", + "vcmi.credits.idea" : "Nápad", + "vcmi.credits.developing" : "Vývoj", + "vcmi.credits.testing" : "Testování", + "core.credits.createdBy" : "Vytvořili", + "core.credits.executiveProducer" : "Výkonný producent", + "core.credits.producer" : "Producent", + "core.credits.director" : "Režisér", + "core.credits.designers" : "Designéři", + "core.credits.leadProgrammers" : "Vedoucí programátoři", + "core.credits.programmers" : "Programátoři", + "core.credits.installerProgrammer" : "Programátor instalátoru", + "core.credits.leadArtists" : "Vedoucí výtvarníci", + "core.credits.artists" : "Výtvarníci", + "core.credits.assetCoordinator" : "Koordinátor prostředků", + "core.credits.levelDesigners" : "Návrháři úrovní", + "core.credits.musicProducer" : "Hudební producent", + "core.credits.townThemes" : "Motivy měst", + "core.credits.music" : "Hudba", + "core.credits.soundDesign" : "Zvukový design", + "core.credits.voiceProduction" : "Produkce dabingu", + "core.credits.voiceTalent" : "Hlasy", + "core.credits.leadTester" : "Vedoucí tester", + "core.credits.seniorTester" : "Hlavní tester", + "core.credits.testers" : "Testeři", + "core.credits.specialThanks" : "Zvláštní poděkování", + "core.credits.visitUsOnTheWeb" : "Navštivte nás na internetu", + "vcmi.tutorialWindow.title" : "Úvod ovládání dotykem", "vcmi.tutorialWindow.decription.RightClick" : "Klepněte a držte prvek, na který byste chtěli použít pravé tlačítko myši. Klepněte na volnou oblast pro zavření.", "vcmi.tutorialWindow.decription.MapPanning" : "Klepněte a držte jedním prstem pro posouvání mapy.", @@ -458,6 +765,7 @@ "vcmi.heroWindow.sortBackpackByClass.hover" : "Seřadit podle třídy", "vcmi.heroWindow.sortBackpackByClass.help" : "{Seřadit podle třídy}\n\nSeřadí artefakty v batohu podle třídy artefaktu. Poklad, Menší, Větší, Relikvie.", "vcmi.heroWindow.fusingArtifact.fusing" : "Máte všechny potřebné části k vytvoření %s. Chcete provést sloučení? {Při sloučení budou použity všechny části.}", + "vcmi.heroWindow.lockedartifact.hover" : "Obsazeno artefaktem %s", "vcmi.tavernWindow.inviteHero" : "Pozvat hrdinu", @@ -644,6 +952,11 @@ "creatures.core.marksman.bonus.extraAttack" : "{Střílí dvakrát}\nTato jednotka může vystřelit dvakrát za kolo", "creatures.core.azureDragon.bonus.fearful" : "{Strach}\nVyvolává strach u nepřátelské jednotky", "creatures.core.azureDragon.bonus.fearless" : "{Nebojácnost}\nImunní vůči schopnosti Strach", + "creatures.core.halfling.bonus.lucky" : "{Štěstí}\nŠtěstí hobita nemůže být sníženo pod +1", + "creatures.core.nomad.bonus.sandWalker" : "{Chodec po písku}\nHrdina ignoruje postih za pohyb v písku", + "creatures.core.rogue.bonus.visionsMonsters" : "{Vize jednotek}\nHrdina vidí podrobné informace o neutrálních jednotkách", + "creatures.core.rogue.bonus.visionsHeroes" : "{Vize hrdinů}\nHrdina vidí podrobné informace o nepřátelských hrdinech", + "creatures.core.rogue.bonus.visionsTowns" : "{Vize měst}\nHrdina vidí podrobné informace o nepřátelských městech", "core.bonus.ADDITIONAL_ATTACK.description" : "{Dvojitý útok}\nÚtočí dvakrát", // TODO: alternative descriptions for melee/ranged effect range "core.bonus.ADDITIONAL_RETALIATION.description" : "{Další odvetné útoky}\nMůže odvetně zaútočit ${val} krát navíc", @@ -728,6 +1041,7 @@ "core.bonus.SUMMON_GUARDIANS.description" : "{Přivolání ochránců}\nNa začátku bitvy přivolá ${subtype.creature} (${val}%)", "core.bonus.THREE_HEADED_ATTACK.description" : "{Tříhlavý útok}\nÚtočí na tři sousední jednotky", "core.bonus.TRANSMUTATION.description" : "{Transmutace}\n${val}% šance na přeměnu napadené jednotky na jiný typ", + "core.bonus.TRANSMUTATION_IMMUNITY.description" : "{Transmutační imunita}\nTato jednotka nemůže být přeměněna na jiný typ nepřátelským útokem", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Dech}\nÚtok dechem (dosah 2 polí)", "core.bonus.UNDEAD.description" : "{Nemrtvý}\nJednotka je nemrtvá", "core.bonus.UNLIMITED_RETALIATIONS.description" : "{Neomezené odvetné útoky}\nMůže provést neomezený počet odvetných útoků", @@ -765,4 +1079,9 @@ "spell.core.thunderbolt.description.none" : "{Úder blesku}\n\nPři útoku má jednotka 20% šanci vyvolat blesk ještě před nepřátelským protiútokem. Blesk způsobí poškození rovnající se desetinásobku počtu útočících hromových ptáků.", "spell.core.dispelHelpful.description.none" : "{Ruší kladná kouzla}\n\nOdstraní všechny pozitivní kouzelné efekty z cílové jednotky.", "spell.core.acidBreath.description.none" : "{Kyselina}\n\nDech sníží obranu cílové jednotky o 3 body a má 20% šanci způsobit dodatečné poškození ve výši 25 bodů za každou útočící jednotku." + + "spellSchool.core.air.name" : "Vdušných", + "spellSchool.core.earth.name" : "Zemských", + "spellSchool.core.fire.name" : "Ohnivých", + "spellSchool.core.water.name" : "Vodních" } From d6aa08b39c83ff539436f3e9f6415d4bff29edce Mon Sep 17 00:00:00 2001 From: George King <98261225+GeorgeK1ng@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:06:17 +0200 Subject: [PATCH 08/22] Update czech.json --- Mods/vcmi/Content/config/czech.json | 510 ++++++++++++++-------------- 1 file changed, 255 insertions(+), 255 deletions(-) diff --git a/Mods/vcmi/Content/config/czech.json b/Mods/vcmi/Content/config/czech.json index fd188143a..d18d96e08 100644 --- a/Mods/vcmi/Content/config/czech.json +++ b/Mods/vcmi/Content/config/czech.json @@ -274,263 +274,263 @@ "vcmi.keyBindings.group.keyboard" : "Klávesnice", "vcmi.keyBindings.group.joystickAxes" : "Osy joysticku", "vcmi.keyBindings.group.joystickButtons" : "Tlačítka joysticku", - "vcmi.keyBindings.keyBinding.adventureCastSpell": "Mapa: seslat kouzlo", - "vcmi.keyBindings.keyBinding.adventureDigGrail": "Mapa: kopat Grál", - "vcmi.keyBindings.keyBinding.adventureEndTurn": "Mapa: ukončit tah", - "vcmi.keyBindings.keyBinding.adventureExitWorldView": "Mapa: zavřít přehled království", - "vcmi.keyBindings.keyBinding.adventureFirstHero": "Mapa: první hrdina", - "vcmi.keyBindings.keyBinding.adventureFirstTown": "Mapa: první město", - "vcmi.keyBindings.keyBinding.adventureGameOptions": "Mapa: nastavení hry", - "vcmi.keyBindings.keyBinding.adventureKingdomOverview": "Mapa: přehled království", - "vcmi.keyBindings.keyBinding.adventureLoadGame": "Mapa: načíst hru", - "vcmi.keyBindings.keyBinding.adventureMainMenu": "Mapa: hlavní menu", - "vcmi.keyBindings.keyBinding.adventureMarketplace": "Mapa: tržnice", - "vcmi.keyBindings.keyBinding.adventureMoveHero": "Mapa: pohyb hrdiny", - "vcmi.keyBindings.keyBinding.adventureMoveHeroEE": "Mapa: pohyb hrdiny VV", - "vcmi.keyBindings.keyBinding.adventureMoveHeroNE": "Mapa: pohyb hrdiny SV", - "vcmi.keyBindings.keyBinding.adventureMoveHeroNN": "Mapa: pohyb hrdiny SS", - "vcmi.keyBindings.keyBinding.adventureMoveHeroNW": "Mapa: pohyb hrdiny SZ", - "vcmi.keyBindings.keyBinding.adventureMoveHeroSE": "Mapa: pohyb hrdiny JV", - "vcmi.keyBindings.keyBinding.adventureMoveHeroSS": "Mapa: pohyb hrdiny JJ", - "vcmi.keyBindings.keyBinding.adventureMoveHeroSW": "Mapa: pohyb hrdiny JZ", - "vcmi.keyBindings.keyBinding.adventureMoveHeroWW": "Mapa: pohyb hrdiny ZZ", - "vcmi.keyBindings.keyBinding.adventureNewGame": "Mapa: nová hra", - "vcmi.keyBindings.keyBinding.adventureNextHero": "Mapa: další hrdina", - "vcmi.keyBindings.keyBinding.adventureNextObject": "Mapa: další objekt", - "vcmi.keyBindings.keyBinding.adventureNextTown": "Mapa: další město", - "vcmi.keyBindings.keyBinding.adventureQuestLog": "Mapa: seznam úkolů", - "vcmi.keyBindings.keyBinding.adventureQuitGame": "Mapa: ukončit hru", - "vcmi.keyBindings.keyBinding.adventureReplayTurn": "Mapa: přehrát tah", - "vcmi.keyBindings.keyBinding.adventureRestartGame": "Mapa: restartovat hru", - "vcmi.keyBindings.keyBinding.adventureSaveGame": "Mapa: uložit hru", - "vcmi.keyBindings.keyBinding.adventureSetHeroAsleep": "Mapa: uspat hrdinu", - "vcmi.keyBindings.keyBinding.adventureSetHeroAwake": "Mapa: probudit hrdinu", - "vcmi.keyBindings.keyBinding.adventureThievesGuild": "Mapa: cech zlodějů", - "vcmi.keyBindings.keyBinding.adventureToggleGrid": "Mapa: zapnout/vypnout mřížku", - "vcmi.keyBindings.keyBinding.adventureToggleVisitable": "Mapa: zapnout/vypnout navštívitelné", - "vcmi.keyBindings.keyBinding.adventureToggleBlocked": "Mapa: zapnout/vypnout blokované", - "vcmi.keyBindings.keyBinding.adventureToggleMapLevel": "Mapa: přepnout úroveň mapy", - "vcmi.keyBindings.keyBinding.adventureToggleSleep": "Mapa: přepnout spánek", - "vcmi.keyBindings.keyBinding.adventureTrackHero": "Mapa: sledovat hrdinu", - "vcmi.keyBindings.keyBinding.adventureViewPuzzle": "Mapa: zobrazit skládačku", - "vcmi.keyBindings.keyBinding.adventureViewScenario": "Mapa: zobrazit scénář", - "vcmi.keyBindings.keyBinding.adventureViewSelected": "Mapa: zobrazit vybraný objekt", - "vcmi.keyBindings.keyBinding.adventureViewWorld": "Mapa: přehled světa", - "vcmi.keyBindings.keyBinding.adventureViewWorld1": "Mapa: přehled světa 1", - "vcmi.keyBindings.keyBinding.adventureViewWorld2": "Mapa: přehled světa 2", - "vcmi.keyBindings.keyBinding.adventureViewWorld4": "Mapa: přehled světa 4", - "vcmi.keyBindings.keyBinding.adventureVisitObject": "Mapa: navštívit objekt", - "vcmi.keyBindings.keyBinding.adventureZoomIn": "Mapa: přiblížit", - "vcmi.keyBindings.keyBinding.adventureZoomOut": "Mapa: oddálit", - "vcmi.keyBindings.keyBinding.adventureZoomReset": "Mapa: resetovat přiblížení", - "vcmi.keyBindings.keyBinding.adventureSearch": "Mapa: hledat", - "vcmi.keyBindings.keyBinding.adventureSearchContinue": "Mapa: pokračovat v hledání", - "vcmi.keyBindings.keyBinding.battleAutocombat": "Bitva: automatický boj", - "vcmi.keyBindings.keyBinding.battleAutocombatEnd": "Bitva: ukončit automatický boj", - "vcmi.keyBindings.keyBinding.battleCastSpell": "Bitva: seslat kouzlo", - "vcmi.keyBindings.keyBinding.battleConsoleDown": "Bitva: konzole dolů", - "vcmi.keyBindings.keyBinding.battleConsoleUp": "Bitva: konzole nahoru", - "vcmi.keyBindings.keyBinding.battleDefend": "Bitva: bránit se", - "vcmi.keyBindings.keyBinding.battleOpenActiveUnit": "Bitva: otevřít aktivní jednotku", - "vcmi.keyBindings.keyBinding.battleOpenHoveredUnit": "Bitva: otevřít jednotku pod kurzorem", - "vcmi.keyBindings.keyBinding.battleRetreat": "Bitva: útěk", - "vcmi.keyBindings.keyBinding.battleToggleQuickSpell": "Bitva: přepnout rychlé kouzlo", - "vcmi.keyBindings.keyBinding.battleSpellShortcut0": "Bitva: zkratka kouzla 0", - "vcmi.keyBindings.keyBinding.battleSpellShortcut1": "Bitva: zkratka kouzla 1", - "vcmi.keyBindings.keyBinding.battleSpellShortcut2": "Bitva: zkratka kouzla 2", - "vcmi.keyBindings.keyBinding.battleSpellShortcut3": "Bitva: zkratka kouzla 3", - "vcmi.keyBindings.keyBinding.battleSpellShortcut4": "Bitva: zkratka kouzla 4", - "vcmi.keyBindings.keyBinding.battleSpellShortcut5": "Bitva: zkratka kouzla 5", - "vcmi.keyBindings.keyBinding.battleSpellShortcut6": "Bitva: zkratka kouzla 6", - "vcmi.keyBindings.keyBinding.battleSpellShortcut7": "Bitva: zkratka kouzla 7", - "vcmi.keyBindings.keyBinding.battleSpellShortcut8": "Bitva: zkratka kouzla 8", - "vcmi.keyBindings.keyBinding.battleSpellShortcut9": "Bitva: zkratka kouzla 9", - "vcmi.keyBindings.keyBinding.battleSpellShortcut10": "Bitva: zkratka kouzla 10", - "vcmi.keyBindings.keyBinding.battleSpellShortcut11": "Bitva: zkratka kouzla 11", - "vcmi.keyBindings.keyBinding.battleSurrender": "Bitva: kapitulovat", - "vcmi.keyBindings.keyBinding.battleTacticsEnd": "Bitva: konec taktiky", - "vcmi.keyBindings.keyBinding.battleTacticsNext": "Bitva: další v taktice", - "vcmi.keyBindings.keyBinding.battleToggleHeroesStats": "Bitva: přepnout statistiky hrdinů", - "vcmi.keyBindings.keyBinding.battleToggleQueue": "Bitva: přepnout pořadí", - "vcmi.keyBindings.keyBinding.battleUseCreatureSpell": "Bitva: použít schopnost jednotky", - "vcmi.keyBindings.keyBinding.battleWait": "Bitva: čekat", - "vcmi.keyBindings.keyBinding.exchangeArmySwap": "Výměna: prohodit armády", - "vcmi.keyBindings.keyBinding.exchangeArmyToLeft": "Výměna: armáda doleva", - "vcmi.keyBindings.keyBinding.exchangeArmyToRight": "Výměna: armáda doprava", - "vcmi.keyBindings.keyBinding.exchangeArtifactsSwap": "Výměna: prohodit artefakty", - "vcmi.keyBindings.keyBinding.exchangeArtifactsToLeft": "Výměna: artefakty doleva", - "vcmi.keyBindings.keyBinding.exchangeArtifactsToRight": "Výměna: artefakty doprava", - "vcmi.keyBindings.keyBinding.exchangeBackpackLeft": "Výměna: batoh doleva", - "vcmi.keyBindings.keyBinding.exchangeBackpackRight": "Výměna: batoh doprava", - "vcmi.keyBindings.keyBinding.exchangeBackpackSwap": "Výměna: prohodit batoh", - "vcmi.keyBindings.keyBinding.exchangeBackpackToLeft": "Výměna: přesun batohu doleva", - "vcmi.keyBindings.keyBinding.exchangeBackpackToRight": "Výměna: přesun batohu doprava", - "vcmi.keyBindings.keyBinding.exchangeEquippedSwap": "Výměna: prohodit vybavení", - "vcmi.keyBindings.keyBinding.exchangeEquippedToLeft": "Výměna: vybavení doleva", - "vcmi.keyBindings.keyBinding.exchangeEquippedToRight": "Výměna: vybavení doprava", - "vcmi.keyBindings.keyBinding.gameActivateConsole": "Hra: otevřít konzoli", - "vcmi.keyBindings.keyBinding.globalAccept": "Obecné: potvrdit", - "vcmi.keyBindings.keyBinding.globalBackspace": "Obecné: Backspace", - "vcmi.keyBindings.keyBinding.globalCancel": "Obecné: zrušit", - "vcmi.keyBindings.keyBinding.globalFullscreen": "Obecné: celá obrazovka", - "vcmi.keyBindings.keyBinding.globalMoveFocus": "Obecné: přesunout zaměření", - "vcmi.keyBindings.keyBinding.globalOptions": "Obecné: možnosti", - "vcmi.keyBindings.keyBinding.globalReturn": "Obecné: Enter", - "vcmi.keyBindings.keyBinding.heroArmySplit": "Hrdina: rozdělit armádu", - "vcmi.keyBindings.keyBinding.heroBackpack": "Hrdina: batoh", - "vcmi.keyBindings.keyBinding.heroCommander": "Hrdina: velitel", - "vcmi.keyBindings.keyBinding.heroCostumeLoad0": "Hrdina: načíst předvolbu výbavy 0", - "vcmi.keyBindings.keyBinding.heroCostumeLoad1": "Hrdina: načíst předvolbu výbavy 1", - "vcmi.keyBindings.keyBinding.heroCostumeLoad2": "Hrdina: načíst předvolbu výbavy 2", - "vcmi.keyBindings.keyBinding.heroCostumeLoad3": "Hrdina: načíst předvolbu výbavy 3", - "vcmi.keyBindings.keyBinding.heroCostumeLoad4": "Hrdina: načíst předvolbu výbavy 4", - "vcmi.keyBindings.keyBinding.heroCostumeLoad5": "Hrdina: načíst předvolbu výbavy 5", - "vcmi.keyBindings.keyBinding.heroCostumeLoad6": "Hrdina: načíst předvolbu výbavy 6", - "vcmi.keyBindings.keyBinding.heroCostumeLoad7": "Hrdina: načíst předvolbu výbavy 7", - "vcmi.keyBindings.keyBinding.heroCostumeLoad8": "Hrdina: načíst předvolbu výbavy 8", - "vcmi.keyBindings.keyBinding.heroCostumeLoad9": "Hrdina: načíst předvolbu výbavy 9", - "vcmi.keyBindings.keyBinding.heroCostumeSave0": "Hrdina: uložit předvolbu výbavy 0", - "vcmi.keyBindings.keyBinding.heroCostumeSave1": "Hrdina: uložit předvolbu výbavy 1", - "vcmi.keyBindings.keyBinding.heroCostumeSave2": "Hrdina: uložit předvolbu výbavy 2", - "vcmi.keyBindings.keyBinding.heroCostumeSave3": "Hrdina: uložit předvolbu výbavy 3", - "vcmi.keyBindings.keyBinding.heroCostumeSave4": "Hrdina: uložit předvolbu výbavy 4", - "vcmi.keyBindings.keyBinding.heroCostumeSave5": "Hrdina: uložit předvolbu výbavy 5", - "vcmi.keyBindings.keyBinding.heroCostumeSave6": "Hrdina: uložit předvolbu výbavy 6", - "vcmi.keyBindings.keyBinding.heroCostumeSave7": "Hrdina: uložit předvolbu výbavy 7", - "vcmi.keyBindings.keyBinding.heroCostumeSave8": "Hrdina: uložit předvolbu výbavy 8", - "vcmi.keyBindings.keyBinding.heroCostumeSave9": "Hrdina: uložit předvolbu výbavy 9", - "vcmi.keyBindings.keyBinding.heroDismiss": "Hrdina: propustit", - "vcmi.keyBindings.keyBinding.heroLooseFormation": "Hrdina: volná formace", - "vcmi.keyBindings.keyBinding.heroTightFormation": "Hrdina: sevřená formace", - "vcmi.keyBindings.keyBinding.heroToggleTactics": "Hrdina: přepnout taktiku" - "vcmi.keyBindings.keyBinding.highScoresCampaigns": "Žebříčky: kampaně", - "vcmi.keyBindings.keyBinding.highScoresReset": "Žebříčky: reset", - "vcmi.keyBindings.keyBinding.highScoresStatistics": "Žebříčky: statistiky", - "vcmi.keyBindings.keyBinding.highScoresScenarios": "Žebříčky: scénáře", - "vcmi.keyBindings.keyBinding.kingdomHeroesTab": "Království: karta hrdinů", - "vcmi.keyBindings.keyBinding.kingdomTownsTab": "Království: karta měst", - "vcmi.keyBindings.keyBinding.lobbyAdditionalOptions": "Lobby: další volby", - "vcmi.keyBindings.keyBinding.lobbyBeginCampaign": "Lobby: začít kampaň", - "vcmi.keyBindings.keyBinding.lobbyBeginStandardGame": "Lobby: začít hru", - "vcmi.keyBindings.keyBinding.lobbyExtraOptions": "Lobby: rozšířené volby", - "vcmi.keyBindings.keyBinding.lobbyFlipCoin": "Lobby: hod mincí", - "vcmi.keyBindings.keyBinding.lobbyInvitePlayers": "Lobby: pozvat hráče", - "vcmi.keyBindings.keyBinding.lobbyLoadGame": "Lobby: načíst hru", - "vcmi.keyBindings.keyBinding.lobbyRandomMap": "Lobby: náhodná mapa", - "vcmi.keyBindings.keyBinding.lobbyRandomTown": "Lobby: náhodné město", - "vcmi.keyBindings.keyBinding.lobbyRandomTownVs": "Lobby: náhodné město vs", - "vcmi.keyBindings.keyBinding.lobbyHandicap": "Lobby: postih", - "vcmi.keyBindings.keyBinding.lobbyReplayVideo": "Lobby: přehrát video", - "vcmi.keyBindings.keyBinding.lobbySaveGame": "Lobby: uložit hru", - "vcmi.keyBindings.keyBinding.lobbySelectScenario": "Lobby: vybrat scénář", - "vcmi.keyBindings.keyBinding.lobbyToggleChat": "Lobby: přepnout chat", - "vcmi.keyBindings.keyBinding.lobbyTurnOptions": "Lobby: volby tahu", - "vcmi.keyBindings.keyBinding.mainMenuBack": "Hlavní menu: zpět", - "vcmi.keyBindings.keyBinding.mainMenuCampaign": "Hlavní menu: kampaň", - "vcmi.keyBindings.keyBinding.mainMenuCampaignAb": "Hlavní menu: kampaň AB", - "vcmi.keyBindings.keyBinding.mainMenuCampaignCustom": "Hlavní menu: vlastní kampaň", - "vcmi.keyBindings.keyBinding.mainMenuCampaignRoe": "Hlavní menu: kampaň RoE", - "vcmi.keyBindings.keyBinding.mainMenuCampaignSod": "Hlavní menu: kampaň SoD", - "vcmi.keyBindings.keyBinding.mainMenuCampaignChr": "Hlavní menu: kampaň Kroniky", - "vcmi.keyBindings.keyBinding.mainMenuCampaignHota": "Hlavní menu: kampaň HotA", - "vcmi.keyBindings.keyBinding.mainMenuCampaignWog": "Hlavní menu: kampaň WoG", - "vcmi.keyBindings.keyBinding.mainMenuCampaignVCMI": "Hlavní menu: kampaň VCMI", - "vcmi.keyBindings.keyBinding.mainMenuCredits": "Hlavní menu: autoři", - "vcmi.keyBindings.keyBinding.mainMenuHighScores": "Hlavní menu: žebříčky", - "vcmi.keyBindings.keyBinding.mainMenuHostGame": "Hlavní menu: hostovat hru", - "vcmi.keyBindings.keyBinding.mainMenuHotseat": "Hlavní menu: horké křeslo", - "vcmi.keyBindings.keyBinding.mainMenuJoinGame": "Hlavní menu: připojit se", - "vcmi.keyBindings.keyBinding.mainMenuLoadGame": "Hlavní menu: načíst hru", - "vcmi.keyBindings.keyBinding.mainMenuLobby": "Hlavní menu: lobby", - "vcmi.keyBindings.keyBinding.mainMenuMultiplayer": "Hlavní menu: hra více hráčů", - "vcmi.keyBindings.keyBinding.mainMenuNewGame": "Hlavní menu: nová hra", - "vcmi.keyBindings.keyBinding.mainMenuQuit": "Hlavní menu: ukončit", - "vcmi.keyBindings.keyBinding.mainMenuSingleplayer": "Hlavní menu: hra jednoho hráče", - "vcmi.keyBindings.keyBinding.mainMenuTutorial": "Hlavní menu: výuka", - "vcmi.keyBindings.keyBinding.mapsSizeAll": "Mapy: všechny velikosti", - "vcmi.keyBindings.keyBinding.mapsSizeL": "Mapy: velikost L", - "vcmi.keyBindings.keyBinding.mapsSizeM": "Mapy: velikost M", - "vcmi.keyBindings.keyBinding.mapsSizeS": "Mapy: velikost S", - "vcmi.keyBindings.keyBinding.mapsSizeXl": "Mapy: velikost XL", - "vcmi.keyBindings.keyBinding.mapsSortChangedate": "Mapy: seřadit podle data změny", - "vcmi.keyBindings.keyBinding.mapsSortDefeat": "Mapy: seřadit podle porážky", - "vcmi.keyBindings.keyBinding.mapsSortFormat": "Mapy: seřadit podle formátu", - "vcmi.keyBindings.keyBinding.mapsSortMaps": "Mapy: seřadit podle map", - "vcmi.keyBindings.keyBinding.mapsSortName": "Mapy: seřadit podle názvu", - "vcmi.keyBindings.keyBinding.mapsSortPlayers": "Mapy: seřadit podle hráčů", - "vcmi.keyBindings.keyBinding.mapsSortSize": "Mapy: seřadit podle velikosti", - "vcmi.keyBindings.keyBinding.mapsSortVictory": "Mapy: seřadit podle vítězství", - "vcmi.keyBindings.keyBinding.marketArtifactExperience": "Trh: artefakty za zkušenosti", - "vcmi.keyBindings.keyBinding.marketArtifactResource": "Trh: artefakty za suroviny", - "vcmi.keyBindings.keyBinding.marketCreatureExperience": "Trh: jednotky za zkušenosti", - "vcmi.keyBindings.keyBinding.marketCreatureResource": "Trh: jednotky za suroviny", - "vcmi.keyBindings.keyBinding.marketDeal": "Trh: obchod", - "vcmi.keyBindings.keyBinding.marketMaxAmount": "Trh: maximální množství", - "vcmi.keyBindings.keyBinding.marketResourceArtifact": "Trh: suroviny za artefakty", - "vcmi.keyBindings.keyBinding.marketResourcePlayer": "Trh: suroviny od hráče", - "vcmi.keyBindings.keyBinding.marketResourceResource": "Trh: směna surovin", - "vcmi.keyBindings.keyBinding.marketSacrificeAll": "Trh: obětovat vše", - "vcmi.keyBindings.keyBinding.marketSacrificeBackpack": "Trh: obětovat batoh", - "vcmi.keyBindings.keyBinding.moveDown": "Pohyb: dolů", - "vcmi.keyBindings.keyBinding.moveFirst": "Pohyb: první", - "vcmi.keyBindings.keyBinding.moveLast": "Pohyb: poslední", - "vcmi.keyBindings.keyBinding.moveLeft": "Pohyb: doleva", - "vcmi.keyBindings.keyBinding.movePageDown": "Pohyb: stránka dolů", - "vcmi.keyBindings.keyBinding.movePageUp": "Pohyb: stránka nahoru", - "vcmi.keyBindings.keyBinding.moveRight": "Pohyb: doprava", - "vcmi.keyBindings.keyBinding.moveUp": "Pohyb: nahoru", - "vcmi.keyBindings.keyBinding.recruitmentMax": "Nábor: maximum", - "vcmi.keyBindings.keyBinding.recruitmentMin": "Nábor: minimum", - "vcmi.keyBindings.keyBinding.recruitmentSwitchLevel": "Nábor: změnit úroveň", - "vcmi.keyBindings.keyBinding.recruitmentUpgrade": "Nábor: vylepšit", - "vcmi.keyBindings.keyBinding.recruitmentUpgradeAll": "Nábor: vylepšit vše", - "vcmi.keyBindings.keyBinding.selectIndex1": "Výběr: index 1", - "vcmi.keyBindings.keyBinding.selectIndex2": "Výběr: index 2", - "vcmi.keyBindings.keyBinding.selectIndex3": "Výběr: index 3", - "vcmi.keyBindings.keyBinding.selectIndex4": "Výběr: index 4", - "vcmi.keyBindings.keyBinding.selectIndex5": "Výběr: index 5", - "vcmi.keyBindings.keyBinding.selectIndex6": "Výběr: index 6", - "vcmi.keyBindings.keyBinding.selectIndex7": "Výběr: index 7", - "vcmi.keyBindings.keyBinding.selectIndex8": "Výběr: index 8", - "vcmi.keyBindings.keyBinding.settingsLoadGame": "Nastavení: načíst hru", - "vcmi.keyBindings.keyBinding.settingsNewGame": "Nastavení: nová hra", - "vcmi.keyBindings.keyBinding.settingsQuitGame": "Nastavení: ukončit hru", - "vcmi.keyBindings.keyBinding.settingsRestartGame": "Nastavení: restartovat hru", - "vcmi.keyBindings.keyBinding.settingsSaveGame": "Nastavení: uložit hru", - "vcmi.keyBindings.keyBinding.settingsToMainMenu": "Nastavení: do hlavního menu", - "vcmi.keyBindings.keyBinding.spectateSkipBattle": "Divák: přeskočit bitvu", - "vcmi.keyBindings.keyBinding.spectateSkipBattleResult": "Divák: přeskočit výsledek bitvy", - "vcmi.keyBindings.keyBinding.spectateTrackHero": "Divák: sledovat hrdinu", - "vcmi.keyBindings.keyBinding.spellbookTabAdventure": "Kniha kouzel: karta dobrodružství", - "vcmi.keyBindings.keyBinding.spellbookTabCombat": "Kniha kouzel: karta boje", - "vcmi.keyBindings.keyBinding.spellbookSearchFocus": "Kniha kouzel: hledání", - "vcmi.keyBindings.keyBinding.townOpenFort": "Město: pevnost", - "vcmi.keyBindings.keyBinding.townOpenGarrisonedHero": "Město: hrdina v posádce", - "vcmi.keyBindings.keyBinding.townOpenHall": "Město: radnice", - "vcmi.keyBindings.keyBinding.townOpenHero": "Město: hrdina", - "vcmi.keyBindings.keyBinding.townOpenHeroExchange": "Město: výměna hrdinů", - "vcmi.keyBindings.keyBinding.townOpenMageGuild": "Město: věž kouzel", - "vcmi.keyBindings.keyBinding.townOpenMarket": "Město: tržnice", - "vcmi.keyBindings.keyBinding.townOpenRecruitment": "Město: nábor", - "vcmi.keyBindings.keyBinding.townOpenTavern": "Město: putyka", - "vcmi.keyBindings.keyBinding.townOpenThievesGuild": "Město: cech zlodějů", - "vcmi.keyBindings.keyBinding.townOpenVisitingHero": "Město: hrdina na návštěvě", - "vcmi.keyBindings.keyBinding.townSwapArmies": "Město: prohodit armády", - "vcmi.keyBindings.keyBinding.listHeroUp": "Seznam: hrdina nahoru", - "vcmi.keyBindings.keyBinding.listHeroDown": "Seznam: hrdina dolů", - "vcmi.keyBindings.keyBinding.listHeroTop": "Seznam: první hrdina", - "vcmi.keyBindings.keyBinding.listHeroBottom": "Seznam: poslední hrdina", - "vcmi.keyBindings.keyBinding.listHeroDismiss": "Seznam: propustit hrdinu", - "vcmi.keyBindings.keyBinding.listTownUp": "Seznam: město nahoru", - "vcmi.keyBindings.keyBinding.listTownDown": "Seznam: město dolů", - "vcmi.keyBindings.keyBinding.listTownTop": "Seznam: první město", - "vcmi.keyBindings.keyBinding.listTownBottom": "Seznam: poslední město", + "vcmi.keyBindings.keyBinding.adventureCastSpell" : "Mapa: seslat kouzlo", + "vcmi.keyBindings.keyBinding.adventureDigGrail" : "Mapa: kopat Grál", + "vcmi.keyBindings.keyBinding.adventureEndTurn" : "Mapa: ukončit tah", + "vcmi.keyBindings.keyBinding.adventureExitWorldView" : "Mapa: zavřít přehled království", + "vcmi.keyBindings.keyBinding.adventureFirstHero" : "Mapa: první hrdina", + "vcmi.keyBindings.keyBinding.adventureFirstTown" : "Mapa: první město", + "vcmi.keyBindings.keyBinding.adventureGameOptions" : "Mapa: nastavení hry", + "vcmi.keyBindings.keyBinding.adventureKingdomOverview" : "Mapa: přehled království", + "vcmi.keyBindings.keyBinding.adventureLoadGame" : "Mapa: načíst hru", + "vcmi.keyBindings.keyBinding.adventureMainMenu" : "Mapa: hlavní menu", + "vcmi.keyBindings.keyBinding.adventureMarketplace" : "Mapa: tržnice", + "vcmi.keyBindings.keyBinding.adventureMoveHero" : "Mapa: pohyb hrdiny", + "vcmi.keyBindings.keyBinding.adventureMoveHeroEE" : "Mapa: pohyb hrdiny VV", + "vcmi.keyBindings.keyBinding.adventureMoveHeroNE" : "Mapa: pohyb hrdiny SV", + "vcmi.keyBindings.keyBinding.adventureMoveHeroNN" : "Mapa: pohyb hrdiny SS", + "vcmi.keyBindings.keyBinding.adventureMoveHeroNW" : "Mapa: pohyb hrdiny SZ", + "vcmi.keyBindings.keyBinding.adventureMoveHeroSE" : "Mapa: pohyb hrdiny JV", + "vcmi.keyBindings.keyBinding.adventureMoveHeroSS" : "Mapa: pohyb hrdiny JJ", + "vcmi.keyBindings.keyBinding.adventureMoveHeroSW" : "Mapa: pohyb hrdiny JZ", + "vcmi.keyBindings.keyBinding.adventureMoveHeroWW" : "Mapa: pohyb hrdiny ZZ", + "vcmi.keyBindings.keyBinding.adventureNewGame" : "Mapa: nová hra", + "vcmi.keyBindings.keyBinding.adventureNextHero" : "Mapa: další hrdina", + "vcmi.keyBindings.keyBinding.adventureNextObject" : "Mapa: další objekt", + "vcmi.keyBindings.keyBinding.adventureNextTown" : "Mapa: další město", + "vcmi.keyBindings.keyBinding.adventureQuestLog" : "Mapa: seznam úkolů", + "vcmi.keyBindings.keyBinding.adventureQuitGame" : "Mapa: ukončit hru", + "vcmi.keyBindings.keyBinding.adventureReplayTurn" : "Mapa: přehrát tah", + "vcmi.keyBindings.keyBinding.adventureRestartGame" : "Mapa: restartovat hru", + "vcmi.keyBindings.keyBinding.adventureSaveGame" : "Mapa: uložit hru", + "vcmi.keyBindings.keyBinding.adventureSetHeroAsleep" : "Mapa: uspat hrdinu", + "vcmi.keyBindings.keyBinding.adventureSetHeroAwake" : "Mapa: probudit hrdinu", + "vcmi.keyBindings.keyBinding.adventureThievesGuild" : "Mapa: cech zlodějů", + "vcmi.keyBindings.keyBinding.adventureToggleGrid" : "Mapa: zapnout/vypnout mřížku", + "vcmi.keyBindings.keyBinding.adventureToggleVisitable" : "Mapa: zapnout/vypnout navštívitelné", + "vcmi.keyBindings.keyBinding.adventureToggleBlocked" : "Mapa: zapnout/vypnout blokované", + "vcmi.keyBindings.keyBinding.adventureToggleMapLevel" : "Mapa: přepnout úroveň mapy", + "vcmi.keyBindings.keyBinding.adventureToggleSleep" : "Mapa: přepnout spánek", + "vcmi.keyBindings.keyBinding.adventureTrackHero" : "Mapa: sledovat hrdinu", + "vcmi.keyBindings.keyBinding.adventureViewPuzzle" : "Mapa: zobrazit skládačku", + "vcmi.keyBindings.keyBinding.adventureViewScenario" : "Mapa: zobrazit scénář", + "vcmi.keyBindings.keyBinding.adventureViewSelected" : "Mapa: zobrazit vybraný objekt", + "vcmi.keyBindings.keyBinding.adventureViewWorld" : "Mapa: přehled světa", + "vcmi.keyBindings.keyBinding.adventureViewWorld1" : "Mapa: přehled světa 1", + "vcmi.keyBindings.keyBinding.adventureViewWorld2" : "Mapa: přehled světa 2", + "vcmi.keyBindings.keyBinding.adventureViewWorld4" : "Mapa: přehled světa 4", + "vcmi.keyBindings.keyBinding.adventureVisitObject" : "Mapa: navštívit objekt", + "vcmi.keyBindings.keyBinding.adventureZoomIn" : "Mapa: přiblížit", + "vcmi.keyBindings.keyBinding.adventureZoomOut" : "Mapa: oddálit", + "vcmi.keyBindings.keyBinding.adventureZoomReset" : "Mapa: resetovat přiblížení", + "vcmi.keyBindings.keyBinding.adventureSearch" : "Mapa: hledat", + "vcmi.keyBindings.keyBinding.adventureSearchContinue" : "Mapa: pokračovat v hledání", + "vcmi.keyBindings.keyBinding.battleAutocombat" : "Bitva: automatický boj", + "vcmi.keyBindings.keyBinding.battleAutocombatEnd" : "Bitva: ukončit automatický boj", + "vcmi.keyBindings.keyBinding.battleCastSpell" : "Bitva: seslat kouzlo", + "vcmi.keyBindings.keyBinding.battleConsoleDown" : "Bitva: konzole dolů", + "vcmi.keyBindings.keyBinding.battleConsoleUp" : "Bitva: konzole nahoru", + "vcmi.keyBindings.keyBinding.battleDefend" : "Bitva: bránit se", + "vcmi.keyBindings.keyBinding.battleOpenActiveUnit" : "Bitva: otevřít aktivní jednotku", + "vcmi.keyBindings.keyBinding.battleOpenHoveredUnit" : "Bitva: otevřít jednotku pod kurzorem", + "vcmi.keyBindings.keyBinding.battleRetreat" : "Bitva: útěk", + "vcmi.keyBindings.keyBinding.battleToggleQuickSpell" : "Bitva: přepnout rychlé kouzlo", + "vcmi.keyBindings.keyBinding.battleSpellShortcut0" : "Bitva: zkratka kouzla 0", + "vcmi.keyBindings.keyBinding.battleSpellShortcut1" : "Bitva: zkratka kouzla 1", + "vcmi.keyBindings.keyBinding.battleSpellShortcut2" : "Bitva: zkratka kouzla 2", + "vcmi.keyBindings.keyBinding.battleSpellShortcut3" : "Bitva: zkratka kouzla 3", + "vcmi.keyBindings.keyBinding.battleSpellShortcut4" : "Bitva: zkratka kouzla 4", + "vcmi.keyBindings.keyBinding.battleSpellShortcut5" : "Bitva: zkratka kouzla 5", + "vcmi.keyBindings.keyBinding.battleSpellShortcut6" : "Bitva: zkratka kouzla 6", + "vcmi.keyBindings.keyBinding.battleSpellShortcut7" : "Bitva: zkratka kouzla 7", + "vcmi.keyBindings.keyBinding.battleSpellShortcut8" : "Bitva: zkratka kouzla 8", + "vcmi.keyBindings.keyBinding.battleSpellShortcut9" : "Bitva: zkratka kouzla 9", + "vcmi.keyBindings.keyBinding.battleSpellShortcut10" : "Bitva: zkratka kouzla 10", + "vcmi.keyBindings.keyBinding.battleSpellShortcut11" : "Bitva: zkratka kouzla 11", + "vcmi.keyBindings.keyBinding.battleSurrender" : "Bitva: kapitulovat", + "vcmi.keyBindings.keyBinding.battleTacticsEnd" : "Bitva: konec taktiky", + "vcmi.keyBindings.keyBinding.battleTacticsNext" : "Bitva: další v taktice", + "vcmi.keyBindings.keyBinding.battleToggleHeroesStats" : "Bitva: přepnout statistiky hrdinů", + "vcmi.keyBindings.keyBinding.battleToggleQueue" : "Bitva: přepnout pořadí", + "vcmi.keyBindings.keyBinding.battleUseCreatureSpell" : "Bitva: použít schopnost jednotky", + "vcmi.keyBindings.keyBinding.battleWait" : "Bitva: čekat", + "vcmi.keyBindings.keyBinding.exchangeArmySwap" : "Výměna: prohodit armády", + "vcmi.keyBindings.keyBinding.exchangeArmyToLeft" : "Výměna: armáda doleva", + "vcmi.keyBindings.keyBinding.exchangeArmyToRight" : "Výměna: armáda doprava", + "vcmi.keyBindings.keyBinding.exchangeArtifactsSwap" : "Výměna: prohodit artefakty", + "vcmi.keyBindings.keyBinding.exchangeArtifactsToLeft" : "Výměna: artefakty doleva", + "vcmi.keyBindings.keyBinding.exchangeArtifactsToRight" : "Výměna: artefakty doprava", + "vcmi.keyBindings.keyBinding.exchangeBackpackLeft" : "Výměna: batoh doleva", + "vcmi.keyBindings.keyBinding.exchangeBackpackRight" : "Výměna: batoh doprava", + "vcmi.keyBindings.keyBinding.exchangeBackpackSwap" : "Výměna: prohodit batoh", + "vcmi.keyBindings.keyBinding.exchangeBackpackToLeft" : "Výměna: přesun batohu doleva", + "vcmi.keyBindings.keyBinding.exchangeBackpackToRight" : "Výměna: přesun batohu doprava", + "vcmi.keyBindings.keyBinding.exchangeEquippedSwap" : "Výměna: prohodit vybavení", + "vcmi.keyBindings.keyBinding.exchangeEquippedToLeft" : "Výměna: vybavení doleva", + "vcmi.keyBindings.keyBinding.exchangeEquippedToRight" : "Výměna: vybavení doprava", + "vcmi.keyBindings.keyBinding.gameActivateConsole" : "Hra: otevřít konzoli", + "vcmi.keyBindings.keyBinding.globalAccept" : "Obecné: potvrdit", + "vcmi.keyBindings.keyBinding.globalBackspace" : "Obecné: Backspace", + "vcmi.keyBindings.keyBinding.globalCancel" : "Obecné: zrušit", + "vcmi.keyBindings.keyBinding.globalFullscreen" : "Obecné: celá obrazovka", + "vcmi.keyBindings.keyBinding.globalMoveFocus" : "Obecné: přesunout zaměření", + "vcmi.keyBindings.keyBinding.globalOptions" : "Obecné: možnosti", + "vcmi.keyBindings.keyBinding.globalReturn" : "Obecné: Enter", + "vcmi.keyBindings.keyBinding.heroArmySplit" : "Hrdina: rozdělit armádu", + "vcmi.keyBindings.keyBinding.heroBackpack" : "Hrdina: batoh", + "vcmi.keyBindings.keyBinding.heroCommander" : "Hrdina: velitel", + "vcmi.keyBindings.keyBinding.heroCostumeLoad0" : "Hrdina: načíst předvolbu výbavy 0", + "vcmi.keyBindings.keyBinding.heroCostumeLoad1" : "Hrdina: načíst předvolbu výbavy 1", + "vcmi.keyBindings.keyBinding.heroCostumeLoad2" : "Hrdina: načíst předvolbu výbavy 2", + "vcmi.keyBindings.keyBinding.heroCostumeLoad3" : "Hrdina: načíst předvolbu výbavy 3", + "vcmi.keyBindings.keyBinding.heroCostumeLoad4" : "Hrdina: načíst předvolbu výbavy 4", + "vcmi.keyBindings.keyBinding.heroCostumeLoad5" : "Hrdina: načíst předvolbu výbavy 5", + "vcmi.keyBindings.keyBinding.heroCostumeLoad6" : "Hrdina: načíst předvolbu výbavy 6", + "vcmi.keyBindings.keyBinding.heroCostumeLoad7" : "Hrdina: načíst předvolbu výbavy 7", + "vcmi.keyBindings.keyBinding.heroCostumeLoad8" : "Hrdina: načíst předvolbu výbavy 8", + "vcmi.keyBindings.keyBinding.heroCostumeLoad9" : "Hrdina: načíst předvolbu výbavy 9", + "vcmi.keyBindings.keyBinding.heroCostumeSave0" : "Hrdina: uložit předvolbu výbavy 0", + "vcmi.keyBindings.keyBinding.heroCostumeSave1" : "Hrdina: uložit předvolbu výbavy 1", + "vcmi.keyBindings.keyBinding.heroCostumeSave2" : "Hrdina: uložit předvolbu výbavy 2", + "vcmi.keyBindings.keyBinding.heroCostumeSave3" : "Hrdina: uložit předvolbu výbavy 3", + "vcmi.keyBindings.keyBinding.heroCostumeSave4" : "Hrdina: uložit předvolbu výbavy 4", + "vcmi.keyBindings.keyBinding.heroCostumeSave5" : "Hrdina: uložit předvolbu výbavy 5", + "vcmi.keyBindings.keyBinding.heroCostumeSave6" : "Hrdina: uložit předvolbu výbavy 6", + "vcmi.keyBindings.keyBinding.heroCostumeSave7" : "Hrdina: uložit předvolbu výbavy 7", + "vcmi.keyBindings.keyBinding.heroCostumeSave8" : "Hrdina: uložit předvolbu výbavy 8", + "vcmi.keyBindings.keyBinding.heroCostumeSave9" : "Hrdina: uložit předvolbu výbavy 9", + "vcmi.keyBindings.keyBinding.heroDismiss" : "Hrdina: propustit", + "vcmi.keyBindings.keyBinding.heroLooseFormation" : "Hrdina: volná formace", + "vcmi.keyBindings.keyBinding.heroTightFormation" : "Hrdina: sevřená formace", + "vcmi.keyBindings.keyBinding.heroToggleTactics" : "Hrdina: přepnout taktiku" + "vcmi.keyBindings.keyBinding.highScoresCampaigns" : "Žebříčky: kampaně", + "vcmi.keyBindings.keyBinding.highScoresReset" : "Žebříčky: reset", + "vcmi.keyBindings.keyBinding.highScoresStatistics" : "Žebříčky: statistiky", + "vcmi.keyBindings.keyBinding.highScoresScenarios" : "Žebříčky: scénáře", + "vcmi.keyBindings.keyBinding.kingdomHeroesTab" : "Království: karta hrdinů", + "vcmi.keyBindings.keyBinding.kingdomTownsTab" : "Království: karta měst", + "vcmi.keyBindings.keyBinding.lobbyAdditionalOptions" : "Lobby: další volby", + "vcmi.keyBindings.keyBinding.lobbyBeginCampaign" : "Lobby: začít kampaň", + "vcmi.keyBindings.keyBinding.lobbyBeginStandardGame" : "Lobby: začít hru", + "vcmi.keyBindings.keyBinding.lobbyExtraOptions" : "Lobby: rozšířené volby", + "vcmi.keyBindings.keyBinding.lobbyFlipCoin" : "Lobby: hod mincí", + "vcmi.keyBindings.keyBinding.lobbyInvitePlayers" : "Lobby: pozvat hráče", + "vcmi.keyBindings.keyBinding.lobbyLoadGame" : "Lobby: načíst hru", + "vcmi.keyBindings.keyBinding.lobbyRandomMap" : "Lobby: náhodná mapa", + "vcmi.keyBindings.keyBinding.lobbyRandomTown" : "Lobby: náhodné město", + "vcmi.keyBindings.keyBinding.lobbyRandomTownVs" : "Lobby: náhodné město vs", + "vcmi.keyBindings.keyBinding.lobbyHandicap" : "Lobby: postih", + "vcmi.keyBindings.keyBinding.lobbyReplayVideo" : "Lobby: přehrát video", + "vcmi.keyBindings.keyBinding.lobbySaveGame" : "Lobby: uložit hru", + "vcmi.keyBindings.keyBinding.lobbySelectScenario" : "Lobby: vybrat scénář", + "vcmi.keyBindings.keyBinding.lobbyToggleChat" : "Lobby: přepnout chat", + "vcmi.keyBindings.keyBinding.lobbyTurnOptions" : "Lobby: volby tahu", + "vcmi.keyBindings.keyBinding.mainMenuBack" : "Hlavní menu: zpět", + "vcmi.keyBindings.keyBinding.mainMenuCampaign" : "Hlavní menu: kampaň", + "vcmi.keyBindings.keyBinding.mainMenuCampaignAb" : "Hlavní menu: kampaň AB", + "vcmi.keyBindings.keyBinding.mainMenuCampaignCustom" : "Hlavní menu: vlastní kampaň", + "vcmi.keyBindings.keyBinding.mainMenuCampaignRoe" : "Hlavní menu: kampaň RoE", + "vcmi.keyBindings.keyBinding.mainMenuCampaignSod" : "Hlavní menu: kampaň SoD", + "vcmi.keyBindings.keyBinding.mainMenuCampaignChr" : "Hlavní menu: kampaň Kroniky", + "vcmi.keyBindings.keyBinding.mainMenuCampaignHota" : "Hlavní menu: kampaň HotA", + "vcmi.keyBindings.keyBinding.mainMenuCampaignWog" : "Hlavní menu: kampaň WoG", + "vcmi.keyBindings.keyBinding.mainMenuCampaignVCMI" : "Hlavní menu: kampaň VCMI", + "vcmi.keyBindings.keyBinding.mainMenuCredits" : "Hlavní menu: autoři", + "vcmi.keyBindings.keyBinding.mainMenuHighScores" : "Hlavní menu: žebříčky", + "vcmi.keyBindings.keyBinding.mainMenuHostGame" : "Hlavní menu: hostovat hru", + "vcmi.keyBindings.keyBinding.mainMenuHotseat" : "Hlavní menu: horké křeslo", + "vcmi.keyBindings.keyBinding.mainMenuJoinGame" : "Hlavní menu: připojit se", + "vcmi.keyBindings.keyBinding.mainMenuLoadGame" : "Hlavní menu: načíst hru", + "vcmi.keyBindings.keyBinding.mainMenuLobby" : "Hlavní menu: lobby", + "vcmi.keyBindings.keyBinding.mainMenuMultiplayer" : "Hlavní menu: hra více hráčů", + "vcmi.keyBindings.keyBinding.mainMenuNewGame" : "Hlavní menu: nová hra", + "vcmi.keyBindings.keyBinding.mainMenuQuit" : "Hlavní menu: ukončit", + "vcmi.keyBindings.keyBinding.mainMenuSingleplayer" : "Hlavní menu: hra jednoho hráče", + "vcmi.keyBindings.keyBinding.mainMenuTutorial" : "Hlavní menu: výuka", + "vcmi.keyBindings.keyBinding.mapsSizeAll" : "Mapy: všechny velikosti", + "vcmi.keyBindings.keyBinding.mapsSizeL" : "Mapy: velikost L", + "vcmi.keyBindings.keyBinding.mapsSizeM" : "Mapy: velikost M", + "vcmi.keyBindings.keyBinding.mapsSizeS" : "Mapy: velikost S", + "vcmi.keyBindings.keyBinding.mapsSizeXl" : "Mapy: velikost XL", + "vcmi.keyBindings.keyBinding.mapsSortChangedate" : "Mapy: seřadit podle data změny", + "vcmi.keyBindings.keyBinding.mapsSortDefeat" : "Mapy: seřadit podle porážky", + "vcmi.keyBindings.keyBinding.mapsSortFormat" : "Mapy: seřadit podle formátu", + "vcmi.keyBindings.keyBinding.mapsSortMaps" : "Mapy: seřadit podle map", + "vcmi.keyBindings.keyBinding.mapsSortName" : "Mapy: seřadit podle názvu", + "vcmi.keyBindings.keyBinding.mapsSortPlayers" : "Mapy: seřadit podle hráčů", + "vcmi.keyBindings.keyBinding.mapsSortSize" : "Mapy: seřadit podle velikosti", + "vcmi.keyBindings.keyBinding.mapsSortVictory" : "Mapy: seřadit podle vítězství", + "vcmi.keyBindings.keyBinding.marketArtifactExperience" : "Trh: artefakty za zkušenosti", + "vcmi.keyBindings.keyBinding.marketArtifactResource" : "Trh: artefakty za suroviny", + "vcmi.keyBindings.keyBinding.marketCreatureExperience" : "Trh: jednotky za zkušenosti", + "vcmi.keyBindings.keyBinding.marketCreatureResource" : "Trh: jednotky za suroviny", + "vcmi.keyBindings.keyBinding.marketDeal" : "Trh: obchod", + "vcmi.keyBindings.keyBinding.marketMaxAmount" : "Trh: maximální množství", + "vcmi.keyBindings.keyBinding.marketResourceArtifact" : "Trh: suroviny za artefakty", + "vcmi.keyBindings.keyBinding.marketResourcePlayer" : "Trh: suroviny od hráče", + "vcmi.keyBindings.keyBinding.marketResourceResource" : "Trh: směna surovin", + "vcmi.keyBindings.keyBinding.marketSacrificeAll" : "Trh: obětovat vše", + "vcmi.keyBindings.keyBinding.marketSacrificeBackpack" : "Trh: obětovat batoh", + "vcmi.keyBindings.keyBinding.moveDown" : "Pohyb: dolů", + "vcmi.keyBindings.keyBinding.moveFirst" : "Pohyb: první", + "vcmi.keyBindings.keyBinding.moveLast" : "Pohyb: poslední", + "vcmi.keyBindings.keyBinding.moveLeft" : "Pohyb: doleva", + "vcmi.keyBindings.keyBinding.movePageDown" : "Pohyb: stránka dolů", + "vcmi.keyBindings.keyBinding.movePageUp" : "Pohyb: stránka nahoru", + "vcmi.keyBindings.keyBinding.moveRight" : "Pohyb: doprava", + "vcmi.keyBindings.keyBinding.moveUp" : "Pohyb: nahoru", + "vcmi.keyBindings.keyBinding.recruitmentMax" : "Nábor: maximum", + "vcmi.keyBindings.keyBinding.recruitmentMin" : "Nábor: minimum", + "vcmi.keyBindings.keyBinding.recruitmentSwitchLevel" : "Nábor: změnit úroveň", + "vcmi.keyBindings.keyBinding.recruitmentUpgrade" : "Nábor: vylepšit", + "vcmi.keyBindings.keyBinding.recruitmentUpgradeAll" : "Nábor: vylepšit vše", + "vcmi.keyBindings.keyBinding.selectIndex1" : "Výběr: index 1", + "vcmi.keyBindings.keyBinding.selectIndex2" : "Výběr: index 2", + "vcmi.keyBindings.keyBinding.selectIndex3" : "Výběr: index 3", + "vcmi.keyBindings.keyBinding.selectIndex4" : "Výběr: index 4", + "vcmi.keyBindings.keyBinding.selectIndex5" : "Výběr: index 5", + "vcmi.keyBindings.keyBinding.selectIndex6" : "Výběr: index 6", + "vcmi.keyBindings.keyBinding.selectIndex7" : "Výběr: index 7", + "vcmi.keyBindings.keyBinding.selectIndex8" : "Výběr: index 8", + "vcmi.keyBindings.keyBinding.settingsLoadGame" : "Nastavení: načíst hru", + "vcmi.keyBindings.keyBinding.settingsNewGame" : "Nastavení: nová hra", + "vcmi.keyBindings.keyBinding.settingsQuitGame" : "Nastavení: ukončit hru", + "vcmi.keyBindings.keyBinding.settingsRestartGame" : "Nastavení: restartovat hru", + "vcmi.keyBindings.keyBinding.settingsSaveGame" : "Nastavení: uložit hru", + "vcmi.keyBindings.keyBinding.settingsToMainMenu" : "Nastavení: do hlavního menu", + "vcmi.keyBindings.keyBinding.spectateSkipBattle" : "Divák: přeskočit bitvu", + "vcmi.keyBindings.keyBinding.spectateSkipBattleResult" : "Divák: přeskočit výsledek bitvy", + "vcmi.keyBindings.keyBinding.spectateTrackHero" : "Divák: sledovat hrdinu", + "vcmi.keyBindings.keyBinding.spellbookTabAdventure" : "Kniha kouzel: karta dobrodružství", + "vcmi.keyBindings.keyBinding.spellbookTabCombat" : "Kniha kouzel: karta boje", + "vcmi.keyBindings.keyBinding.spellbookSearchFocus" : "Kniha kouzel: hledání", + "vcmi.keyBindings.keyBinding.townOpenFort" : "Město: pevnost", + "vcmi.keyBindings.keyBinding.townOpenGarrisonedHero" : "Město: hrdina v posádce", + "vcmi.keyBindings.keyBinding.townOpenHall" : "Město: radnice", + "vcmi.keyBindings.keyBinding.townOpenHero" : "Město: hrdina", + "vcmi.keyBindings.keyBinding.townOpenHeroExchange" : "Město: výměna hrdinů", + "vcmi.keyBindings.keyBinding.townOpenMageGuild" : "Město: věž kouzel", + "vcmi.keyBindings.keyBinding.townOpenMarket" : "Město: tržnice", + "vcmi.keyBindings.keyBinding.townOpenRecruitment" : "Město: nábor", + "vcmi.keyBindings.keyBinding.townOpenTavern" : "Město: putyka", + "vcmi.keyBindings.keyBinding.townOpenThievesGuild" : "Město: cech zlodějů", + "vcmi.keyBindings.keyBinding.townOpenVisitingHero" : "Město: hrdina na návštěvě", + "vcmi.keyBindings.keyBinding.townSwapArmies" : "Město: prohodit armády", + "vcmi.keyBindings.keyBinding.listHeroUp" : "Seznam: hrdina nahoru", + "vcmi.keyBindings.keyBinding.listHeroDown" : "Seznam: hrdina dolů", + "vcmi.keyBindings.keyBinding.listHeroTop" : "Seznam: první hrdina", + "vcmi.keyBindings.keyBinding.listHeroBottom" : "Seznam: poslední hrdina", + "vcmi.keyBindings.keyBinding.listHeroDismiss" : "Seznam: propustit hrdinu", + "vcmi.keyBindings.keyBinding.listTownUp" : "Seznam: město nahoru", + "vcmi.keyBindings.keyBinding.listTownDown" : "Seznam: město dolů", + "vcmi.keyBindings.keyBinding.listTownTop" : "Seznam: první město", + "vcmi.keyBindings.keyBinding.listTownBottom" : "Seznam: poslední město", "vcmi.keyBindings.keyBinding.mouseCursorX" : "Myš: kurzor X", "vcmi.keyBindings.keyBinding.mouseCursorY" : "Myš: kurzor Y", "vcmi.keyBindings.keyBinding.mouseSwipeX" : "Myš: gesto X", "vcmi.keyBindings.keyBinding.mouseSwipeY" : "Myš: gesto Y", - "vcmi.keyBindings.keyBinding.mouseClickLeft": "Myš: levé tlačítko", - "vcmi.keyBindings.keyBinding.mouseClickRight": "Myš: pravé tlačítko", + "vcmi.keyBindings.keyBinding.mouseClickLeft" : "Myš: levé tlačítko", + "vcmi.keyBindings.keyBinding.mouseClickRight" : "Myš: pravé tlačítko", "vcmi.systemOptions.videoGroup" : "Nastavení obrazu", "vcmi.systemOptions.audioGroup" : "Nastavení zvuku", @@ -657,8 +657,8 @@ "vcmi.battleOptions.endWithAutocombat.help" : "{Přeskočit bitvu}\n\nAutomatický boj okamžitě dohraje bitvu do konce.", "vcmi.battleOptions.showQuickSpell.hover" : "Zobrazit rychlý panel kouzel", "vcmi.battleOptions.showQuickSpell.help" : "{Zobrazit rychlý panel kouzel}\n\nZobrazí panel pro rychlý výběr kouzel.", - "vcmi.battleOptions.showHealthBar.hover": "Zobrazit ukazatel zdraví", - "vcmi.battleOptions.showHealthBar.help": "{Zobrazit ukazatel zdraví}\n\nZobrazí ukazatel, který znázorňuje, kolik zdraví zbývá, než jednotka zemře.", + "vcmi.battleOptions.showHealthBar.hover" : "Zobrazit ukazatel zdraví", + "vcmi.battleOptions.showHealthBar.help" : "{Zobrazit ukazatel zdraví}\n\nZobrazí ukazatel, který znázorňuje, kolik zdraví zbývá, než jednotka zemře.", "vcmi.adventureMap.revisitObject.hover" : "Znovu navštívit objekt", "vcmi.adventureMap.revisitObject.help" : "{Znovu navštívit objekt}\n\nPokud hrdina právě stojí na objektu na mapě, může toto místo znovu navštívit.", From dbba521a99185150a734ab72f2e937597ac5c870 Mon Sep 17 00:00:00 2001 From: George King <98261225+GeorgeK1ng@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:08:53 +0200 Subject: [PATCH 09/22] Update czech.json --- Mods/vcmi/Content/config/czech.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mods/vcmi/Content/config/czech.json b/Mods/vcmi/Content/config/czech.json index d18d96e08..7bfbca227 100644 --- a/Mods/vcmi/Content/config/czech.json +++ b/Mods/vcmi/Content/config/czech.json @@ -402,7 +402,7 @@ "vcmi.keyBindings.keyBinding.heroDismiss" : "Hrdina: propustit", "vcmi.keyBindings.keyBinding.heroLooseFormation" : "Hrdina: volná formace", "vcmi.keyBindings.keyBinding.heroTightFormation" : "Hrdina: sevřená formace", - "vcmi.keyBindings.keyBinding.heroToggleTactics" : "Hrdina: přepnout taktiku" + "vcmi.keyBindings.keyBinding.heroToggleTactics" : "Hrdina: přepnout taktiku", "vcmi.keyBindings.keyBinding.highScoresCampaigns" : "Žebříčky: kampaně", "vcmi.keyBindings.keyBinding.highScoresReset" : "Žebříčky: reset", "vcmi.keyBindings.keyBinding.highScoresStatistics" : "Žebříčky: statistiky", @@ -1078,7 +1078,7 @@ "spell.core.deathCloud.description.none" : "{Smrtící mrak}\n\nKromě cílového pole zasáhne smrtící mrak i všech 6 sousedních polí a způsobí poškození všem živým jednotkám v dosahu.", "spell.core.thunderbolt.description.none" : "{Úder blesku}\n\nPři útoku má jednotka 20% šanci vyvolat blesk ještě před nepřátelským protiútokem. Blesk způsobí poškození rovnající se desetinásobku počtu útočících hromových ptáků.", "spell.core.dispelHelpful.description.none" : "{Ruší kladná kouzla}\n\nOdstraní všechny pozitivní kouzelné efekty z cílové jednotky.", - "spell.core.acidBreath.description.none" : "{Kyselina}\n\nDech sníží obranu cílové jednotky o 3 body a má 20% šanci způsobit dodatečné poškození ve výši 25 bodů za každou útočící jednotku." + "spell.core.acidBreath.description.none" : "{Kyselina}\n\nDech sníží obranu cílové jednotky o 3 body a má 20% šanci způsobit dodatečné poškození ve výši 25 bodů za každou útočící jednotku.", "spellSchool.core.air.name" : "Vdušných", "spellSchool.core.earth.name" : "Zemských", From 185d14791f87411aa4e9602ae5930d29a7e47d39 Mon Sep 17 00:00:00 2001 From: George King <98261225+GeorgeK1ng@users.noreply.github.com> Date: Wed, 3 Sep 2025 14:21:23 +0200 Subject: [PATCH 10/22] Update cache_cleanup.yml --- .github/workflows/cache_cleanup.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cache_cleanup.yml b/.github/workflows/cache_cleanup.yml index 379344c61..702db76f8 100644 --- a/.github/workflows/cache_cleanup.yml +++ b/.github/workflows/cache_cleanup.yml @@ -1,4 +1,4 @@ -name: Cleanup GitHub runner caches on closed pull requests +name: Cleanup GitHub runner caches on closed PRs on: pull_request: types: @@ -16,8 +16,8 @@ jobs: GH_REPO: ${{ github.repository }} PR_NUMBER: ${{ github.event.pull_request.number }} run: | - # List caches whose key contains "-PR-" - ids=$(gh cache list --limit 2000 --json id,key --jq ".[] | select(.key | contains(\"-PR-${PR_NUMBER}\")) | .id") + # List caches whose key contains "-PR--" + ids=$(gh cache list --limit 2000 --json id,key --jq ".[] | select(.key | test(\"-PR-${PR_NUMBER}-\")) | .id") # Delete them (best effort) set +e From 05ef1348dbe5d6940c7295d65f351853bc832bef Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Wed, 3 Sep 2025 20:48:57 +0200 Subject: [PATCH 11/22] add comment --- launcher/helper.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/launcher/helper.cpp b/launcher/helper.cpp index 27ced433c..828733455 100644 --- a/launcher/helper.cpp +++ b/launcher/helper.cpp @@ -110,6 +110,9 @@ void performNativeCopy(QString src, QString dst) return QString::fromUtf8(encoded); }; + // %-encode unencoded parts of string. + // This is needed because QT returns a mixed content url with %-encoded and unencoded parts. If Android > 13 this causes problems reading this files. E.g. when using spaces and unicode characters in folder or filename. + // Related, but seems not completly fixed (at least in our setup): https://bugreports.qt.io/browse/QTBUG-114435 auto safeEncode = [&](QString uri) -> QString { if(!uri.startsWith("content://", Qt::CaseInsensitive)) From aada2eccf7066a714851c1da3f98ab06f6a5bdb7 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Wed, 3 Sep 2025 20:58:30 +0200 Subject: [PATCH 12/22] code review --- .../src/main/java/eu/vcmi/vcmi/ActivityLauncher.java | 8 ++++---- ios/iOS_utils.h | 2 +- ios/iOS_utils.mm | 4 ++-- launcher/helper.cpp | 8 ++++---- launcher/helper.h | 2 +- launcher/modManager/cmodlistview_moc.cpp | 7 +++++-- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java b/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java index 25ed0026f..b851ea925 100644 --- a/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java +++ b/android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityLauncher.java @@ -57,12 +57,12 @@ public class ActivityLauncher extends org.qtproject.qt5.android.bindings.QtActiv startActivityForResult(intent, PICK_EXTERNAL_VCMI_DATA_TO_COPY); } - public void setScreensaverEnabled(boolean on) + public void keepScreenOn(boolean isEnabled) { - if(on) - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - else + if(isEnabled) getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + else + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } public void onLaunchGameBtnPressed() diff --git a/ios/iOS_utils.h b/ios/iOS_utils.h index 66a9ac28c..3f1728bb6 100644 --- a/ios/iOS_utils.h +++ b/ios/iOS_utils.h @@ -27,6 +27,6 @@ const char *frameworksPath(); const char *bundleIdentifier(); bool isOsVersionAtLeast(unsigned int osMajorVersion); -void setScreensaverEnabled(bool isEnabled); +void keepScreenOn(bool isEnabled); } #pragma GCC visibility pop diff --git a/ios/iOS_utils.mm b/ios/iOS_utils.mm index f85363b15..724673f6f 100644 --- a/ios/iOS_utils.mm +++ b/ios/iOS_utils.mm @@ -53,8 +53,8 @@ bool isOsVersionAtLeast(unsigned int osMajorVersion) return NSProcessInfo.processInfo.operatingSystemVersion.majorVersion >= osMajorVersion; } -void setScreensaverEnabled(bool isEnabled) +void keepScreenOn(bool isEnabled) { - UIApplication.sharedApplication.idleTimerDisabled = isEnabled ? NO : YES; + UIApplication.sharedApplication.idleTimerDisabled = isEnabled ? YES : NO; } } diff --git a/launcher/helper.cpp b/launcher/helper.cpp index c64a389ff..66fd131ef 100644 --- a/launcher/helper.cpp +++ b/launcher/helper.cpp @@ -117,15 +117,15 @@ MainWindow * getMainWindow() } -void keepScreenOn(bool on) +void keepScreenOn(bool isEnabled) { #if defined(VCMI_ANDROID) - QtAndroid::runOnAndroidThread([on] + QtAndroid::runOnAndroidThread([isEnabled] { - QtAndroid::androidActivity().callMethod("setScreensaverEnabled", "(Z)V", !on); + QtAndroid::androidActivity().callMethod("keepScreenOn", "(Z)V", isEnabled); }); #elif defined(VCMI_IOS) - iOS_utils::setScreensaverEnabled(!on); + iOS_utils::keepScreenOn(isEnabled); #endif } } diff --git a/launcher/helper.h b/launcher/helper.h index 23358b3e2..7b8dc16bf 100644 --- a/launcher/helper.h +++ b/launcher/helper.h @@ -23,5 +23,5 @@ QString getRealPath(QString path); void performNativeCopy(QString src, QString dst); void revealDirectoryInFileBrowser(QString path); MainWindow * getMainWindow(); -void keepScreenOn(bool on); +void keepScreenOn(bool isEnabled); } diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp index 75c9becce..f111a82f8 100644 --- a/launcher/modManager/cmodlistview_moc.cpp +++ b/launcher/modManager/cmodlistview_moc.cpp @@ -807,7 +807,6 @@ void CModListView::downloadProgress(qint64 current, qint64 max) void CModListView::extractionProgress(qint64 current, qint64 max) { - Helper::keepScreenOn(true); // display progress, in extracted files ui->progressBar->setVisible(true); ui->progressBar->setMaximum(max); @@ -854,12 +853,12 @@ void CModListView::downloadFinished(QStringList savedFiles, QStringList failedFi if(doInstallFiles) installFiles(savedFiles); + Helper::keepScreenOn(false); hideProgressBar(); } void CModListView::hideProgressBar() { - Helper::keepScreenOn(false); if(dlManager == nullptr) // it was not recreated meanwhile { ui->progressWidget->setVisible(false); @@ -983,6 +982,8 @@ void CModListView::installFiles(QStringList files) float prog = 0.0; + Helper::keepScreenOn(true); + auto futureExtract = std::async(std::launch::async, [this, exe, &prog]() { ChroniclesExtractor ce(this, [&prog](float progress) { prog = progress; }); @@ -998,6 +999,7 @@ void CModListView::installFiles(QStringList files) if(futureExtract.get()) { + Helper::keepScreenOn(false); hideProgressBar(); ui->abortButton->setEnabled(true); ui->progressWidget->setVisible(false); @@ -1236,6 +1238,7 @@ void CModListView::on_abortButton_clicked() { delete dlManager; dlManager = nullptr; + Helper::keepScreenOn(false); hideProgressBar(); } From 2ba921533fd9b5af482dbc80753d51a912239d92 Mon Sep 17 00:00:00 2001 From: George King <98261225+GeorgeK1ng@users.noreply.github.com> Date: Wed, 3 Sep 2025 23:51:14 +0200 Subject: [PATCH 13/22] Update CMainMenu.cpp --- client/mainmenu/CMainMenu.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/mainmenu/CMainMenu.cpp b/client/mainmenu/CMainMenu.cpp index c4ccf9eb2..fdf2aa717 100644 --- a/client/mainmenu/CMainMenu.cpp +++ b/client/mainmenu/CMainMenu.cpp @@ -335,7 +335,13 @@ CMainMenu::CMainMenu() menu = std::make_shared(CMainMenuConfig::get().getConfig()["window"]); OBJECT_CONSTRUCTION; - backgroundAroundMenu = std::make_shared(ImagePath::builtin("DIBOXBCK"), pos); + + const auto& bgConfig = CMainMenuConfig::get().getConfig()["backgroundAround"]; + + if (bgConfig.isString()) + backgroundAroundMenu = std::make_shared(ImagePath::fromJson(bgConfig), pos); + else + backgroundAroundMenu = std::make_shared(ImagePath::builtin("DIBOXBCK"), pos); } CMainMenu::~CMainMenu() = default; From d448e1e8fbff3510b875729da8f159c1d7dff047 Mon Sep 17 00:00:00 2001 From: George King <98261225+GeorgeK1ng@users.noreply.github.com> Date: Wed, 3 Sep 2025 23:55:54 +0200 Subject: [PATCH 14/22] Update mainmenu.json --- config/mainmenu.json | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/config/mainmenu.json b/config/mainmenu.json index 8dce3e840..3c42b0613 100644 --- a/config/mainmenu.json +++ b/config/mainmenu.json @@ -1,5 +1,8 @@ { - //images used in game selection screen + // Image around main menu + "backgroundAround" : "diboxbck", + + // Images used in game selection screen "scenario-selection" : { "background" : ["gamselb0", "gamselb1"], @@ -35,17 +38,17 @@ }, - //Multiplayer selection image + // Multiplayer selection image "multiplayer" : ["mumap"], - //Main menu window, consists of several sub-menus aka items + // Main menu window, consists of several sub-menus aka items "window": { - //"scalable" : true, //background will be scaled to screen size + //"scalable" : true, // Background will be scaled to screen size "background" : ["gamselbk"], - //"video" : {"x": 8, "y": 105, "name":"CREDITS.SMK" },//Floating WoG logo. Disabled due to different position in various versions of H3. + //"video" : {"x": 8, "y": 105, "name":"CREDITS.SMK" }, // Floating WoG logo. Disabled due to different position in various versions of H3. // Additional images //"images": From 5a5903bad8711f9a2128c4c5d75abea2eeeea3c4 Mon Sep 17 00:00:00 2001 From: Andrey Filipenkov Date: Sat, 30 Aug 2025 19:40:12 +0300 Subject: [PATCH 15/22] [android] opt out of edge-to-edge on Android >= 15 + SDK 35 --- android/AndroidManifest.xml | 4 +++- android/vcmi-app/build.gradle | 1 + android/vcmi-app/src/main/res/values-v21/styles.xml | 7 +++++++ android/vcmi-app/src/main/res/values/styles.xml | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 android/vcmi-app/src/main/res/values-v21/styles.xml create mode 100644 android/vcmi-app/src/main/res/values/styles.xml diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index fc855243e..d5bc59c6f 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -31,7 +31,9 @@ android:label="${applicationLabel}" android:testOnly="false" android:supportsRtl="true" - android:usesCleartextTraffic="false"> + android:usesCleartextTraffic="false" + android:theme="@style/AppTheme" + > + + + diff --git a/android/vcmi-app/src/main/res/values/styles.xml b/android/vcmi-app/src/main/res/values/styles.xml new file mode 100644 index 000000000..87290b416 --- /dev/null +++ b/android/vcmi-app/src/main/res/values/styles.xml @@ -0,0 +1,4 @@ + + +