From f59834afe1f1b812e9dd9ae9d061e0f9c2063607 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 19 Nov 2024 14:38:27 +0000 Subject: [PATCH 01/19] Fixes for configurable markets support - string "speech" can now be translated - removed "title" string, VCMI will now use object name instead - moved configuration of all "markets" into a separate json file - added schema for validation of market objects - removed serialization of translated strings from University --- client/windows/GUIClasses.cpp | 4 +- config/gameConfig.json | 1 + config/objects/generic.json | 138 ------------------ config/objects/markets.json | 138 ++++++++++++++++++ config/schemas/market.json | 50 +++++++ .../CommonConstructors.cpp | 55 ++++--- .../CommonConstructors.h | 14 +- lib/mapObjects/CGMarket.cpp | 7 +- lib/mapObjects/CGMarket.h | 21 ++- lib/serializer/ESerializationVersion.h | 3 +- 10 files changed, 252 insertions(+), 179 deletions(-) create mode 100644 config/objects/markets.json create mode 100644 config/schemas/market.json diff --git a/client/windows/GUIClasses.cpp b/client/windows/GUIClasses.cpp index 209b03ef7..ddc78eace 100644 --- a/client/windows/GUIClasses.cpp +++ b/client/windows/GUIClasses.cpp @@ -951,8 +951,8 @@ CUniversityWindow::CUniversityWindow(const CGHeroInstance * _hero, BuildingID bu else if(auto uni = dynamic_cast(_market); uni->appearance) { titlePic = std::make_shared(uni->appearance->animationFile, 0, 0, 0, 0, CShowableAnim::CREATURE_MODE); - titleStr = uni->title; - speechStr = uni->speech; + titleStr = uni->getObjectName(); + speechStr = uni->getSpeechTranslated(); } else { diff --git a/config/gameConfig.json b/config/gameConfig.json index 0f51e2ea7..9692abfaf 100644 --- a/config/gameConfig.json +++ b/config/gameConfig.json @@ -56,6 +56,7 @@ "config/objects/lighthouse.json", "config/objects/magicSpring.json", "config/objects/magicWell.json", + "config/objects/markets.json", "config/objects/moddables.json", "config/objects/observatory.json", "config/objects/pyramid.json", diff --git a/config/objects/generic.json b/config/objects/generic.json index 238cfd848..3be342df6 100644 --- a/config/objects/generic.json +++ b/config/objects/generic.json @@ -18,115 +18,6 @@ } }, - "altarOfSacrifice" : { - "index" :2, - "handler" : "market", - "base" : { - "sounds" : { - "visit" : ["MYSTERY"] - } - }, - "types" : { - "object" : { - "index" : 0, - "aiValue" : 100, - "rmg" : { - "zoneLimit" : 1, - "value" : 100, - "rarity" : 20 - }, - "modes" : ["creature-experience", "artifact-experience"] - } - } - }, - "tradingPost" : { - "index" :221, - "handler" : "market", - "base" : { - "sounds" : { - "ambient" : ["LOOPMARK"], - "visit" : ["STORE"] - } - }, - "types" : { - "object" : { - "index" : 0, - "aiValue" : 100, - "rmg" : { - "zoneLimit" : 1, - "value" : 100, - "rarity" : 100 - }, - "modes" : ["resource-resource", "resource-player"], - "efficiency" : 5, - "title" : "core.genrltxt.159" - } - } - }, - "tradingPostDUPLICATE" : { - "index" :99, - "handler" : "market", - "base" : { - "sounds" : { - "ambient" : ["LOOPMARK"], - "visit" : ["STORE"] - } - }, - "types" : { - "object" : { - "index" : 0, - "aiValue" : 100, - "rmg" : { - "zoneLimit" : 1, - "value" : 100, - "rarity" : 100 - }, - "modes" : ["resource-resource", "resource-player"], - "efficiency" : 5, - "title" : "core.genrltxt.159" - } - } - }, - "freelancersGuild" : { - "index" :213, - "handler" : "market", - "types" : { - "object" : { - "index" : 0, - "aiValue" : 100, - "rmg" : { - "zoneLimit" : 1, - "value" : 100, - "rarity" : 100 - }, - "modes" : ["creature-resource"] - } - } - }, - - "blackMarket" : { - "index" :7, - "handler" : "market", - "base" : { - "sounds" : { - "ambient" : ["LOOPMARK"], - "visit" : ["MYSTERY"] - } - }, - "types" : { - "object" : { - "index" : 0, - "aiValue" : 8000, - "rmg" : { - "value" : 8000, - "rarity" : 20 - }, - "modes" : ["resource-artifact"], - "title" : "core.genrltxt.349" - } - } - }, - "pandoraBox" : { "index" :6, "handler" : "pandora", @@ -393,35 +284,6 @@ } } }, - "university" : { - "index" :104, - "handler" : "market", - "base" : { - "sounds" : { - "visit" : ["GAZEBO"] - } - }, - "types" : { - "object" : { - "index" : 0, - "aiValue" : 2500, - "rmg" : { - "value" : 2500, - "rarity" : 20 - }, - "modes" : ["resource-skill"], - "title" : "core.genrltxt.602", - "speech" : "core.genrltxt.603", - "offer": - [ - { "noneOf" : ["necromancy"] }, - { "noneOf" : ["necromancy"] }, - { "noneOf" : ["necromancy"] }, - { "noneOf" : ["necromancy"] } - ] - } - } - }, "questGuard" : { "index" :215, "handler" : "questGuard", diff --git a/config/objects/markets.json b/config/objects/markets.json new file mode 100644 index 000000000..ea5c517b9 --- /dev/null +++ b/config/objects/markets.json @@ -0,0 +1,138 @@ +{ + "altarOfSacrifice" : { + "index" :2, + "handler" : "market", + "base" : { + "sounds" : { + "visit" : ["MYSTERY"] + } + }, + "types" : { + "object" : { + "index" : 0, + "aiValue" : 100, + "rmg" : { + "zoneLimit" : 1, + "value" : 100, + "rarity" : 20 + }, + "modes" : ["creature-experience", "artifact-experience"] + } + } + }, + + "tradingPost" : { + "index" :221, + "handler" : "market", + "base" : { + "sounds" : { + "ambient" : ["LOOPMARK"], + "visit" : ["STORE"] + } + }, + "types" : { + "object" : { + "index" : 0, + "aiValue" : 100, + "rmg" : { + "zoneLimit" : 1, + "value" : 100, + "rarity" : 100 + }, + "modes" : ["resource-resource", "resource-player"], + "efficiency" : 5 + } + } + }, + + "tradingPostDUPLICATE" : { + "index" :99, + "handler" : "market", + "base" : { + "sounds" : { + "ambient" : ["LOOPMARK"], + "visit" : ["STORE"] + } + }, + "types" : { + "object" : { + "index" : 0, + "aiValue" : 100, + "rmg" : { + "zoneLimit" : 1, + "value" : 100, + "rarity" : 100 + }, + "modes" : ["resource-resource", "resource-player"], + "efficiency" : 5 + } + } + }, + + "freelancersGuild" : { + "index" :213, + "handler" : "market", + "types" : { + "object" : { + "index" : 0, + "aiValue" : 100, + "rmg" : { + "zoneLimit" : 1, + "value" : 100, + "rarity" : 100 + }, + "modes" : ["creature-resource"] + } + } + }, + + "blackMarket" : { + "index" :7, + "handler" : "market", + "base" : { + "sounds" : { + "ambient" : ["LOOPMARK"], + "visit" : ["MYSTERY"] + } + }, + "types" : { + "object" : { + "index" : 0, + "aiValue" : 8000, + "rmg" : { + "value" : 8000, + "rarity" : 20 + }, + "modes" : ["resource-artifact"] + } + } + }, + "university" : { + "index" :104, + "handler" : "market", + "base" : { + "sounds" : { + "visit" : ["GAZEBO"] + } + }, + "types" : { + "object" : { + "index" : 0, + "aiValue" : 2500, + "rmg" : { + "value" : 2500, + "rarity" : 20 + }, + "modes" : ["resource-skill"], + "speech" : "@core.genrltxt.603", + "offer": + [ + { "noneOf" : ["necromancy"] }, + { "noneOf" : ["necromancy"] }, + { "noneOf" : ["necromancy"] }, + { "noneOf" : ["necromancy"] } + ] + } + } + } +} \ No newline at end of file diff --git a/config/schemas/market.json b/config/schemas/market.json new file mode 100644 index 000000000..7554b453a --- /dev/null +++ b/config/schemas/market.json @@ -0,0 +1,50 @@ +{ + "type" : "object", + "$schema" : "http://json-schema.org/draft-04/schema", + "title" : "VCMI map object format", + "description" : "Description of map object class", + "required" : [ "modes" ], + + "additionalProperties" : false, + + "properties" : { + "description" : { + "description" : "Message that will be shown on right-clicking this object", + "type" : "string" + }, + + "speech" : { + "description" : "Message that will be shown to player on visiting this object", + "type" : "string" + }, + + "modes" : { + "type" : "array", + "items" : { + "enum" : [ "resource-resource", "resource-player", "creature-resource", "resource-artifact", "artifact-resource", "artifact-experience", "creature-experience", "creature-undead", "resource-skill" ], + "type" : "string" + } + }, + "efficiency" : { + "type" : "number", + "minimum" : 1, + "maximum" : 9 + }, + "offer" : { + "type" : "array" + }, + + // Properties that might appear since this node is shared with object config + "compatibilityIdentifiers" : { }, + "blockedVisitable" : { }, + "removable" : { }, + "aiValue" : { }, + "index" : { }, + "base" : { }, + "name" : { }, + "rmg" : { }, + "templates" : { }, + "battleground" : { }, + "sounds" : { } + } +} diff --git a/lib/mapObjectConstructors/CommonConstructors.cpp b/lib/mapObjectConstructors/CommonConstructors.cpp index 57b52bd43..a3986304a 100644 --- a/lib/mapObjectConstructors/CommonConstructors.cpp +++ b/lib/mapObjectConstructors/CommonConstructors.cpp @@ -17,8 +17,10 @@ #include "../TerrainHandler.h" #include "../VCMI_Lib.h" +#include "../CConfigHandler.h" #include "../entities/faction/CTownHandler.h" #include "../entities/hero/CHeroClass.h" +#include "../json/JsonUtils.h" #include "../mapObjects/CGHeroInstance.h" #include "../mapObjects/CGMarket.h" #include "../mapObjects/CGTownInstance.h" @@ -242,10 +244,28 @@ AnimationPath BoatInstanceConstructor::getBoatAnimationName() const void MarketInstanceConstructor::initTypeData(const JsonNode & input) { + if (settings["mods"]["validation"].String() != "off") + JsonUtils::validate(input, "vcmi:market", getJsonKey()); + if (!input["description"].isNull()) { - description = input["description"].String(); - VLC->generaltexth->registerString(input.getModScope(), TextIdentifier(getBaseTextID(), "description"), description); + std::string description = input["description"].String(); + descriptionTextID = TextIdentifier(getBaseTextID(), "description").get(); + VLC->generaltexth->registerString( input.getModScope(), descriptionTextID, input["description"]); + } + + if (!input["speech"].isNull()) + { + std::string speech = input["speech"].String(); + if (!speech.empty() && speech.at(0) == '@') + { + speechTextID = speech.substr(1); + } + else + { + speechTextID = TextIdentifier(getBaseTextID(), "speech").get(); + VLC->generaltexth->registerString( input.getModScope(), speechTextID, input["speech"]); + } } for(auto & element : input["modes"].Vector()) @@ -256,14 +276,11 @@ void MarketInstanceConstructor::initTypeData(const JsonNode & input) marketEfficiency = input["efficiency"].isNull() ? 5 : input["efficiency"].Integer(); predefinedOffer = input["offer"]; - - title = input["title"].String(); - speech = input["speech"].String(); } bool MarketInstanceConstructor::hasDescription() const { - return !description.empty(); + return !descriptionTextID.empty(); } CGMarket * MarketInstanceConstructor::createObject(IGameCallback * cb) const @@ -283,21 +300,6 @@ CGMarket * MarketInstanceConstructor::createObject(IGameCallback * cb) const return new CGMarket(cb); } -void MarketInstanceConstructor::initializeObject(CGMarket * market) const -{ - market->marketEfficiency = marketEfficiency; - - if(auto university = dynamic_cast(market)) - { - university->title = market->getObjectName(); - if(!title.empty()) - university->title = VLC->generaltexth->translate(title); - - if(!speech.empty()) - university->speech = VLC->generaltexth->translate(speech); - } -} - const std::set & MarketInstanceConstructor::availableModes() const { return marketModes; @@ -315,4 +317,15 @@ void MarketInstanceConstructor::randomizeObject(CGMarket * object, vstd::RNG & r } } +std::string MarketInstanceConstructor::getSpeechTranslated() const +{ + assert(marketModes.count(EMarketMode::RESOURCE_SKILL)); + return VLC->generaltexth->translate(speechTextID); +} + +int MarketInstanceConstructor::getMarketEfficiency() const +{ + return marketEfficiency; +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/mapObjectConstructors/CommonConstructors.h b/lib/mapObjectConstructors/CommonConstructors.h index 8d4abcc67..73ba43874 100644 --- a/lib/mapObjectConstructors/CommonConstructors.h +++ b/lib/mapObjectConstructors/CommonConstructors.h @@ -115,25 +115,23 @@ public: class MarketInstanceConstructor : public CDefaultObjectTypeHandler { -protected: - void initTypeData(const JsonNode & config) override; + std::string descriptionTextID; + std::string speechTextID; std::set marketModes; JsonNode predefinedOffer; int marketEfficiency; - - std::string description; - std::string title; - std::string speech; - + + void initTypeData(const JsonNode & config) override; public: CGMarket * createObject(IGameCallback * cb) const override; - void initializeObject(CGMarket * object) const override; void randomizeObject(CGMarket * object, vstd::RNG & rng) const override; const std::set & availableModes() const; bool hasDescription() const; + std::string getSpeechTranslated() const; + int getMarketEfficiency() const; }; VCMI_LIB_NAMESPACE_END diff --git a/lib/mapObjects/CGMarket.cpp b/lib/mapObjects/CGMarket.cpp index ff2118bf2..a7eef18ad 100644 --- a/lib/mapObjects/CGMarket.cpp +++ b/lib/mapObjects/CGMarket.cpp @@ -57,7 +57,7 @@ std::string CGMarket::getPopupText(const CGHeroInstance * hero) const int CGMarket::getMarketEfficiency() const { - return marketEfficiency; + return getMarketHandler()->getMarketEfficiency(); } int CGMarket::availableUnits(EMarketMode mode, int marketItemSerial) const @@ -125,6 +125,11 @@ std::vector CGUniversity::availableItemsIds(EMarketMode mode) cons } } +std::string CGUniversity::getSpeechTranslated() const +{ + return getMarketHandler()->getSpeechTranslated(); +} + void CGUniversity::onHeroVisit(const CGHeroInstance * h) const { cb->showObjectWindow(this, EOpenWindowMode::UNIVERSITY_WINDOW, h, true); diff --git a/lib/mapObjects/CGMarket.h b/lib/mapObjects/CGMarket.h index b28a386bc..6f4f92a42 100644 --- a/lib/mapObjects/CGMarket.h +++ b/lib/mapObjects/CGMarket.h @@ -19,11 +19,10 @@ class MarketInstanceConstructor; class DLL_LINKAGE CGMarket : public CGObjectInstance, public IMarket { +protected: std::shared_ptr getMarketHandler() const; public: - int marketEfficiency; - CGMarket(IGameCallback *cb); ///IObjectInterface void onHeroVisit(const CGHeroInstance * h) const override; //open trading window @@ -48,7 +47,12 @@ public: h & marketModes; } - h & marketEfficiency; + if (h.version < Handler::Version::MARKET_TRANSLATION_FIX) + { + int unused = 0; + h & unused; + } + if (h.version < Handler::Version::NEW_MARKETS) { std::string speech; @@ -103,8 +107,8 @@ class DLL_LINKAGE CGUniversity : public CGMarket { public: using CGMarket::CGMarket; - std::string speech; //currently shown only in university - std::string title; + + std::string getSpeechTranslated() const; std::vector skills; //available skills @@ -115,10 +119,11 @@ public: { h & static_cast(*this); h & skills; - if (h.version >= Handler::Version::NEW_MARKETS) + if (h.version >= Handler::Version::NEW_MARKETS && h.version < Handler::Version::MARKET_TRANSLATION_FIX) { - h & speech; - h & title; + std::string temp; + h & temp; + h & temp; } } }; diff --git a/lib/serializer/ESerializationVersion.h b/lib/serializer/ESerializationVersion.h index 5e038bbf0..fbf723a88 100644 --- a/lib/serializer/ESerializationVersion.h +++ b/lib/serializer/ESerializationVersion.h @@ -68,6 +68,7 @@ enum class ESerializationVersion : int32_t REMOVE_VLC_POINTERS, // 869 removed remaining pointers to VLC entities FOLDER_NAME_REWORK, // 870 - rework foldername REWARDABLE_GUARDS, // 871 - fix missing serialization of guards in rewardable objects + MARKET_TRANSLATION_FIX, // 872 - remove serialization of markets translateable strings - CURRENT = REWARDABLE_GUARDS + CURRENT = MARKET_TRANSLATION_FIX }; From aef6b0cc00fb9ba7961bfe69f13c0d5fb01c173a Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 20 Nov 2024 16:06:38 +0000 Subject: [PATCH 02/19] Fix several new issues detected by SonarCloud --- client/renderSDL/RenderHandler.cpp | 4 ++-- client/renderSDL/RenderHandler.h | 4 ++-- client/renderSDL/SDLImage.cpp | 11 +++++++---- lib/CCreatureSet.cpp | 2 +- lib/spells/CSpellHandler.cpp | 4 ++-- server/battles/BattleActionProcessor.cpp | 2 +- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/client/renderSDL/RenderHandler.cpp b/client/renderSDL/RenderHandler.cpp index ccfd5bec8..c76af1242 100644 --- a/client/renderSDL/RenderHandler.cpp +++ b/client/renderSDL/RenderHandler.cpp @@ -55,7 +55,7 @@ std::shared_ptr RenderHandler::getAnimationFile(const AnimationPath & return result; } -std::optional RenderHandler::getPathForScaleFactor(ResourcePath path, std::string factor) +std::optional RenderHandler::getPathForScaleFactor(const ResourcePath & path, const std::string & factor) { if(path.getType() == EResType::IMAGE) { @@ -80,7 +80,7 @@ std::optional RenderHandler::getPathForScaleFactor(ResourcePath pa return std::nullopt; } -std::pair RenderHandler::getScalePath(ResourcePath p) +std::pair RenderHandler::getScalePath(const ResourcePath & p) { auto path = p; int scaleFactor = 1; diff --git a/client/renderSDL/RenderHandler.h b/client/renderSDL/RenderHandler.h index d7b028762..43df617a1 100644 --- a/client/renderSDL/RenderHandler.h +++ b/client/renderSDL/RenderHandler.h @@ -29,8 +29,8 @@ class RenderHandler : public IRenderHandler std::map> fonts; std::shared_ptr getAnimationFile(const AnimationPath & path); - std::optional getPathForScaleFactor(ResourcePath path, std::string factor); - std::pair getScalePath(ResourcePath p); + std::optional getPathForScaleFactor(const ResourcePath & path, const std::string & factor); + std::pair getScalePath(const ResourcePath & p); AnimationLayoutMap & getAnimationLayout(const AnimationPath & path); void initFromJson(AnimationLayoutMap & layout, const JsonNode & config); diff --git a/client/renderSDL/SDLImage.cpp b/client/renderSDL/SDLImage.cpp index 449b3bbfe..84d37e7ee 100644 --- a/client/renderSDL/SDLImage.cpp +++ b/client/renderSDL/SDLImage.cpp @@ -283,7 +283,10 @@ std::shared_ptr SDLImageShared::scaleInteger(int factor, SDL if (factor <= 0) throw std::runtime_error("Unable to scale by integer value of " + std::to_string(factor)); - if (palette && surf && surf->format->palette) + if (!surf) + return shared_from_this(); + + if (palette && surf->format->palette) SDL_SetSurfacePalette(surf, palette); SDL_Surface * scaled = nullptr; @@ -306,7 +309,7 @@ std::shared_ptr SDLImageShared::scaleInteger(int factor, SDL // erase our own reference SDL_FreeSurface(scaled); - if (surf && surf->format->palette) + if (surf->format->palette) SDL_SetSurfacePalette(surf, originalPalette); return ret; @@ -314,8 +317,8 @@ std::shared_ptr SDLImageShared::scaleInteger(int factor, SDL std::shared_ptr SDLImageShared::scaleTo(const Point & size, SDL_Palette * palette) const { - float scaleX = float(size.x) / fullSize.x; - float scaleY = float(size.y) / fullSize.y; + float scaleX = static_cast(size.x) / fullSize.x; + float scaleY = static_cast(size.y) / fullSize.y; if (palette && surf->format->palette) SDL_SetSurfacePalette(surf, palette); diff --git a/lib/CCreatureSet.cpp b/lib/CCreatureSet.cpp index d96f4e79d..f99232333 100644 --- a/lib/CCreatureSet.cpp +++ b/lib/CCreatureSet.cpp @@ -725,7 +725,7 @@ int CStackInstance::getExpRank() const int CStackInstance::getLevel() const { - return std::max(1, static_cast(getType()->getLevel())); + return std::max(1, getType()->getLevel()); } void CStackInstance::giveStackExp(TExpType exp) diff --git a/lib/spells/CSpellHandler.cpp b/lib/spells/CSpellHandler.cpp index e1154b107..79619ac51 100644 --- a/lib/spells/CSpellHandler.cpp +++ b/lib/spells/CSpellHandler.cpp @@ -544,8 +544,8 @@ void CSpell::serializeJson(JsonSerializeFormat & handler) ///CSpell::AnimationInfo CSpell::AnimationItem::AnimationItem() : verticalPosition(VerticalPosition::TOP), - pause(0), - transparency(1) + transparency(1), + pause(0) { } diff --git a/server/battles/BattleActionProcessor.cpp b/server/battles/BattleActionProcessor.cpp index 6855fd6c9..767cfc065 100644 --- a/server/battles/BattleActionProcessor.cpp +++ b/server/battles/BattleActionProcessor.cpp @@ -917,7 +917,7 @@ void BattleActionProcessor::makeAttack(const CBattleInfoCallback & battle, const handleAttackBeforeCasting(battle, ranged, attacker, defender); // If the attacker or defender is not alive before the attack action, the action should be skipped. - if((attacker && !attacker->alive()) || (defender && !defender->alive())) + if((!attacker->alive()) || (defender && !defender->alive())) return; FireShieldInfo fireShield; From e00c2b0c6d167ccab301fb6de2c1bb08a57f87b9 Mon Sep 17 00:00:00 2001 From: Maurycy <55395993+XCOM-HUB@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:04:14 +0100 Subject: [PATCH 03/19] Update swedish.json --- Mods/vcmi/config/swedish.json | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Mods/vcmi/config/swedish.json b/Mods/vcmi/config/swedish.json index e981350dc..6da1005be 100644 --- a/Mods/vcmi/config/swedish.json +++ b/Mods/vcmi/config/swedish.json @@ -28,6 +28,13 @@ "vcmi.adventureMap.movementPointsHeroInfo" : "(Förflyttningspoäng: %REMAINING / %POINTS)", "vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Tyvärr, att spela om motståndarens tur är inte implementerat ännu!", + "vcmi.bonusSource.artifact" : "Artefakt", + "vcmi.bonusSource.creature" : "Förmåga", + "vcmi.bonusSource.spell" : "Trollformel", + "vcmi.bonusSource.hero" : "Hjälte", + "vcmi.bonusSource.commander": "Befälhavare", + "vcmi.bonusSource.other" : "Annan", + "vcmi.capitalColors.0" : "Röd", "vcmi.capitalColors.1" : "Blå", "vcmi.capitalColors.2" : "Ljusbrun", @@ -42,6 +49,12 @@ "vcmi.heroOverview.secondarySkills" : "Sekundärförmågor", "vcmi.heroOverview.spells" : "Trollformler", + "vcmi.quickExchange.moveUnit" : "Flytta enhet", + "vcmi.quickExchange.moveAllUnits" : "Flytta alla enheter", + "vcmi.quickExchange.swapAllUnits" : "Byt arméer", + "vcmi.quickExchange.moveAllArtifacts": "Flytta alla artefakter", + "vcmi.quickExchange.swapAllArtifacts": "Byt artefakter", + "vcmi.radialWheel.mergeSameUnit" : "Slå samman varelser av samma sort", "vcmi.radialWheel.fillSingleUnit" : "Fyll på med enstaka varelser", "vcmi.radialWheel.splitSingleUnit" : "Dela av en enda varelse", @@ -61,6 +74,16 @@ "vcmi.radialWheel.moveDown" : "Flytta nedåt", "vcmi.radialWheel.moveBottom" : "Flytta längst ner", + "vcmi.randomMap.description" : "Kartan skapades av den slumpmässiga kartgeneratorn.\nMallen var %s, storlek %dx%d, nivåer %d, spelare %d, datorspelare %d, vatten %s, monster %s, VCMI karta", + "vcmi.randomMap.description.isHuman" : ", %s är människa", + "vcmi.randomMap.description.townChoice" : ", %s valde stadstyp: %s", + "vcmi.randomMap.description.water.none" : "inget", + "vcmi.randomMap.description.water.normal" : "normalt", + "vcmi.randomMap.description.water.islands" : "öar", + "vcmi.randomMap.description.monster.weak" : "svaga", + "vcmi.randomMap.description.monster.normal": "normala", + "vcmi.randomMap.description.monster.strong": "starka", + "vcmi.spellBook.search" : "sök...", "vcmi.spellResearch.canNotAfford" : "Du har inte råd att byta ut '{%SPELL1}' med '{%SPELL2}'. Du kan fortfarande göra dig av med den här trollformeln och forska vidare.", @@ -69,6 +92,7 @@ "vcmi.spellResearch.research" : "Forska fram denna trollformel", "vcmi.spellResearch.skip" : "Strunta i denna trollformel", "vcmi.spellResearch.abort" : "Avbryt", + "vcmi.spellResearch.noMoreSpells" : "Det finns inga fler trollformler tillgängliga för forskning.", "vcmi.mainMenu.serverConnecting" : "Ansluter...", "vcmi.mainMenu.serverAddressEnter" : "Ange adress:", @@ -90,6 +114,12 @@ "vcmi.lobby.handicap.resource" : "Ger spelarna lämpliga resurser att börja med utöver de normala startresurserna. Negativa värden är tillåtna men är begränsade till 0 totalt (spelaren börjar aldrig med negativa resurser).", "vcmi.lobby.handicap.income" : "Ändrar spelarens olika inkomster i procent (resultaten avrundas uppåt).", "vcmi.lobby.handicap.growth" : "Ändrar tillväxttakten för varelser i de städer som ägs av spelaren (resultaten avrundas uppåt).", + "vcmi.lobby.deleteUnsupportedSave": "{Ostödda sparningar av spel hittades}\n\nVCMI har hittat %d sparade spelfiler som inte längre stöds, möjligen på grund av skillnader i VCMI-versioner.\n\nVill du ta bort dem?", + "vcmi.lobby.deleteSaveGameTitle" : "Välj ett sparat spel som ska raderas", + "vcmi.lobby.deleteMapTitle" : "Välj ett scenario som ska raderas", + "vcmi.lobby.deleteFile" : "Vill du radera följande fil?", + "vcmi.lobby.deleteFolder" : "Vill du radera följande mapp?", + "vcmi.lobby.deleteMode" : "Växla till raderingsläge och tillbaka", "vcmi.lobby.login.title" : "VCMI Online Lobby", "vcmi.lobby.login.username" : "Användarnamn:", @@ -159,6 +189,7 @@ "vcmi.server.errors.modsToEnable" : "{Följande modd(ar) krävs}", "vcmi.server.errors.modsToDisable" : "{Följande modd(ar) måste inaktiveras}", "vcmi.server.errors.modNoDependency" : "Misslyckades med att ladda modd {'%s'}!\n Den är beroende av modd {'%s'} som inte är aktiverad!\n", + "vcmi.server.errors.modDependencyLoop": "Misslyckades med att ladda modd {'%s'}!\n Den kanske är i en (mjuk) beroendeloop.", "vcmi.server.errors.modConflict" : "Misslyckades med att ladda modd {'%s'}!\n Konflikter med aktiverad modd {'%s'}!\n", "vcmi.server.errors.unknownEntity" : "Misslyckades med att ladda sparat spel! Okänd enhet '%s' hittades i sparat spel! Sparningen kanske inte är kompatibel med den aktuella versionen av moddarna!", @@ -536,6 +567,8 @@ "core.seerhut.quest.reachDate.visit.4" : "Stängt fram till %s.", "core.seerhut.quest.reachDate.visit.5" : "Stängt fram till %s.", + "mapObject.core.hillFort.object.description" : "Uppgraderar varelser. Nivåerna 1 - 4 är billigare än i associerad stad.", + "core.bonus.ADDITIONAL_ATTACK.name" : "Dubbelslag", "core.bonus.ADDITIONAL_ATTACK.description" : "Attackerar två gånger.", "core.bonus.ADDITIONAL_RETALIATION.name" : "Ytterligare motattacker", @@ -688,4 +721,8 @@ "core.bonus.DISINTEGRATE.description" : "Ingen kropp lämnas kvar på slagfältet.", "core.bonus.INVINCIBLE.name" : "Oövervinnerlig", "core.bonus.INVINCIBLE.description" : "Kan inte påverkas av någonting." + "core.bonus.MECHANICAL.name" : "Mekanisk", + "core.bonus.MECHANICAL.description" : "Immun mot många effekter, reparerbar.", + "core.bonus.PRISM_HEX_ATTACK_BREATH.name" : "Prism-andedräkt", + "core.bonus.PRISM_HEX_ATTACK_BREATH.description" : "Treriktad andedräkt." } From fdd22903666fffe703b952571a4d785ea5ff8c36 Mon Sep 17 00:00:00 2001 From: kdmcser Date: Fri, 22 Nov 2024 01:24:50 +0800 Subject: [PATCH 04/19] update Chinese translation --- Mods/vcmi/config/chinese.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Mods/vcmi/config/chinese.json b/Mods/vcmi/config/chinese.json index 67605102e..4b8934ff5 100644 --- a/Mods/vcmi/config/chinese.json +++ b/Mods/vcmi/config/chinese.json @@ -28,6 +28,13 @@ "vcmi.adventureMap.movementPointsHeroInfo" : "(移动点数: %REMAINING / %POINTS)", "vcmi.adventureMap.replayOpponentTurnNotImplemented" : "抱歉,重放对手行动功能目前暂未实现!", + "vcmi.bonusSource.artifact" : "宝物", + "vcmi.bonusSource.creature" : "技能", + "vcmi.bonusSource.spell" : "法术", + "vcmi.bonusSource.hero" : "英雄", + "vcmi.bonusSource.commander" : "指挥官", + "vcmi.bonusSource.other" : "其他", + "vcmi.capitalColors.0" : "红色", "vcmi.capitalColors.1" : "蓝色", "vcmi.capitalColors.2" : "褐色", @@ -107,6 +114,12 @@ "vcmi.lobby.handicap.resource" : "给予玩家起始资源以外的更多资源,允许负值,但总量不会低于0(玩家永远不会能以负资源开始游戏)。", "vcmi.lobby.handicap.income" : "按百分比改变玩家的各种收入,向上取整。", "vcmi.lobby.handicap.growth" : "改变玩家拥有的城镇的生物增长率,向上取整。", + "vcmi.lobby.deleteUnsupportedSave" : "{检测到无法支持的存档}\n\nVCMI检测到%d个存档已不再受支持,这可能是由于 VCMI 版本不兼容导致的。\n\n你是否要删除这些存档?", + "vcmi.lobby.deleteSaveGameTitle" : "选择一个要删除的存档", + "vcmi.lobby.deleteMapTitle" : "选择一个要删除要删除的场景", + "vcmi.lobby.deleteFile" : "你确定要删除下列文件?", + "vcmi.lobby.deleteFolder" : "你确定要删除下列文件夹?", + "vcmi.lobby.deleteMode" : "切换删除模式并返回", "vcmi.lobby.login.title" : "VCMI大厅", "vcmi.lobby.login.username" : "用户名:", @@ -554,6 +567,8 @@ "core.seerhut.quest.reachDate.visit.4" : "关门直到%s。", "core.seerhut.quest.reachDate.visit.5" : "关门直到%s。", + "mapObject.core.hillFort.object.description" : "升级生物,1-4级生物升级比城镇中更便宜。", + "core.bonus.ADDITIONAL_ATTACK.name": "双击", "core.bonus.ADDITIONAL_ATTACK.description": "生物可以攻击两次", "core.bonus.ADDITIONAL_RETALIATION.name": "额外反击", From a10a305df815c97340b0eef301aa833f9355214a Mon Sep 17 00:00:00 2001 From: kdmcser Date: Fri, 22 Nov 2024 02:14:52 +0800 Subject: [PATCH 05/19] update Chinese translation --- Mods/vcmi/config/chinese.json | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Mods/vcmi/config/chinese.json b/Mods/vcmi/config/chinese.json index 4b8934ff5..081d0d4d4 100644 --- a/Mods/vcmi/config/chinese.json +++ b/Mods/vcmi/config/chinese.json @@ -724,5 +724,27 @@ "core.bonus.MECHANICAL.name": "机械", "core.bonus.MECHANICAL.description": "免疫大多数效果,可修复", "core.bonus.PRISM_HEX_ATTACK_BREATH.name": "棱光吐息", - "core.bonus.PRISM_HEX_ATTACK_BREATH.description": "攻击后向三方向扩散攻击" + "core.bonus.PRISM_HEX_ATTACK_BREATH.description": "攻击后向三方向扩散攻击", + + "spell.core.castleMoat.name" : "护城河", + "spell.core.castleMoatTrigger.name" : "护城河", + "spell.core.catapultShot.name" : "投石车射击", + "spell.core.cyclopsShot.name" : "攻城射击", + "spell.core.dungeonMoat.name" : "极热之油", + "spell.core.dungeonMoatTrigger.name" : "极热之油", + "spell.core.fireWallTrigger.name" : "烈火魔墙", + "spell.core.firstAid.name" : "急救术", + "spell.core.fortressMoat.name" : "焦油", + "spell.core.fortressMoatTrigger.name" : "焦油", + "spell.core.infernoMoat.name" : "熔岩", + "spell.core.infernoMoatTrigger.name" : "熔岩", + "spell.core.landMineTrigger.name" : "埋设地雷", + "spell.core.necropolisMoat.name" : "尸骨堆", + "spell.core.necropolisMoatTrigger.name" : "尸骨堆", + "spell.core.rampartMoat.name" : "护城河", + "spell.core.rampartMoatTrigger.name" : "护城河", + "spell.core.strongholdMoat.name" : "栅栏", + "spell.core.strongholdMoatTrigger.name" : "栅栏", + "spell.core.summonDemons.name" : "召唤恶鬼", + "spell.core.towerMoat.name" : "埋设地雷" } From b89db3f0449e7f182d8c10b87ed7201eaa6eac93 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Thu, 21 Nov 2024 20:10:32 +0100 Subject: [PATCH 06/19] fix popup --- client/widgets/CGarrisonInt.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/widgets/CGarrisonInt.cpp b/client/widgets/CGarrisonInt.cpp index c859f0d83..78a809e72 100644 --- a/client/widgets/CGarrisonInt.cpp +++ b/client/widgets/CGarrisonInt.cpp @@ -370,6 +370,9 @@ void CGarrisonSlot::gesture(bool on, const Point & initialPosition, const Point if (!settings["input"]["radialWheelGarrisonSwipe"].Bool()) return; + if(GH.windows().topWindow()->isPopupWindow()) + return; + const auto * otherArmy = upg == EGarrisonType::UPPER ? owner->lowerArmy() : owner->upperArmy(); bool stackExists = myStack != nullptr; From 32afd08f2b3f35f8fa1b55795881087af3c0cac5 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Fri, 22 Nov 2024 17:29:32 +0200 Subject: [PATCH 07/19] Update Mods/vcmi/config/swedish.json --- Mods/vcmi/config/swedish.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mods/vcmi/config/swedish.json b/Mods/vcmi/config/swedish.json index 6da1005be..3c65868c5 100644 --- a/Mods/vcmi/config/swedish.json +++ b/Mods/vcmi/config/swedish.json @@ -720,7 +720,7 @@ "core.bonus.DISINTEGRATE.name" : "Desintegrerar", "core.bonus.DISINTEGRATE.description" : "Ingen kropp lämnas kvar på slagfältet.", "core.bonus.INVINCIBLE.name" : "Oövervinnerlig", - "core.bonus.INVINCIBLE.description" : "Kan inte påverkas av någonting." + "core.bonus.INVINCIBLE.description" : "Kan inte påverkas av någonting.", "core.bonus.MECHANICAL.name" : "Mekanisk", "core.bonus.MECHANICAL.description" : "Immun mot många effekter, reparerbar.", "core.bonus.PRISM_HEX_ATTACK_BREATH.name" : "Prism-andedräkt", From b686a639a158c887b3855008bf8eef4260099e7f Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 19 Nov 2024 16:58:26 +0000 Subject: [PATCH 08/19] Remove custom filesystem for built-in vcmi mod Leftover from ancient times that is no longer necessary. - VCMI mod now uses same filesystem as all mods, with all files located in Content directory - Removed definition of custom filesystem from vcmi mod.json - Moved all png images from Data directory to Sprites --- .../{ => Content}/Data/NotoSans-Medium.ttf | Bin .../{ => Content}/Data/NotoSerif-Black.ttf | Bin .../{ => Content}/Data/NotoSerif-Bold.ttf | Bin .../{ => Content}/Data/NotoSerif-Medium.ttf | Bin Mods/vcmi/{ => Content}/Data/s/std.verm | 0 Mods/vcmi/{ => Content}/Data/s/testy.erm | 0 Mods/vcmi/{ => Content}/Sounds/we5.wav | Bin .../{ => Content}/Sprites/PortraitsLarge.json | 0 .../{ => Content}/Sprites/PortraitsSmall.json | 0 .../CreaturePurchaseCard.png | Bin .../QuickRecruitmentAllButton.def | Bin .../QuickRecruitmentNoneButton.def | Bin .../QuickRecruitmentWindow/costBackground.png | Bin Mods/vcmi/{ => Content}/Sprites/ScSelC.json | 0 .../Sprites}/StackQueueLarge.png | Bin .../Sprites}/StackQueueSmall.png | Bin .../Sprites}/UnitMaxMovementHighlight.png | Bin .../Sprites}/UnitMovementHighlight.png | Bin .../battle/rangeHighlights/green/empty.png | Bin .../battle/rangeHighlights/green/fullHex.png | Bin .../battle/rangeHighlights/green/left.png | Bin .../battle/rangeHighlights/green/leftHalf.png | Bin .../battle/rangeHighlights/green/top.png | Bin .../battle/rangeHighlights/green/topLeft.png | Bin .../rangeHighlights/green/topLeftCorner.png | Bin .../green/topLeftHalfCorner.png | Bin .../rangeHighlights/rangeHighlightsGreen.json | 0 .../rangeHighlights/rangeHighlightsRed.json | 0 .../battle/rangeHighlights/red/empty.png | Bin .../battle/rangeHighlights/red/fullHex.png | Bin .../battle/rangeHighlights/red/left.png | Bin .../battle/rangeHighlights/red/leftHalf.png | Bin .../battle/rangeHighlights/red/top.png | Bin .../battle/rangeHighlights/red/topLeft.png | Bin .../rangeHighlights/red/topLeftCorner.png | Bin .../rangeHighlights/red/topLeftHalfCorner.png | Bin .../Sprites}/debug/blocked.png | Bin .../{Data => Content/Sprites}/debug/grid.png | Bin .../Sprites}/debug/spellRange.png | Bin .../Sprites}/debug/visitable.png | Bin .../Sprites}/heroWindow/artifactSlotEmpty.png | Bin .../heroWindow/backpackButtonIcon.png | Bin .../heroWindow/commanderButtonIcon.png | Bin Mods/vcmi/{ => Content}/Sprites/itpa.json | 0 .../{ => Content}/Sprites/lobby/checkbox.json | 0 .../Sprites/lobby/checkboxBlueOff.png | Bin .../Sprites/lobby/checkboxBlueOn.png | Bin .../Sprites/lobby/checkboxOff.png | Bin .../Sprites/lobby/checkboxOn.png | Bin .../Sprites/lobby/delete-normal.png | Bin .../Sprites/lobby/delete-pressed.png | Bin .../Sprites/lobby/deleteButton.json | 0 .../{ => Content}/Sprites/lobby/dropdown.json | 0 .../Sprites/lobby/dropdownNormal.png | Bin .../Sprites/lobby/dropdownPressed.png | Bin .../Sprites}/lobby/iconFolder.png | Bin .../Sprites}/lobby/iconPlayer.png | Bin .../Sprites}/lobby/iconSend.png | Bin .../Sprites}/lobby/selectionTabSortDate.png | Bin .../Sprites}/lobby/townBorderBig.png | Bin .../Sprites}/lobby/townBorderBigActivated.png | Bin .../Sprites}/lobby/townBorderBigGrayedOut.png | Bin .../lobby/townBorderSmallActivated.png | Bin .../Sprites/mapFormatIcons/vcmi1.png | Bin .../{Data => Content/Sprites}/questDialog.png | Bin .../Sprites}/radialMenu/altDown.png | Bin .../Sprites}/radialMenu/altDownBottom.png | Bin .../Sprites}/radialMenu/altUp.png | Bin .../Sprites}/radialMenu/altUpTop.png | Bin .../Sprites}/radialMenu/dismissHero.png | Bin .../Sprites}/radialMenu/heroMove.png | Bin .../Sprites}/radialMenu/heroSwap.png | Bin .../Sprites}/radialMenu/itemEmpty.png | Bin .../Sprites}/radialMenu/itemEmptyAlt.png | Bin .../Sprites}/radialMenu/itemInactive.png | Bin .../Sprites}/radialMenu/itemInactiveAlt.png | Bin .../Sprites}/radialMenu/moveArtifacts.png | Bin .../Sprites}/radialMenu/moveTroops.png | Bin .../Sprites}/radialMenu/stackFillOne.png | Bin .../Sprites}/radialMenu/stackMerge.png | Bin .../Sprites}/radialMenu/stackSplitDialog.png | Bin .../Sprites}/radialMenu/stackSplitEqual.png | Bin .../Sprites}/radialMenu/stackSplitOne.png | Bin .../Sprites}/radialMenu/statusBar.png | Bin .../Sprites}/radialMenu/swapArtifacts.png | Bin .../Sprites}/radialMenu/tradeHeroes.png | Bin .../Sprites}/settingsWindow/frameAudio.png | Bin .../Sprites}/settingsWindow/frameMovement.png | Bin .../settingsWindow/frameStackQueue.png | Bin .../Sprites}/settingsWindow/gear.png | Bin .../Sprites}/settingsWindow/scrollSpeed1.png | Bin .../Sprites}/settingsWindow/scrollSpeed2.png | Bin .../Sprites}/settingsWindow/scrollSpeed3.png | Bin .../Sprites}/settingsWindow/scrollSpeed4.png | Bin .../Sprites}/settingsWindow/scrollSpeed5.png | Bin .../Sprites}/settingsWindow/scrollSpeed6.png | Bin .../Sprites}/spellResearch/accept.png | Bin .../Sprites}/spellResearch/close.png | Bin .../Sprites}/spellResearch/reroll.png | Bin .../Sprites}/stackWindow/bonus-effects.png | Bin .../Sprites}/stackWindow/button-panel.png | Bin .../Sprites/stackWindow/cancel-normal.png | Bin .../Sprites/stackWindow/cancel-pressed.png | Bin .../Sprites/stackWindow/cancelButton.json | 0 .../stackWindow/commander-abilities.png | Bin .../Sprites}/stackWindow/commander-bg.png | Bin .../Sprites}/stackWindow/icons.png | Bin .../Sprites}/stackWindow/info-panel-0.png | Bin .../Sprites}/stackWindow/info-panel-1.png | Bin .../Sprites}/stackWindow/info-panel-2.png | Bin .../Sprites/stackWindow/level-0.png | Bin .../Sprites/stackWindow/level-1.png | Bin .../Sprites/stackWindow/level-10.png | Bin .../Sprites/stackWindow/level-2.png | Bin .../Sprites/stackWindow/level-3.png | Bin .../Sprites/stackWindow/level-4.png | Bin .../Sprites/stackWindow/level-5.png | Bin .../Sprites/stackWindow/level-6.png | Bin .../Sprites/stackWindow/level-7.png | Bin .../Sprites/stackWindow/level-8.png | Bin .../Sprites/stackWindow/level-9.png | Bin .../Sprites/stackWindow/levels.json | 0 .../Sprites}/stackWindow/spell-effects.png | Bin .../Sprites/stackWindow/switchModeIcons.json | 0 .../Sprites/stackWindow/upgrade-normal.png | Bin .../Sprites/stackWindow/upgrade-pressed.png | Bin .../Sprites/stackWindow/upgradeButton.json | 0 .../Sprites/vcmi/battleQueue/defendBig.png | Bin .../Sprites/vcmi/battleQueue/defendSmall.png | Bin .../Sprites/vcmi/battleQueue/statesBig.json | 0 .../Sprites/vcmi/battleQueue/statesSmall.json | 0 .../Sprites/vcmi/battleQueue/waitBig.png | Bin .../Sprites/vcmi/battleQueue/waitSmall.png | Bin .../Sprites/vcmi/creatureIcons/towerLarge.png | Bin .../Sprites/vcmi/creatureIcons/towerSmall.png | Bin .../Video/tutorial/AbortSpell.webm | Bin .../Video/tutorial/BattleDirection.webm | Bin .../Video/tutorial/BattleDirectionAbort.webm | Bin .../Video/tutorial/MapPanning.webm | Bin .../Video/tutorial/MapZooming.webm | Bin .../Video/tutorial/RadialWheel.webm | Bin .../Video/tutorial/RightClick.webm | Bin Mods/vcmi/{ => Content}/config/chinese.json | 0 Mods/vcmi/{ => Content}/config/czech.json | 0 Mods/vcmi/{ => Content}/config/english.json | 0 Mods/vcmi/{ => Content}/config/french.json | 0 Mods/vcmi/{ => Content}/config/german.json | 0 Mods/vcmi/{ => Content}/config/polish.json | 0 .../vcmi/{ => Content}/config/portuguese.json | 0 .../config/rmg/hdmod/aroundamarsh.json | 0 .../config/rmg/hdmod/balance.json | 0 .../config/rmg/hdmod/blockbuster.json | 0 .../config/rmg/hdmod/clashOfDragons.json | 0 .../config/rmg/hdmod/coldshadowsFantasy.json | 0 .../{ => Content}/config/rmg/hdmod/cube.json | 0 .../config/rmg/hdmod/diamond.json | 0 .../config/rmg/hdmod/extreme.json | 0 .../config/rmg/hdmod/extreme2.json | 0 .../{ => Content}/config/rmg/hdmod/fear.json | 0 .../config/rmg/hdmod/frozenDragons.json | 0 .../config/rmg/hdmod/gimlisRevenge.json | 0 .../config/rmg/hdmod/guerilla.json | 0 .../config/rmg/hdmod/headquarters.json | 0 .../config/rmg/hdmod/hypercube.json | 0 .../config/rmg/hdmod/jebusCross.json | 0 .../config/rmg/hdmod/longRun.json | 0 .../config/rmg/hdmod/marathon.json | 0 .../config/rmg/hdmod/miniNostalgia.json | 0 .../config/rmg/hdmod/nostalgia.json | 0 .../config/rmg/hdmod/oceansEleven.json | 0 .../{ => Content}/config/rmg/hdmod/panic.json | 0 .../config/rmg/hdmod/poorJebus.json | 0 .../config/rmg/hdmod/reckless.json | 0 .../config/rmg/hdmod/roadrunner.json | 0 .../config/rmg/hdmod/shaaafworld.json | 0 .../config/rmg/hdmod/skirmish.json | 0 .../config/rmg/hdmod/speed1.json | 0 .../config/rmg/hdmod/speed2.json | 0 .../config/rmg/hdmod/spider.json | 0 .../config/rmg/hdmod/superslam.json | 0 .../{ => Content}/config/rmg/hdmod/triad.json | 0 .../config/rmg/hdmod/vortex.json | 0 .../config/rmg/hdmodUnused/anarchy.json | 0 .../rmg/hdmodUnused/balance m+u 200%.json | 0 .../config/rmg/hdmodUnused/midnightMix.json | 0 .../rmg/hdmodUnused/skirmish m-u 200%.json | 0 .../config/rmg/hdmodUnused/true random.json | 0 .../config/rmg/heroes3/dwarvenTunnels.json | 0 .../config/rmg/heroes3/golemsAplenty.json | 0 .../config/rmg/heroes3/meetingInMuzgob.json | 0 .../config/rmg/heroes3/monksRetreat.json | 0 .../config/rmg/heroes3/newcomers.json | 0 .../config/rmg/heroes3/readyOrNot.json | 0 .../config/rmg/heroes3/smallRing.json | 0 .../config/rmg/heroes3/southOfHell.json | 0 .../config/rmg/heroes3/worldsAtWar.json | 0 .../config/rmg/heroes3unused/dragon.json | 0 .../config/rmg/heroes3unused/gauntlet.json | 0 .../config/rmg/heroes3unused/ring.json | 0 .../rmg/heroes3unused/riseOfPhoenix.json | 0 .../config/rmg/symmetric/2sm0k.json | 0 .../config/rmg/symmetric/2sm2a.json | 0 .../config/rmg/symmetric/2sm2b(2).json | 0 .../config/rmg/symmetric/2sm2b.json | 0 .../config/rmg/symmetric/2sm2c.json | 0 .../config/rmg/symmetric/2sm2f(2).json | 0 .../config/rmg/symmetric/2sm2f.json | 0 .../config/rmg/symmetric/2sm2h(2).json | 0 .../config/rmg/symmetric/2sm2h.json | 0 .../config/rmg/symmetric/2sm2i(2).json | 0 .../config/rmg/symmetric/2sm2i.json | 0 .../config/rmg/symmetric/2sm4d(2).json | 0 .../config/rmg/symmetric/2sm4d(3).json | 0 .../config/rmg/symmetric/2sm4d.json | 0 .../config/rmg/symmetric/3sb0b.json | 0 .../config/rmg/symmetric/3sb0c.json | 0 .../config/rmg/symmetric/3sm3d.json | 0 .../config/rmg/symmetric/4sm0d.json | 0 .../config/rmg/symmetric/4sm0f.json | 0 .../config/rmg/symmetric/4sm0g.json | 0 .../config/rmg/symmetric/4sm4e.json | 0 .../config/rmg/symmetric/5sb0a.json | 0 .../config/rmg/symmetric/5sb0b.json | 0 .../config/rmg/symmetric/6lm10.json | 0 .../config/rmg/symmetric/6lm10a.json | 0 .../config/rmg/symmetric/6sm0b.json | 0 .../config/rmg/symmetric/6sm0d.json | 0 .../config/rmg/symmetric/6sm0e.json | 0 .../config/rmg/symmetric/7sb0b.json | 0 .../config/rmg/symmetric/7sb0c.json | 0 .../config/rmg/symmetric/8mm0e.json | 0 .../config/rmg/symmetric/8mm6.json | 0 .../config/rmg/symmetric/8mm6a.json | 0 .../config/rmg/symmetric/8sm0c.json | 0 .../config/rmg/symmetric/8sm0f.json | 0 .../config/rmg/symmetric/8xm12.json | 0 .../config/rmg/symmetric/8xm12a.json | 0 .../config/rmg/symmetric/8xm8.json | 0 .../config/rmg/unknownUnused/2mm2h.json | 0 .../config/rmg/unknownUnused/2x2sm4d(3).json | 0 .../config/rmg/unknownUnused/4mm2h.json | 0 .../config/rmg/unknownUnused/4sm3i.json | 0 .../config/rmg/unknownUnused/6lm10a.json | 0 .../config/rmg/unknownUnused/8xm12 huge.json | 0 .../config/rmg/unknownUnused/8xm8 huge.json | 0 .../config/rmg/unknownUnused/analogy.json | 0 .../config/rmg/unknownUnused/cross.json | 0 .../config/rmg/unknownUnused/cross2.json | 0 .../config/rmg/unknownUnused/cross3.json | 0 .../config/rmg/unknownUnused/deux paires.json | 0 .../rmg/unknownUnused/doubled 8mm6.json | 0 .../config/rmg/unknownUnused/elka.json | 0 .../config/rmg/unknownUnused/goldenRing.json | 0 .../config/rmg/unknownUnused/greatSands.json | 0 .../config/rmg/unknownUnused/kite.json | 0 .../config/rmg/unknownUnused/upgrade.json | 0 .../config/rmg/unknownUnused/wheel.json | 0 Mods/vcmi/{ => Content}/config/russian.json | 0 Mods/vcmi/{ => Content}/config/spanish.json | 0 Mods/vcmi/{ => Content}/config/spells.json | 0 Mods/vcmi/{ => Content}/config/swedish.json | 0 .../{ => Content}/config/towerCreature.json | 0 .../{ => Content}/config/towerFactions.json | 0 Mods/vcmi/{ => Content}/config/ukrainian.json | 0 .../vcmi/{ => Content}/config/vietnamese.json | 0 .../CreaturePurchaseCard.png | Bin 13531 -> 0 bytes Mods/vcmi/mod.json | 30 +----------------- 267 files changed, 1 insertion(+), 29 deletions(-) rename Mods/vcmi/{ => Content}/Data/NotoSans-Medium.ttf (100%) rename Mods/vcmi/{ => Content}/Data/NotoSerif-Black.ttf (100%) rename Mods/vcmi/{ => Content}/Data/NotoSerif-Bold.ttf (100%) rename Mods/vcmi/{ => Content}/Data/NotoSerif-Medium.ttf (100%) rename Mods/vcmi/{ => Content}/Data/s/std.verm (100%) rename Mods/vcmi/{ => Content}/Data/s/testy.erm (100%) rename Mods/vcmi/{ => Content}/Sounds/we5.wav (100%) rename Mods/vcmi/{ => Content}/Sprites/PortraitsLarge.json (100%) rename Mods/vcmi/{ => Content}/Sprites/PortraitsSmall.json (100%) rename Mods/vcmi/{Data => Content/Sprites}/QuickRecruitmentWindow/CreaturePurchaseCard.png (100%) rename Mods/vcmi/{ => Content}/Sprites/QuickRecruitmentWindow/QuickRecruitmentAllButton.def (100%) rename Mods/vcmi/{ => Content}/Sprites/QuickRecruitmentWindow/QuickRecruitmentNoneButton.def (100%) rename Mods/vcmi/{ => Content}/Sprites/QuickRecruitmentWindow/costBackground.png (100%) rename Mods/vcmi/{ => Content}/Sprites/ScSelC.json (100%) rename Mods/vcmi/{Data => Content/Sprites}/StackQueueLarge.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/StackQueueSmall.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/UnitMaxMovementHighlight.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/UnitMovementHighlight.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/empty.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/fullHex.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/left.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/leftHalf.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/top.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/topLeft.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/topLeftCorner.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/green/topLeftHalfCorner.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/rangeHighlightsRed.json (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/empty.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/fullHex.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/left.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/leftHalf.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/top.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/topLeft.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/topLeftCorner.png (100%) rename Mods/vcmi/{ => Content}/Sprites/battle/rangeHighlights/red/topLeftHalfCorner.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/debug/blocked.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/debug/grid.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/debug/spellRange.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/debug/visitable.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/heroWindow/artifactSlotEmpty.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/heroWindow/backpackButtonIcon.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/heroWindow/commanderButtonIcon.png (100%) rename Mods/vcmi/{ => Content}/Sprites/itpa.json (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/checkbox.json (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/checkboxBlueOff.png (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/checkboxBlueOn.png (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/checkboxOff.png (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/checkboxOn.png (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/delete-normal.png (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/delete-pressed.png (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/deleteButton.json (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/dropdown.json (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/dropdownNormal.png (100%) rename Mods/vcmi/{ => Content}/Sprites/lobby/dropdownPressed.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/iconFolder.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/iconPlayer.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/iconSend.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/selectionTabSortDate.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/townBorderBig.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/townBorderBigActivated.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/townBorderBigGrayedOut.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/lobby/townBorderSmallActivated.png (100%) rename Mods/vcmi/{ => Content}/Sprites/mapFormatIcons/vcmi1.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/questDialog.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/altDown.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/altDownBottom.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/altUp.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/altUpTop.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/dismissHero.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/heroMove.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/heroSwap.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/itemEmpty.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/itemEmptyAlt.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/itemInactive.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/itemInactiveAlt.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/moveArtifacts.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/moveTroops.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/stackFillOne.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/stackMerge.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/stackSplitDialog.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/stackSplitEqual.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/stackSplitOne.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/statusBar.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/swapArtifacts.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/radialMenu/tradeHeroes.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/frameAudio.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/frameMovement.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/frameStackQueue.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/gear.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/scrollSpeed1.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/scrollSpeed2.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/scrollSpeed3.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/scrollSpeed4.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/scrollSpeed5.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/settingsWindow/scrollSpeed6.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/spellResearch/accept.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/spellResearch/close.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/spellResearch/reroll.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/bonus-effects.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/button-panel.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/cancel-normal.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/cancel-pressed.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/cancelButton.json (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/commander-abilities.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/commander-bg.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/icons.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/info-panel-0.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/info-panel-1.png (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/info-panel-2.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-0.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-1.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-10.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-2.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-3.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-4.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-5.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-6.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-7.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-8.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/level-9.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/levels.json (100%) rename Mods/vcmi/{Data => Content/Sprites}/stackWindow/spell-effects.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/switchModeIcons.json (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/upgrade-normal.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/upgrade-pressed.png (100%) rename Mods/vcmi/{ => Content}/Sprites/stackWindow/upgradeButton.json (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/battleQueue/defendBig.png (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/battleQueue/defendSmall.png (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/battleQueue/statesBig.json (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/battleQueue/statesSmall.json (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/battleQueue/waitBig.png (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/battleQueue/waitSmall.png (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/creatureIcons/towerLarge.png (100%) rename Mods/vcmi/{ => Content}/Sprites/vcmi/creatureIcons/towerSmall.png (100%) rename Mods/vcmi/{ => Content}/Video/tutorial/AbortSpell.webm (100%) rename Mods/vcmi/{ => Content}/Video/tutorial/BattleDirection.webm (100%) rename Mods/vcmi/{ => Content}/Video/tutorial/BattleDirectionAbort.webm (100%) rename Mods/vcmi/{ => Content}/Video/tutorial/MapPanning.webm (100%) rename Mods/vcmi/{ => Content}/Video/tutorial/MapZooming.webm (100%) rename Mods/vcmi/{ => Content}/Video/tutorial/RadialWheel.webm (100%) rename Mods/vcmi/{ => Content}/Video/tutorial/RightClick.webm (100%) rename Mods/vcmi/{ => Content}/config/chinese.json (100%) rename Mods/vcmi/{ => Content}/config/czech.json (100%) rename Mods/vcmi/{ => Content}/config/english.json (100%) rename Mods/vcmi/{ => Content}/config/french.json (100%) rename Mods/vcmi/{ => Content}/config/german.json (100%) rename Mods/vcmi/{ => Content}/config/polish.json (100%) rename Mods/vcmi/{ => Content}/config/portuguese.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/aroundamarsh.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/balance.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/blockbuster.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/clashOfDragons.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/coldshadowsFantasy.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/cube.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/diamond.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/extreme.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/extreme2.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/fear.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/frozenDragons.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/gimlisRevenge.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/guerilla.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/headquarters.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/hypercube.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/jebusCross.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/longRun.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/marathon.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/miniNostalgia.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/nostalgia.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/oceansEleven.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/panic.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/poorJebus.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/reckless.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/roadrunner.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/shaaafworld.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/skirmish.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/speed1.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/speed2.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/spider.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/superslam.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/triad.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmod/vortex.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmodUnused/anarchy.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmodUnused/balance m+u 200%.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmodUnused/midnightMix.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmodUnused/skirmish m-u 200%.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/hdmodUnused/true random.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/dwarvenTunnels.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/golemsAplenty.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/meetingInMuzgob.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/monksRetreat.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/newcomers.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/readyOrNot.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/smallRing.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/southOfHell.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3/worldsAtWar.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3unused/dragon.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3unused/gauntlet.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3unused/ring.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/heroes3unused/riseOfPhoenix.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm0k.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2a.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2b(2).json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2b.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2c.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2f(2).json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2f.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2h(2).json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2h.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2i(2).json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm2i.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm4d(2).json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm4d(3).json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/2sm4d.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/3sb0b.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/3sb0c.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/3sm3d.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/4sm0d.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/4sm0f.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/4sm0g.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/4sm4e.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/5sb0a.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/5sb0b.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/6lm10.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/6lm10a.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/6sm0b.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/6sm0d.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/6sm0e.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/7sb0b.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/7sb0c.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8mm0e.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8mm6.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8mm6a.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8sm0c.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8sm0f.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8xm12.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8xm12a.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/symmetric/8xm8.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/2mm2h.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/2x2sm4d(3).json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/4mm2h.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/4sm3i.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/6lm10a.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/8xm12 huge.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/8xm8 huge.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/analogy.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/cross.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/cross2.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/cross3.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/deux paires.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/doubled 8mm6.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/elka.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/goldenRing.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/greatSands.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/kite.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/upgrade.json (100%) rename Mods/vcmi/{ => Content}/config/rmg/unknownUnused/wheel.json (100%) rename Mods/vcmi/{ => Content}/config/russian.json (100%) rename Mods/vcmi/{ => Content}/config/spanish.json (100%) rename Mods/vcmi/{ => Content}/config/spells.json (100%) rename Mods/vcmi/{ => Content}/config/swedish.json (100%) rename Mods/vcmi/{ => Content}/config/towerCreature.json (100%) rename Mods/vcmi/{ => Content}/config/towerFactions.json (100%) rename Mods/vcmi/{ => Content}/config/ukrainian.json (100%) rename Mods/vcmi/{ => Content}/config/vietnamese.json (100%) delete mode 100644 Mods/vcmi/Sprites/QuickRecruitmentWindow/CreaturePurchaseCard.png diff --git a/Mods/vcmi/Data/NotoSans-Medium.ttf b/Mods/vcmi/Content/Data/NotoSans-Medium.ttf similarity index 100% rename from Mods/vcmi/Data/NotoSans-Medium.ttf rename to Mods/vcmi/Content/Data/NotoSans-Medium.ttf diff --git a/Mods/vcmi/Data/NotoSerif-Black.ttf b/Mods/vcmi/Content/Data/NotoSerif-Black.ttf similarity index 100% rename from Mods/vcmi/Data/NotoSerif-Black.ttf rename to Mods/vcmi/Content/Data/NotoSerif-Black.ttf diff --git a/Mods/vcmi/Data/NotoSerif-Bold.ttf b/Mods/vcmi/Content/Data/NotoSerif-Bold.ttf similarity index 100% rename from Mods/vcmi/Data/NotoSerif-Bold.ttf rename to Mods/vcmi/Content/Data/NotoSerif-Bold.ttf diff --git a/Mods/vcmi/Data/NotoSerif-Medium.ttf b/Mods/vcmi/Content/Data/NotoSerif-Medium.ttf similarity index 100% rename from Mods/vcmi/Data/NotoSerif-Medium.ttf rename to Mods/vcmi/Content/Data/NotoSerif-Medium.ttf diff --git a/Mods/vcmi/Data/s/std.verm b/Mods/vcmi/Content/Data/s/std.verm similarity index 100% rename from Mods/vcmi/Data/s/std.verm rename to Mods/vcmi/Content/Data/s/std.verm diff --git a/Mods/vcmi/Data/s/testy.erm b/Mods/vcmi/Content/Data/s/testy.erm similarity index 100% rename from Mods/vcmi/Data/s/testy.erm rename to Mods/vcmi/Content/Data/s/testy.erm diff --git a/Mods/vcmi/Sounds/we5.wav b/Mods/vcmi/Content/Sounds/we5.wav similarity index 100% rename from Mods/vcmi/Sounds/we5.wav rename to Mods/vcmi/Content/Sounds/we5.wav diff --git a/Mods/vcmi/Sprites/PortraitsLarge.json b/Mods/vcmi/Content/Sprites/PortraitsLarge.json similarity index 100% rename from Mods/vcmi/Sprites/PortraitsLarge.json rename to Mods/vcmi/Content/Sprites/PortraitsLarge.json diff --git a/Mods/vcmi/Sprites/PortraitsSmall.json b/Mods/vcmi/Content/Sprites/PortraitsSmall.json similarity index 100% rename from Mods/vcmi/Sprites/PortraitsSmall.json rename to Mods/vcmi/Content/Sprites/PortraitsSmall.json diff --git a/Mods/vcmi/Data/QuickRecruitmentWindow/CreaturePurchaseCard.png b/Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/CreaturePurchaseCard.png similarity index 100% rename from Mods/vcmi/Data/QuickRecruitmentWindow/CreaturePurchaseCard.png rename to Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/CreaturePurchaseCard.png diff --git a/Mods/vcmi/Sprites/QuickRecruitmentWindow/QuickRecruitmentAllButton.def b/Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/QuickRecruitmentAllButton.def similarity index 100% rename from Mods/vcmi/Sprites/QuickRecruitmentWindow/QuickRecruitmentAllButton.def rename to Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/QuickRecruitmentAllButton.def diff --git a/Mods/vcmi/Sprites/QuickRecruitmentWindow/QuickRecruitmentNoneButton.def b/Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/QuickRecruitmentNoneButton.def similarity index 100% rename from Mods/vcmi/Sprites/QuickRecruitmentWindow/QuickRecruitmentNoneButton.def rename to Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/QuickRecruitmentNoneButton.def diff --git a/Mods/vcmi/Sprites/QuickRecruitmentWindow/costBackground.png b/Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/costBackground.png similarity index 100% rename from Mods/vcmi/Sprites/QuickRecruitmentWindow/costBackground.png rename to Mods/vcmi/Content/Sprites/QuickRecruitmentWindow/costBackground.png diff --git a/Mods/vcmi/Sprites/ScSelC.json b/Mods/vcmi/Content/Sprites/ScSelC.json similarity index 100% rename from Mods/vcmi/Sprites/ScSelC.json rename to Mods/vcmi/Content/Sprites/ScSelC.json diff --git a/Mods/vcmi/Data/StackQueueLarge.png b/Mods/vcmi/Content/Sprites/StackQueueLarge.png similarity index 100% rename from Mods/vcmi/Data/StackQueueLarge.png rename to Mods/vcmi/Content/Sprites/StackQueueLarge.png diff --git a/Mods/vcmi/Data/StackQueueSmall.png b/Mods/vcmi/Content/Sprites/StackQueueSmall.png similarity index 100% rename from Mods/vcmi/Data/StackQueueSmall.png rename to Mods/vcmi/Content/Sprites/StackQueueSmall.png diff --git a/Mods/vcmi/Data/UnitMaxMovementHighlight.png b/Mods/vcmi/Content/Sprites/UnitMaxMovementHighlight.png similarity index 100% rename from Mods/vcmi/Data/UnitMaxMovementHighlight.png rename to Mods/vcmi/Content/Sprites/UnitMaxMovementHighlight.png diff --git a/Mods/vcmi/Data/UnitMovementHighlight.png b/Mods/vcmi/Content/Sprites/UnitMovementHighlight.png similarity index 100% rename from Mods/vcmi/Data/UnitMovementHighlight.png rename to Mods/vcmi/Content/Sprites/UnitMovementHighlight.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/empty.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/empty.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/empty.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/empty.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/fullHex.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/fullHex.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/fullHex.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/fullHex.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/left.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/left.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/left.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/left.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/leftHalf.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/leftHalf.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/leftHalf.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/leftHalf.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/top.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/top.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/top.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/top.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeft.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/topLeft.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeft.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/topLeft.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftCorner.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/topLeftCorner.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftCorner.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/topLeftCorner.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftHalfCorner.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/topLeftHalfCorner.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/green/topLeftHalfCorner.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/green/topLeftHalfCorner.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/rangeHighlightsGreen.json diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsRed.json b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/rangeHighlightsRed.json similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/rangeHighlightsRed.json rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/rangeHighlightsRed.json diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/empty.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/empty.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/empty.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/empty.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/fullHex.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/fullHex.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/fullHex.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/fullHex.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/left.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/left.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/left.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/left.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/leftHalf.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/leftHalf.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/leftHalf.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/leftHalf.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/top.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/top.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/top.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/top.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/topLeft.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/topLeft.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/topLeft.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/topLeft.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/topLeftCorner.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/topLeftCorner.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/topLeftCorner.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/topLeftCorner.png diff --git a/Mods/vcmi/Sprites/battle/rangeHighlights/red/topLeftHalfCorner.png b/Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/topLeftHalfCorner.png similarity index 100% rename from Mods/vcmi/Sprites/battle/rangeHighlights/red/topLeftHalfCorner.png rename to Mods/vcmi/Content/Sprites/battle/rangeHighlights/red/topLeftHalfCorner.png diff --git a/Mods/vcmi/Data/debug/blocked.png b/Mods/vcmi/Content/Sprites/debug/blocked.png similarity index 100% rename from Mods/vcmi/Data/debug/blocked.png rename to Mods/vcmi/Content/Sprites/debug/blocked.png diff --git a/Mods/vcmi/Data/debug/grid.png b/Mods/vcmi/Content/Sprites/debug/grid.png similarity index 100% rename from Mods/vcmi/Data/debug/grid.png rename to Mods/vcmi/Content/Sprites/debug/grid.png diff --git a/Mods/vcmi/Data/debug/spellRange.png b/Mods/vcmi/Content/Sprites/debug/spellRange.png similarity index 100% rename from Mods/vcmi/Data/debug/spellRange.png rename to Mods/vcmi/Content/Sprites/debug/spellRange.png diff --git a/Mods/vcmi/Data/debug/visitable.png b/Mods/vcmi/Content/Sprites/debug/visitable.png similarity index 100% rename from Mods/vcmi/Data/debug/visitable.png rename to Mods/vcmi/Content/Sprites/debug/visitable.png diff --git a/Mods/vcmi/Data/heroWindow/artifactSlotEmpty.png b/Mods/vcmi/Content/Sprites/heroWindow/artifactSlotEmpty.png similarity index 100% rename from Mods/vcmi/Data/heroWindow/artifactSlotEmpty.png rename to Mods/vcmi/Content/Sprites/heroWindow/artifactSlotEmpty.png diff --git a/Mods/vcmi/Data/heroWindow/backpackButtonIcon.png b/Mods/vcmi/Content/Sprites/heroWindow/backpackButtonIcon.png similarity index 100% rename from Mods/vcmi/Data/heroWindow/backpackButtonIcon.png rename to Mods/vcmi/Content/Sprites/heroWindow/backpackButtonIcon.png diff --git a/Mods/vcmi/Data/heroWindow/commanderButtonIcon.png b/Mods/vcmi/Content/Sprites/heroWindow/commanderButtonIcon.png similarity index 100% rename from Mods/vcmi/Data/heroWindow/commanderButtonIcon.png rename to Mods/vcmi/Content/Sprites/heroWindow/commanderButtonIcon.png diff --git a/Mods/vcmi/Sprites/itpa.json b/Mods/vcmi/Content/Sprites/itpa.json similarity index 100% rename from Mods/vcmi/Sprites/itpa.json rename to Mods/vcmi/Content/Sprites/itpa.json diff --git a/Mods/vcmi/Sprites/lobby/checkbox.json b/Mods/vcmi/Content/Sprites/lobby/checkbox.json similarity index 100% rename from Mods/vcmi/Sprites/lobby/checkbox.json rename to Mods/vcmi/Content/Sprites/lobby/checkbox.json diff --git a/Mods/vcmi/Sprites/lobby/checkboxBlueOff.png b/Mods/vcmi/Content/Sprites/lobby/checkboxBlueOff.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/checkboxBlueOff.png rename to Mods/vcmi/Content/Sprites/lobby/checkboxBlueOff.png diff --git a/Mods/vcmi/Sprites/lobby/checkboxBlueOn.png b/Mods/vcmi/Content/Sprites/lobby/checkboxBlueOn.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/checkboxBlueOn.png rename to Mods/vcmi/Content/Sprites/lobby/checkboxBlueOn.png diff --git a/Mods/vcmi/Sprites/lobby/checkboxOff.png b/Mods/vcmi/Content/Sprites/lobby/checkboxOff.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/checkboxOff.png rename to Mods/vcmi/Content/Sprites/lobby/checkboxOff.png diff --git a/Mods/vcmi/Sprites/lobby/checkboxOn.png b/Mods/vcmi/Content/Sprites/lobby/checkboxOn.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/checkboxOn.png rename to Mods/vcmi/Content/Sprites/lobby/checkboxOn.png diff --git a/Mods/vcmi/Sprites/lobby/delete-normal.png b/Mods/vcmi/Content/Sprites/lobby/delete-normal.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/delete-normal.png rename to Mods/vcmi/Content/Sprites/lobby/delete-normal.png diff --git a/Mods/vcmi/Sprites/lobby/delete-pressed.png b/Mods/vcmi/Content/Sprites/lobby/delete-pressed.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/delete-pressed.png rename to Mods/vcmi/Content/Sprites/lobby/delete-pressed.png diff --git a/Mods/vcmi/Sprites/lobby/deleteButton.json b/Mods/vcmi/Content/Sprites/lobby/deleteButton.json similarity index 100% rename from Mods/vcmi/Sprites/lobby/deleteButton.json rename to Mods/vcmi/Content/Sprites/lobby/deleteButton.json diff --git a/Mods/vcmi/Sprites/lobby/dropdown.json b/Mods/vcmi/Content/Sprites/lobby/dropdown.json similarity index 100% rename from Mods/vcmi/Sprites/lobby/dropdown.json rename to Mods/vcmi/Content/Sprites/lobby/dropdown.json diff --git a/Mods/vcmi/Sprites/lobby/dropdownNormal.png b/Mods/vcmi/Content/Sprites/lobby/dropdownNormal.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/dropdownNormal.png rename to Mods/vcmi/Content/Sprites/lobby/dropdownNormal.png diff --git a/Mods/vcmi/Sprites/lobby/dropdownPressed.png b/Mods/vcmi/Content/Sprites/lobby/dropdownPressed.png similarity index 100% rename from Mods/vcmi/Sprites/lobby/dropdownPressed.png rename to Mods/vcmi/Content/Sprites/lobby/dropdownPressed.png diff --git a/Mods/vcmi/Data/lobby/iconFolder.png b/Mods/vcmi/Content/Sprites/lobby/iconFolder.png similarity index 100% rename from Mods/vcmi/Data/lobby/iconFolder.png rename to Mods/vcmi/Content/Sprites/lobby/iconFolder.png diff --git a/Mods/vcmi/Data/lobby/iconPlayer.png b/Mods/vcmi/Content/Sprites/lobby/iconPlayer.png similarity index 100% rename from Mods/vcmi/Data/lobby/iconPlayer.png rename to Mods/vcmi/Content/Sprites/lobby/iconPlayer.png diff --git a/Mods/vcmi/Data/lobby/iconSend.png b/Mods/vcmi/Content/Sprites/lobby/iconSend.png similarity index 100% rename from Mods/vcmi/Data/lobby/iconSend.png rename to Mods/vcmi/Content/Sprites/lobby/iconSend.png diff --git a/Mods/vcmi/Data/lobby/selectionTabSortDate.png b/Mods/vcmi/Content/Sprites/lobby/selectionTabSortDate.png similarity index 100% rename from Mods/vcmi/Data/lobby/selectionTabSortDate.png rename to Mods/vcmi/Content/Sprites/lobby/selectionTabSortDate.png diff --git a/Mods/vcmi/Data/lobby/townBorderBig.png b/Mods/vcmi/Content/Sprites/lobby/townBorderBig.png similarity index 100% rename from Mods/vcmi/Data/lobby/townBorderBig.png rename to Mods/vcmi/Content/Sprites/lobby/townBorderBig.png diff --git a/Mods/vcmi/Data/lobby/townBorderBigActivated.png b/Mods/vcmi/Content/Sprites/lobby/townBorderBigActivated.png similarity index 100% rename from Mods/vcmi/Data/lobby/townBorderBigActivated.png rename to Mods/vcmi/Content/Sprites/lobby/townBorderBigActivated.png diff --git a/Mods/vcmi/Data/lobby/townBorderBigGrayedOut.png b/Mods/vcmi/Content/Sprites/lobby/townBorderBigGrayedOut.png similarity index 100% rename from Mods/vcmi/Data/lobby/townBorderBigGrayedOut.png rename to Mods/vcmi/Content/Sprites/lobby/townBorderBigGrayedOut.png diff --git a/Mods/vcmi/Data/lobby/townBorderSmallActivated.png b/Mods/vcmi/Content/Sprites/lobby/townBorderSmallActivated.png similarity index 100% rename from Mods/vcmi/Data/lobby/townBorderSmallActivated.png rename to Mods/vcmi/Content/Sprites/lobby/townBorderSmallActivated.png diff --git a/Mods/vcmi/Sprites/mapFormatIcons/vcmi1.png b/Mods/vcmi/Content/Sprites/mapFormatIcons/vcmi1.png similarity index 100% rename from Mods/vcmi/Sprites/mapFormatIcons/vcmi1.png rename to Mods/vcmi/Content/Sprites/mapFormatIcons/vcmi1.png diff --git a/Mods/vcmi/Data/questDialog.png b/Mods/vcmi/Content/Sprites/questDialog.png similarity index 100% rename from Mods/vcmi/Data/questDialog.png rename to Mods/vcmi/Content/Sprites/questDialog.png diff --git a/Mods/vcmi/Data/radialMenu/altDown.png b/Mods/vcmi/Content/Sprites/radialMenu/altDown.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/altDown.png rename to Mods/vcmi/Content/Sprites/radialMenu/altDown.png diff --git a/Mods/vcmi/Data/radialMenu/altDownBottom.png b/Mods/vcmi/Content/Sprites/radialMenu/altDownBottom.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/altDownBottom.png rename to Mods/vcmi/Content/Sprites/radialMenu/altDownBottom.png diff --git a/Mods/vcmi/Data/radialMenu/altUp.png b/Mods/vcmi/Content/Sprites/radialMenu/altUp.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/altUp.png rename to Mods/vcmi/Content/Sprites/radialMenu/altUp.png diff --git a/Mods/vcmi/Data/radialMenu/altUpTop.png b/Mods/vcmi/Content/Sprites/radialMenu/altUpTop.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/altUpTop.png rename to Mods/vcmi/Content/Sprites/radialMenu/altUpTop.png diff --git a/Mods/vcmi/Data/radialMenu/dismissHero.png b/Mods/vcmi/Content/Sprites/radialMenu/dismissHero.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/dismissHero.png rename to Mods/vcmi/Content/Sprites/radialMenu/dismissHero.png diff --git a/Mods/vcmi/Data/radialMenu/heroMove.png b/Mods/vcmi/Content/Sprites/radialMenu/heroMove.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/heroMove.png rename to Mods/vcmi/Content/Sprites/radialMenu/heroMove.png diff --git a/Mods/vcmi/Data/radialMenu/heroSwap.png b/Mods/vcmi/Content/Sprites/radialMenu/heroSwap.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/heroSwap.png rename to Mods/vcmi/Content/Sprites/radialMenu/heroSwap.png diff --git a/Mods/vcmi/Data/radialMenu/itemEmpty.png b/Mods/vcmi/Content/Sprites/radialMenu/itemEmpty.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/itemEmpty.png rename to Mods/vcmi/Content/Sprites/radialMenu/itemEmpty.png diff --git a/Mods/vcmi/Data/radialMenu/itemEmptyAlt.png b/Mods/vcmi/Content/Sprites/radialMenu/itemEmptyAlt.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/itemEmptyAlt.png rename to Mods/vcmi/Content/Sprites/radialMenu/itemEmptyAlt.png diff --git a/Mods/vcmi/Data/radialMenu/itemInactive.png b/Mods/vcmi/Content/Sprites/radialMenu/itemInactive.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/itemInactive.png rename to Mods/vcmi/Content/Sprites/radialMenu/itemInactive.png diff --git a/Mods/vcmi/Data/radialMenu/itemInactiveAlt.png b/Mods/vcmi/Content/Sprites/radialMenu/itemInactiveAlt.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/itemInactiveAlt.png rename to Mods/vcmi/Content/Sprites/radialMenu/itemInactiveAlt.png diff --git a/Mods/vcmi/Data/radialMenu/moveArtifacts.png b/Mods/vcmi/Content/Sprites/radialMenu/moveArtifacts.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/moveArtifacts.png rename to Mods/vcmi/Content/Sprites/radialMenu/moveArtifacts.png diff --git a/Mods/vcmi/Data/radialMenu/moveTroops.png b/Mods/vcmi/Content/Sprites/radialMenu/moveTroops.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/moveTroops.png rename to Mods/vcmi/Content/Sprites/radialMenu/moveTroops.png diff --git a/Mods/vcmi/Data/radialMenu/stackFillOne.png b/Mods/vcmi/Content/Sprites/radialMenu/stackFillOne.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/stackFillOne.png rename to Mods/vcmi/Content/Sprites/radialMenu/stackFillOne.png diff --git a/Mods/vcmi/Data/radialMenu/stackMerge.png b/Mods/vcmi/Content/Sprites/radialMenu/stackMerge.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/stackMerge.png rename to Mods/vcmi/Content/Sprites/radialMenu/stackMerge.png diff --git a/Mods/vcmi/Data/radialMenu/stackSplitDialog.png b/Mods/vcmi/Content/Sprites/radialMenu/stackSplitDialog.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/stackSplitDialog.png rename to Mods/vcmi/Content/Sprites/radialMenu/stackSplitDialog.png diff --git a/Mods/vcmi/Data/radialMenu/stackSplitEqual.png b/Mods/vcmi/Content/Sprites/radialMenu/stackSplitEqual.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/stackSplitEqual.png rename to Mods/vcmi/Content/Sprites/radialMenu/stackSplitEqual.png diff --git a/Mods/vcmi/Data/radialMenu/stackSplitOne.png b/Mods/vcmi/Content/Sprites/radialMenu/stackSplitOne.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/stackSplitOne.png rename to Mods/vcmi/Content/Sprites/radialMenu/stackSplitOne.png diff --git a/Mods/vcmi/Data/radialMenu/statusBar.png b/Mods/vcmi/Content/Sprites/radialMenu/statusBar.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/statusBar.png rename to Mods/vcmi/Content/Sprites/radialMenu/statusBar.png diff --git a/Mods/vcmi/Data/radialMenu/swapArtifacts.png b/Mods/vcmi/Content/Sprites/radialMenu/swapArtifacts.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/swapArtifacts.png rename to Mods/vcmi/Content/Sprites/radialMenu/swapArtifacts.png diff --git a/Mods/vcmi/Data/radialMenu/tradeHeroes.png b/Mods/vcmi/Content/Sprites/radialMenu/tradeHeroes.png similarity index 100% rename from Mods/vcmi/Data/radialMenu/tradeHeroes.png rename to Mods/vcmi/Content/Sprites/radialMenu/tradeHeroes.png diff --git a/Mods/vcmi/Data/settingsWindow/frameAudio.png b/Mods/vcmi/Content/Sprites/settingsWindow/frameAudio.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/frameAudio.png rename to Mods/vcmi/Content/Sprites/settingsWindow/frameAudio.png diff --git a/Mods/vcmi/Data/settingsWindow/frameMovement.png b/Mods/vcmi/Content/Sprites/settingsWindow/frameMovement.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/frameMovement.png rename to Mods/vcmi/Content/Sprites/settingsWindow/frameMovement.png diff --git a/Mods/vcmi/Data/settingsWindow/frameStackQueue.png b/Mods/vcmi/Content/Sprites/settingsWindow/frameStackQueue.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/frameStackQueue.png rename to Mods/vcmi/Content/Sprites/settingsWindow/frameStackQueue.png diff --git a/Mods/vcmi/Data/settingsWindow/gear.png b/Mods/vcmi/Content/Sprites/settingsWindow/gear.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/gear.png rename to Mods/vcmi/Content/Sprites/settingsWindow/gear.png diff --git a/Mods/vcmi/Data/settingsWindow/scrollSpeed1.png b/Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed1.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/scrollSpeed1.png rename to Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed1.png diff --git a/Mods/vcmi/Data/settingsWindow/scrollSpeed2.png b/Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed2.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/scrollSpeed2.png rename to Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed2.png diff --git a/Mods/vcmi/Data/settingsWindow/scrollSpeed3.png b/Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed3.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/scrollSpeed3.png rename to Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed3.png diff --git a/Mods/vcmi/Data/settingsWindow/scrollSpeed4.png b/Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed4.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/scrollSpeed4.png rename to Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed4.png diff --git a/Mods/vcmi/Data/settingsWindow/scrollSpeed5.png b/Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed5.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/scrollSpeed5.png rename to Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed5.png diff --git a/Mods/vcmi/Data/settingsWindow/scrollSpeed6.png b/Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed6.png similarity index 100% rename from Mods/vcmi/Data/settingsWindow/scrollSpeed6.png rename to Mods/vcmi/Content/Sprites/settingsWindow/scrollSpeed6.png diff --git a/Mods/vcmi/Data/spellResearch/accept.png b/Mods/vcmi/Content/Sprites/spellResearch/accept.png similarity index 100% rename from Mods/vcmi/Data/spellResearch/accept.png rename to Mods/vcmi/Content/Sprites/spellResearch/accept.png diff --git a/Mods/vcmi/Data/spellResearch/close.png b/Mods/vcmi/Content/Sprites/spellResearch/close.png similarity index 100% rename from Mods/vcmi/Data/spellResearch/close.png rename to Mods/vcmi/Content/Sprites/spellResearch/close.png diff --git a/Mods/vcmi/Data/spellResearch/reroll.png b/Mods/vcmi/Content/Sprites/spellResearch/reroll.png similarity index 100% rename from Mods/vcmi/Data/spellResearch/reroll.png rename to Mods/vcmi/Content/Sprites/spellResearch/reroll.png diff --git a/Mods/vcmi/Data/stackWindow/bonus-effects.png b/Mods/vcmi/Content/Sprites/stackWindow/bonus-effects.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/bonus-effects.png rename to Mods/vcmi/Content/Sprites/stackWindow/bonus-effects.png diff --git a/Mods/vcmi/Data/stackWindow/button-panel.png b/Mods/vcmi/Content/Sprites/stackWindow/button-panel.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/button-panel.png rename to Mods/vcmi/Content/Sprites/stackWindow/button-panel.png diff --git a/Mods/vcmi/Sprites/stackWindow/cancel-normal.png b/Mods/vcmi/Content/Sprites/stackWindow/cancel-normal.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/cancel-normal.png rename to Mods/vcmi/Content/Sprites/stackWindow/cancel-normal.png diff --git a/Mods/vcmi/Sprites/stackWindow/cancel-pressed.png b/Mods/vcmi/Content/Sprites/stackWindow/cancel-pressed.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/cancel-pressed.png rename to Mods/vcmi/Content/Sprites/stackWindow/cancel-pressed.png diff --git a/Mods/vcmi/Sprites/stackWindow/cancelButton.json b/Mods/vcmi/Content/Sprites/stackWindow/cancelButton.json similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/cancelButton.json rename to Mods/vcmi/Content/Sprites/stackWindow/cancelButton.json diff --git a/Mods/vcmi/Data/stackWindow/commander-abilities.png b/Mods/vcmi/Content/Sprites/stackWindow/commander-abilities.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/commander-abilities.png rename to Mods/vcmi/Content/Sprites/stackWindow/commander-abilities.png diff --git a/Mods/vcmi/Data/stackWindow/commander-bg.png b/Mods/vcmi/Content/Sprites/stackWindow/commander-bg.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/commander-bg.png rename to Mods/vcmi/Content/Sprites/stackWindow/commander-bg.png diff --git a/Mods/vcmi/Data/stackWindow/icons.png b/Mods/vcmi/Content/Sprites/stackWindow/icons.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/icons.png rename to Mods/vcmi/Content/Sprites/stackWindow/icons.png diff --git a/Mods/vcmi/Data/stackWindow/info-panel-0.png b/Mods/vcmi/Content/Sprites/stackWindow/info-panel-0.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/info-panel-0.png rename to Mods/vcmi/Content/Sprites/stackWindow/info-panel-0.png diff --git a/Mods/vcmi/Data/stackWindow/info-panel-1.png b/Mods/vcmi/Content/Sprites/stackWindow/info-panel-1.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/info-panel-1.png rename to Mods/vcmi/Content/Sprites/stackWindow/info-panel-1.png diff --git a/Mods/vcmi/Data/stackWindow/info-panel-2.png b/Mods/vcmi/Content/Sprites/stackWindow/info-panel-2.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/info-panel-2.png rename to Mods/vcmi/Content/Sprites/stackWindow/info-panel-2.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-0.png b/Mods/vcmi/Content/Sprites/stackWindow/level-0.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-0.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-0.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-1.png b/Mods/vcmi/Content/Sprites/stackWindow/level-1.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-1.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-1.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-10.png b/Mods/vcmi/Content/Sprites/stackWindow/level-10.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-10.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-10.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-2.png b/Mods/vcmi/Content/Sprites/stackWindow/level-2.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-2.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-2.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-3.png b/Mods/vcmi/Content/Sprites/stackWindow/level-3.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-3.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-3.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-4.png b/Mods/vcmi/Content/Sprites/stackWindow/level-4.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-4.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-4.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-5.png b/Mods/vcmi/Content/Sprites/stackWindow/level-5.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-5.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-5.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-6.png b/Mods/vcmi/Content/Sprites/stackWindow/level-6.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-6.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-6.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-7.png b/Mods/vcmi/Content/Sprites/stackWindow/level-7.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-7.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-7.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-8.png b/Mods/vcmi/Content/Sprites/stackWindow/level-8.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-8.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-8.png diff --git a/Mods/vcmi/Sprites/stackWindow/level-9.png b/Mods/vcmi/Content/Sprites/stackWindow/level-9.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/level-9.png rename to Mods/vcmi/Content/Sprites/stackWindow/level-9.png diff --git a/Mods/vcmi/Sprites/stackWindow/levels.json b/Mods/vcmi/Content/Sprites/stackWindow/levels.json similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/levels.json rename to Mods/vcmi/Content/Sprites/stackWindow/levels.json diff --git a/Mods/vcmi/Data/stackWindow/spell-effects.png b/Mods/vcmi/Content/Sprites/stackWindow/spell-effects.png similarity index 100% rename from Mods/vcmi/Data/stackWindow/spell-effects.png rename to Mods/vcmi/Content/Sprites/stackWindow/spell-effects.png diff --git a/Mods/vcmi/Sprites/stackWindow/switchModeIcons.json b/Mods/vcmi/Content/Sprites/stackWindow/switchModeIcons.json similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/switchModeIcons.json rename to Mods/vcmi/Content/Sprites/stackWindow/switchModeIcons.json diff --git a/Mods/vcmi/Sprites/stackWindow/upgrade-normal.png b/Mods/vcmi/Content/Sprites/stackWindow/upgrade-normal.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/upgrade-normal.png rename to Mods/vcmi/Content/Sprites/stackWindow/upgrade-normal.png diff --git a/Mods/vcmi/Sprites/stackWindow/upgrade-pressed.png b/Mods/vcmi/Content/Sprites/stackWindow/upgrade-pressed.png similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/upgrade-pressed.png rename to Mods/vcmi/Content/Sprites/stackWindow/upgrade-pressed.png diff --git a/Mods/vcmi/Sprites/stackWindow/upgradeButton.json b/Mods/vcmi/Content/Sprites/stackWindow/upgradeButton.json similarity index 100% rename from Mods/vcmi/Sprites/stackWindow/upgradeButton.json rename to Mods/vcmi/Content/Sprites/stackWindow/upgradeButton.json diff --git a/Mods/vcmi/Sprites/vcmi/battleQueue/defendBig.png b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendBig.png similarity index 100% rename from Mods/vcmi/Sprites/vcmi/battleQueue/defendBig.png rename to Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendBig.png diff --git a/Mods/vcmi/Sprites/vcmi/battleQueue/defendSmall.png b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendSmall.png similarity index 100% rename from Mods/vcmi/Sprites/vcmi/battleQueue/defendSmall.png rename to Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendSmall.png diff --git a/Mods/vcmi/Sprites/vcmi/battleQueue/statesBig.json b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesBig.json similarity index 100% rename from Mods/vcmi/Sprites/vcmi/battleQueue/statesBig.json rename to Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesBig.json diff --git a/Mods/vcmi/Sprites/vcmi/battleQueue/statesSmall.json b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesSmall.json similarity index 100% rename from Mods/vcmi/Sprites/vcmi/battleQueue/statesSmall.json rename to Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesSmall.json diff --git a/Mods/vcmi/Sprites/vcmi/battleQueue/waitBig.png b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitBig.png similarity index 100% rename from Mods/vcmi/Sprites/vcmi/battleQueue/waitBig.png rename to Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitBig.png diff --git a/Mods/vcmi/Sprites/vcmi/battleQueue/waitSmall.png b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitSmall.png similarity index 100% rename from Mods/vcmi/Sprites/vcmi/battleQueue/waitSmall.png rename to Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitSmall.png diff --git a/Mods/vcmi/Sprites/vcmi/creatureIcons/towerLarge.png b/Mods/vcmi/Content/Sprites/vcmi/creatureIcons/towerLarge.png similarity index 100% rename from Mods/vcmi/Sprites/vcmi/creatureIcons/towerLarge.png rename to Mods/vcmi/Content/Sprites/vcmi/creatureIcons/towerLarge.png diff --git a/Mods/vcmi/Sprites/vcmi/creatureIcons/towerSmall.png b/Mods/vcmi/Content/Sprites/vcmi/creatureIcons/towerSmall.png similarity index 100% rename from Mods/vcmi/Sprites/vcmi/creatureIcons/towerSmall.png rename to Mods/vcmi/Content/Sprites/vcmi/creatureIcons/towerSmall.png diff --git a/Mods/vcmi/Video/tutorial/AbortSpell.webm b/Mods/vcmi/Content/Video/tutorial/AbortSpell.webm similarity index 100% rename from Mods/vcmi/Video/tutorial/AbortSpell.webm rename to Mods/vcmi/Content/Video/tutorial/AbortSpell.webm diff --git a/Mods/vcmi/Video/tutorial/BattleDirection.webm b/Mods/vcmi/Content/Video/tutorial/BattleDirection.webm similarity index 100% rename from Mods/vcmi/Video/tutorial/BattleDirection.webm rename to Mods/vcmi/Content/Video/tutorial/BattleDirection.webm diff --git a/Mods/vcmi/Video/tutorial/BattleDirectionAbort.webm b/Mods/vcmi/Content/Video/tutorial/BattleDirectionAbort.webm similarity index 100% rename from Mods/vcmi/Video/tutorial/BattleDirectionAbort.webm rename to Mods/vcmi/Content/Video/tutorial/BattleDirectionAbort.webm diff --git a/Mods/vcmi/Video/tutorial/MapPanning.webm b/Mods/vcmi/Content/Video/tutorial/MapPanning.webm similarity index 100% rename from Mods/vcmi/Video/tutorial/MapPanning.webm rename to Mods/vcmi/Content/Video/tutorial/MapPanning.webm diff --git a/Mods/vcmi/Video/tutorial/MapZooming.webm b/Mods/vcmi/Content/Video/tutorial/MapZooming.webm similarity index 100% rename from Mods/vcmi/Video/tutorial/MapZooming.webm rename to Mods/vcmi/Content/Video/tutorial/MapZooming.webm diff --git a/Mods/vcmi/Video/tutorial/RadialWheel.webm b/Mods/vcmi/Content/Video/tutorial/RadialWheel.webm similarity index 100% rename from Mods/vcmi/Video/tutorial/RadialWheel.webm rename to Mods/vcmi/Content/Video/tutorial/RadialWheel.webm diff --git a/Mods/vcmi/Video/tutorial/RightClick.webm b/Mods/vcmi/Content/Video/tutorial/RightClick.webm similarity index 100% rename from Mods/vcmi/Video/tutorial/RightClick.webm rename to Mods/vcmi/Content/Video/tutorial/RightClick.webm diff --git a/Mods/vcmi/config/chinese.json b/Mods/vcmi/Content/config/chinese.json similarity index 100% rename from Mods/vcmi/config/chinese.json rename to Mods/vcmi/Content/config/chinese.json diff --git a/Mods/vcmi/config/czech.json b/Mods/vcmi/Content/config/czech.json similarity index 100% rename from Mods/vcmi/config/czech.json rename to Mods/vcmi/Content/config/czech.json diff --git a/Mods/vcmi/config/english.json b/Mods/vcmi/Content/config/english.json similarity index 100% rename from Mods/vcmi/config/english.json rename to Mods/vcmi/Content/config/english.json diff --git a/Mods/vcmi/config/french.json b/Mods/vcmi/Content/config/french.json similarity index 100% rename from Mods/vcmi/config/french.json rename to Mods/vcmi/Content/config/french.json diff --git a/Mods/vcmi/config/german.json b/Mods/vcmi/Content/config/german.json similarity index 100% rename from Mods/vcmi/config/german.json rename to Mods/vcmi/Content/config/german.json diff --git a/Mods/vcmi/config/polish.json b/Mods/vcmi/Content/config/polish.json similarity index 100% rename from Mods/vcmi/config/polish.json rename to Mods/vcmi/Content/config/polish.json diff --git a/Mods/vcmi/config/portuguese.json b/Mods/vcmi/Content/config/portuguese.json similarity index 100% rename from Mods/vcmi/config/portuguese.json rename to Mods/vcmi/Content/config/portuguese.json diff --git a/Mods/vcmi/config/rmg/hdmod/aroundamarsh.json b/Mods/vcmi/Content/config/rmg/hdmod/aroundamarsh.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/aroundamarsh.json rename to Mods/vcmi/Content/config/rmg/hdmod/aroundamarsh.json diff --git a/Mods/vcmi/config/rmg/hdmod/balance.json b/Mods/vcmi/Content/config/rmg/hdmod/balance.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/balance.json rename to Mods/vcmi/Content/config/rmg/hdmod/balance.json diff --git a/Mods/vcmi/config/rmg/hdmod/blockbuster.json b/Mods/vcmi/Content/config/rmg/hdmod/blockbuster.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/blockbuster.json rename to Mods/vcmi/Content/config/rmg/hdmod/blockbuster.json diff --git a/Mods/vcmi/config/rmg/hdmod/clashOfDragons.json b/Mods/vcmi/Content/config/rmg/hdmod/clashOfDragons.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/clashOfDragons.json rename to Mods/vcmi/Content/config/rmg/hdmod/clashOfDragons.json diff --git a/Mods/vcmi/config/rmg/hdmod/coldshadowsFantasy.json b/Mods/vcmi/Content/config/rmg/hdmod/coldshadowsFantasy.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/coldshadowsFantasy.json rename to Mods/vcmi/Content/config/rmg/hdmod/coldshadowsFantasy.json diff --git a/Mods/vcmi/config/rmg/hdmod/cube.json b/Mods/vcmi/Content/config/rmg/hdmod/cube.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/cube.json rename to Mods/vcmi/Content/config/rmg/hdmod/cube.json diff --git a/Mods/vcmi/config/rmg/hdmod/diamond.json b/Mods/vcmi/Content/config/rmg/hdmod/diamond.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/diamond.json rename to Mods/vcmi/Content/config/rmg/hdmod/diamond.json diff --git a/Mods/vcmi/config/rmg/hdmod/extreme.json b/Mods/vcmi/Content/config/rmg/hdmod/extreme.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/extreme.json rename to Mods/vcmi/Content/config/rmg/hdmod/extreme.json diff --git a/Mods/vcmi/config/rmg/hdmod/extreme2.json b/Mods/vcmi/Content/config/rmg/hdmod/extreme2.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/extreme2.json rename to Mods/vcmi/Content/config/rmg/hdmod/extreme2.json diff --git a/Mods/vcmi/config/rmg/hdmod/fear.json b/Mods/vcmi/Content/config/rmg/hdmod/fear.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/fear.json rename to Mods/vcmi/Content/config/rmg/hdmod/fear.json diff --git a/Mods/vcmi/config/rmg/hdmod/frozenDragons.json b/Mods/vcmi/Content/config/rmg/hdmod/frozenDragons.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/frozenDragons.json rename to Mods/vcmi/Content/config/rmg/hdmod/frozenDragons.json diff --git a/Mods/vcmi/config/rmg/hdmod/gimlisRevenge.json b/Mods/vcmi/Content/config/rmg/hdmod/gimlisRevenge.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/gimlisRevenge.json rename to Mods/vcmi/Content/config/rmg/hdmod/gimlisRevenge.json diff --git a/Mods/vcmi/config/rmg/hdmod/guerilla.json b/Mods/vcmi/Content/config/rmg/hdmod/guerilla.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/guerilla.json rename to Mods/vcmi/Content/config/rmg/hdmod/guerilla.json diff --git a/Mods/vcmi/config/rmg/hdmod/headquarters.json b/Mods/vcmi/Content/config/rmg/hdmod/headquarters.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/headquarters.json rename to Mods/vcmi/Content/config/rmg/hdmod/headquarters.json diff --git a/Mods/vcmi/config/rmg/hdmod/hypercube.json b/Mods/vcmi/Content/config/rmg/hdmod/hypercube.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/hypercube.json rename to Mods/vcmi/Content/config/rmg/hdmod/hypercube.json diff --git a/Mods/vcmi/config/rmg/hdmod/jebusCross.json b/Mods/vcmi/Content/config/rmg/hdmod/jebusCross.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/jebusCross.json rename to Mods/vcmi/Content/config/rmg/hdmod/jebusCross.json diff --git a/Mods/vcmi/config/rmg/hdmod/longRun.json b/Mods/vcmi/Content/config/rmg/hdmod/longRun.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/longRun.json rename to Mods/vcmi/Content/config/rmg/hdmod/longRun.json diff --git a/Mods/vcmi/config/rmg/hdmod/marathon.json b/Mods/vcmi/Content/config/rmg/hdmod/marathon.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/marathon.json rename to Mods/vcmi/Content/config/rmg/hdmod/marathon.json diff --git a/Mods/vcmi/config/rmg/hdmod/miniNostalgia.json b/Mods/vcmi/Content/config/rmg/hdmod/miniNostalgia.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/miniNostalgia.json rename to Mods/vcmi/Content/config/rmg/hdmod/miniNostalgia.json diff --git a/Mods/vcmi/config/rmg/hdmod/nostalgia.json b/Mods/vcmi/Content/config/rmg/hdmod/nostalgia.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/nostalgia.json rename to Mods/vcmi/Content/config/rmg/hdmod/nostalgia.json diff --git a/Mods/vcmi/config/rmg/hdmod/oceansEleven.json b/Mods/vcmi/Content/config/rmg/hdmod/oceansEleven.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/oceansEleven.json rename to Mods/vcmi/Content/config/rmg/hdmod/oceansEleven.json diff --git a/Mods/vcmi/config/rmg/hdmod/panic.json b/Mods/vcmi/Content/config/rmg/hdmod/panic.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/panic.json rename to Mods/vcmi/Content/config/rmg/hdmod/panic.json diff --git a/Mods/vcmi/config/rmg/hdmod/poorJebus.json b/Mods/vcmi/Content/config/rmg/hdmod/poorJebus.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/poorJebus.json rename to Mods/vcmi/Content/config/rmg/hdmod/poorJebus.json diff --git a/Mods/vcmi/config/rmg/hdmod/reckless.json b/Mods/vcmi/Content/config/rmg/hdmod/reckless.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/reckless.json rename to Mods/vcmi/Content/config/rmg/hdmod/reckless.json diff --git a/Mods/vcmi/config/rmg/hdmod/roadrunner.json b/Mods/vcmi/Content/config/rmg/hdmod/roadrunner.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/roadrunner.json rename to Mods/vcmi/Content/config/rmg/hdmod/roadrunner.json diff --git a/Mods/vcmi/config/rmg/hdmod/shaaafworld.json b/Mods/vcmi/Content/config/rmg/hdmod/shaaafworld.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/shaaafworld.json rename to Mods/vcmi/Content/config/rmg/hdmod/shaaafworld.json diff --git a/Mods/vcmi/config/rmg/hdmod/skirmish.json b/Mods/vcmi/Content/config/rmg/hdmod/skirmish.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/skirmish.json rename to Mods/vcmi/Content/config/rmg/hdmod/skirmish.json diff --git a/Mods/vcmi/config/rmg/hdmod/speed1.json b/Mods/vcmi/Content/config/rmg/hdmod/speed1.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/speed1.json rename to Mods/vcmi/Content/config/rmg/hdmod/speed1.json diff --git a/Mods/vcmi/config/rmg/hdmod/speed2.json b/Mods/vcmi/Content/config/rmg/hdmod/speed2.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/speed2.json rename to Mods/vcmi/Content/config/rmg/hdmod/speed2.json diff --git a/Mods/vcmi/config/rmg/hdmod/spider.json b/Mods/vcmi/Content/config/rmg/hdmod/spider.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/spider.json rename to Mods/vcmi/Content/config/rmg/hdmod/spider.json diff --git a/Mods/vcmi/config/rmg/hdmod/superslam.json b/Mods/vcmi/Content/config/rmg/hdmod/superslam.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/superslam.json rename to Mods/vcmi/Content/config/rmg/hdmod/superslam.json diff --git a/Mods/vcmi/config/rmg/hdmod/triad.json b/Mods/vcmi/Content/config/rmg/hdmod/triad.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/triad.json rename to Mods/vcmi/Content/config/rmg/hdmod/triad.json diff --git a/Mods/vcmi/config/rmg/hdmod/vortex.json b/Mods/vcmi/Content/config/rmg/hdmod/vortex.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmod/vortex.json rename to Mods/vcmi/Content/config/rmg/hdmod/vortex.json diff --git a/Mods/vcmi/config/rmg/hdmodUnused/anarchy.json b/Mods/vcmi/Content/config/rmg/hdmodUnused/anarchy.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmodUnused/anarchy.json rename to Mods/vcmi/Content/config/rmg/hdmodUnused/anarchy.json diff --git a/Mods/vcmi/config/rmg/hdmodUnused/balance m+u 200%.json b/Mods/vcmi/Content/config/rmg/hdmodUnused/balance m+u 200%.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmodUnused/balance m+u 200%.json rename to Mods/vcmi/Content/config/rmg/hdmodUnused/balance m+u 200%.json diff --git a/Mods/vcmi/config/rmg/hdmodUnused/midnightMix.json b/Mods/vcmi/Content/config/rmg/hdmodUnused/midnightMix.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmodUnused/midnightMix.json rename to Mods/vcmi/Content/config/rmg/hdmodUnused/midnightMix.json diff --git a/Mods/vcmi/config/rmg/hdmodUnused/skirmish m-u 200%.json b/Mods/vcmi/Content/config/rmg/hdmodUnused/skirmish m-u 200%.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmodUnused/skirmish m-u 200%.json rename to Mods/vcmi/Content/config/rmg/hdmodUnused/skirmish m-u 200%.json diff --git a/Mods/vcmi/config/rmg/hdmodUnused/true random.json b/Mods/vcmi/Content/config/rmg/hdmodUnused/true random.json similarity index 100% rename from Mods/vcmi/config/rmg/hdmodUnused/true random.json rename to Mods/vcmi/Content/config/rmg/hdmodUnused/true random.json diff --git a/Mods/vcmi/config/rmg/heroes3/dwarvenTunnels.json b/Mods/vcmi/Content/config/rmg/heroes3/dwarvenTunnels.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/dwarvenTunnels.json rename to Mods/vcmi/Content/config/rmg/heroes3/dwarvenTunnels.json diff --git a/Mods/vcmi/config/rmg/heroes3/golemsAplenty.json b/Mods/vcmi/Content/config/rmg/heroes3/golemsAplenty.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/golemsAplenty.json rename to Mods/vcmi/Content/config/rmg/heroes3/golemsAplenty.json diff --git a/Mods/vcmi/config/rmg/heroes3/meetingInMuzgob.json b/Mods/vcmi/Content/config/rmg/heroes3/meetingInMuzgob.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/meetingInMuzgob.json rename to Mods/vcmi/Content/config/rmg/heroes3/meetingInMuzgob.json diff --git a/Mods/vcmi/config/rmg/heroes3/monksRetreat.json b/Mods/vcmi/Content/config/rmg/heroes3/monksRetreat.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/monksRetreat.json rename to Mods/vcmi/Content/config/rmg/heroes3/monksRetreat.json diff --git a/Mods/vcmi/config/rmg/heroes3/newcomers.json b/Mods/vcmi/Content/config/rmg/heroes3/newcomers.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/newcomers.json rename to Mods/vcmi/Content/config/rmg/heroes3/newcomers.json diff --git a/Mods/vcmi/config/rmg/heroes3/readyOrNot.json b/Mods/vcmi/Content/config/rmg/heroes3/readyOrNot.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/readyOrNot.json rename to Mods/vcmi/Content/config/rmg/heroes3/readyOrNot.json diff --git a/Mods/vcmi/config/rmg/heroes3/smallRing.json b/Mods/vcmi/Content/config/rmg/heroes3/smallRing.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/smallRing.json rename to Mods/vcmi/Content/config/rmg/heroes3/smallRing.json diff --git a/Mods/vcmi/config/rmg/heroes3/southOfHell.json b/Mods/vcmi/Content/config/rmg/heroes3/southOfHell.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/southOfHell.json rename to Mods/vcmi/Content/config/rmg/heroes3/southOfHell.json diff --git a/Mods/vcmi/config/rmg/heroes3/worldsAtWar.json b/Mods/vcmi/Content/config/rmg/heroes3/worldsAtWar.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3/worldsAtWar.json rename to Mods/vcmi/Content/config/rmg/heroes3/worldsAtWar.json diff --git a/Mods/vcmi/config/rmg/heroes3unused/dragon.json b/Mods/vcmi/Content/config/rmg/heroes3unused/dragon.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3unused/dragon.json rename to Mods/vcmi/Content/config/rmg/heroes3unused/dragon.json diff --git a/Mods/vcmi/config/rmg/heroes3unused/gauntlet.json b/Mods/vcmi/Content/config/rmg/heroes3unused/gauntlet.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3unused/gauntlet.json rename to Mods/vcmi/Content/config/rmg/heroes3unused/gauntlet.json diff --git a/Mods/vcmi/config/rmg/heroes3unused/ring.json b/Mods/vcmi/Content/config/rmg/heroes3unused/ring.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3unused/ring.json rename to Mods/vcmi/Content/config/rmg/heroes3unused/ring.json diff --git a/Mods/vcmi/config/rmg/heroes3unused/riseOfPhoenix.json b/Mods/vcmi/Content/config/rmg/heroes3unused/riseOfPhoenix.json similarity index 100% rename from Mods/vcmi/config/rmg/heroes3unused/riseOfPhoenix.json rename to Mods/vcmi/Content/config/rmg/heroes3unused/riseOfPhoenix.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm0k.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm0k.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm0k.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm0k.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2a.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2a.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2a.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2a.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2b(2).json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2b(2).json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2b(2).json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2b(2).json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2b.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2b.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2b.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2b.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2c.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2c.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2c.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2c.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2f(2).json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2f(2).json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2f(2).json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2f(2).json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2f.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2f.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2f.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2f.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2h(2).json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2h(2).json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2h(2).json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2h(2).json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2h.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2h.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2h.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2h.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2i(2).json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2i(2).json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2i(2).json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2i(2).json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm2i.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm2i.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm2i.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm2i.json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm4d(2).json b/Mods/vcmi/Content/config/rmg/symmetric/2sm4d(2).json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm4d(2).json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm4d(2).json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm4d(3).json b/Mods/vcmi/Content/config/rmg/symmetric/2sm4d(3).json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm4d(3).json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm4d(3).json diff --git a/Mods/vcmi/config/rmg/symmetric/2sm4d.json b/Mods/vcmi/Content/config/rmg/symmetric/2sm4d.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/2sm4d.json rename to Mods/vcmi/Content/config/rmg/symmetric/2sm4d.json diff --git a/Mods/vcmi/config/rmg/symmetric/3sb0b.json b/Mods/vcmi/Content/config/rmg/symmetric/3sb0b.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/3sb0b.json rename to Mods/vcmi/Content/config/rmg/symmetric/3sb0b.json diff --git a/Mods/vcmi/config/rmg/symmetric/3sb0c.json b/Mods/vcmi/Content/config/rmg/symmetric/3sb0c.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/3sb0c.json rename to Mods/vcmi/Content/config/rmg/symmetric/3sb0c.json diff --git a/Mods/vcmi/config/rmg/symmetric/3sm3d.json b/Mods/vcmi/Content/config/rmg/symmetric/3sm3d.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/3sm3d.json rename to Mods/vcmi/Content/config/rmg/symmetric/3sm3d.json diff --git a/Mods/vcmi/config/rmg/symmetric/4sm0d.json b/Mods/vcmi/Content/config/rmg/symmetric/4sm0d.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/4sm0d.json rename to Mods/vcmi/Content/config/rmg/symmetric/4sm0d.json diff --git a/Mods/vcmi/config/rmg/symmetric/4sm0f.json b/Mods/vcmi/Content/config/rmg/symmetric/4sm0f.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/4sm0f.json rename to Mods/vcmi/Content/config/rmg/symmetric/4sm0f.json diff --git a/Mods/vcmi/config/rmg/symmetric/4sm0g.json b/Mods/vcmi/Content/config/rmg/symmetric/4sm0g.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/4sm0g.json rename to Mods/vcmi/Content/config/rmg/symmetric/4sm0g.json diff --git a/Mods/vcmi/config/rmg/symmetric/4sm4e.json b/Mods/vcmi/Content/config/rmg/symmetric/4sm4e.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/4sm4e.json rename to Mods/vcmi/Content/config/rmg/symmetric/4sm4e.json diff --git a/Mods/vcmi/config/rmg/symmetric/5sb0a.json b/Mods/vcmi/Content/config/rmg/symmetric/5sb0a.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/5sb0a.json rename to Mods/vcmi/Content/config/rmg/symmetric/5sb0a.json diff --git a/Mods/vcmi/config/rmg/symmetric/5sb0b.json b/Mods/vcmi/Content/config/rmg/symmetric/5sb0b.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/5sb0b.json rename to Mods/vcmi/Content/config/rmg/symmetric/5sb0b.json diff --git a/Mods/vcmi/config/rmg/symmetric/6lm10.json b/Mods/vcmi/Content/config/rmg/symmetric/6lm10.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/6lm10.json rename to Mods/vcmi/Content/config/rmg/symmetric/6lm10.json diff --git a/Mods/vcmi/config/rmg/symmetric/6lm10a.json b/Mods/vcmi/Content/config/rmg/symmetric/6lm10a.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/6lm10a.json rename to Mods/vcmi/Content/config/rmg/symmetric/6lm10a.json diff --git a/Mods/vcmi/config/rmg/symmetric/6sm0b.json b/Mods/vcmi/Content/config/rmg/symmetric/6sm0b.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/6sm0b.json rename to Mods/vcmi/Content/config/rmg/symmetric/6sm0b.json diff --git a/Mods/vcmi/config/rmg/symmetric/6sm0d.json b/Mods/vcmi/Content/config/rmg/symmetric/6sm0d.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/6sm0d.json rename to Mods/vcmi/Content/config/rmg/symmetric/6sm0d.json diff --git a/Mods/vcmi/config/rmg/symmetric/6sm0e.json b/Mods/vcmi/Content/config/rmg/symmetric/6sm0e.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/6sm0e.json rename to Mods/vcmi/Content/config/rmg/symmetric/6sm0e.json diff --git a/Mods/vcmi/config/rmg/symmetric/7sb0b.json b/Mods/vcmi/Content/config/rmg/symmetric/7sb0b.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/7sb0b.json rename to Mods/vcmi/Content/config/rmg/symmetric/7sb0b.json diff --git a/Mods/vcmi/config/rmg/symmetric/7sb0c.json b/Mods/vcmi/Content/config/rmg/symmetric/7sb0c.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/7sb0c.json rename to Mods/vcmi/Content/config/rmg/symmetric/7sb0c.json diff --git a/Mods/vcmi/config/rmg/symmetric/8mm0e.json b/Mods/vcmi/Content/config/rmg/symmetric/8mm0e.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8mm0e.json rename to Mods/vcmi/Content/config/rmg/symmetric/8mm0e.json diff --git a/Mods/vcmi/config/rmg/symmetric/8mm6.json b/Mods/vcmi/Content/config/rmg/symmetric/8mm6.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8mm6.json rename to Mods/vcmi/Content/config/rmg/symmetric/8mm6.json diff --git a/Mods/vcmi/config/rmg/symmetric/8mm6a.json b/Mods/vcmi/Content/config/rmg/symmetric/8mm6a.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8mm6a.json rename to Mods/vcmi/Content/config/rmg/symmetric/8mm6a.json diff --git a/Mods/vcmi/config/rmg/symmetric/8sm0c.json b/Mods/vcmi/Content/config/rmg/symmetric/8sm0c.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8sm0c.json rename to Mods/vcmi/Content/config/rmg/symmetric/8sm0c.json diff --git a/Mods/vcmi/config/rmg/symmetric/8sm0f.json b/Mods/vcmi/Content/config/rmg/symmetric/8sm0f.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8sm0f.json rename to Mods/vcmi/Content/config/rmg/symmetric/8sm0f.json diff --git a/Mods/vcmi/config/rmg/symmetric/8xm12.json b/Mods/vcmi/Content/config/rmg/symmetric/8xm12.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8xm12.json rename to Mods/vcmi/Content/config/rmg/symmetric/8xm12.json diff --git a/Mods/vcmi/config/rmg/symmetric/8xm12a.json b/Mods/vcmi/Content/config/rmg/symmetric/8xm12a.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8xm12a.json rename to Mods/vcmi/Content/config/rmg/symmetric/8xm12a.json diff --git a/Mods/vcmi/config/rmg/symmetric/8xm8.json b/Mods/vcmi/Content/config/rmg/symmetric/8xm8.json similarity index 100% rename from Mods/vcmi/config/rmg/symmetric/8xm8.json rename to Mods/vcmi/Content/config/rmg/symmetric/8xm8.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/2mm2h.json b/Mods/vcmi/Content/config/rmg/unknownUnused/2mm2h.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/2mm2h.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/2mm2h.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/2x2sm4d(3).json b/Mods/vcmi/Content/config/rmg/unknownUnused/2x2sm4d(3).json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/2x2sm4d(3).json rename to Mods/vcmi/Content/config/rmg/unknownUnused/2x2sm4d(3).json diff --git a/Mods/vcmi/config/rmg/unknownUnused/4mm2h.json b/Mods/vcmi/Content/config/rmg/unknownUnused/4mm2h.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/4mm2h.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/4mm2h.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/4sm3i.json b/Mods/vcmi/Content/config/rmg/unknownUnused/4sm3i.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/4sm3i.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/4sm3i.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/6lm10a.json b/Mods/vcmi/Content/config/rmg/unknownUnused/6lm10a.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/6lm10a.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/6lm10a.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/8xm12 huge.json b/Mods/vcmi/Content/config/rmg/unknownUnused/8xm12 huge.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/8xm12 huge.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/8xm12 huge.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/8xm8 huge.json b/Mods/vcmi/Content/config/rmg/unknownUnused/8xm8 huge.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/8xm8 huge.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/8xm8 huge.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/analogy.json b/Mods/vcmi/Content/config/rmg/unknownUnused/analogy.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/analogy.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/analogy.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/cross.json b/Mods/vcmi/Content/config/rmg/unknownUnused/cross.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/cross.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/cross.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/cross2.json b/Mods/vcmi/Content/config/rmg/unknownUnused/cross2.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/cross2.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/cross2.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/cross3.json b/Mods/vcmi/Content/config/rmg/unknownUnused/cross3.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/cross3.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/cross3.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/deux paires.json b/Mods/vcmi/Content/config/rmg/unknownUnused/deux paires.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/deux paires.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/deux paires.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/doubled 8mm6.json b/Mods/vcmi/Content/config/rmg/unknownUnused/doubled 8mm6.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/doubled 8mm6.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/doubled 8mm6.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/elka.json b/Mods/vcmi/Content/config/rmg/unknownUnused/elka.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/elka.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/elka.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/goldenRing.json b/Mods/vcmi/Content/config/rmg/unknownUnused/goldenRing.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/goldenRing.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/goldenRing.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/greatSands.json b/Mods/vcmi/Content/config/rmg/unknownUnused/greatSands.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/greatSands.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/greatSands.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/kite.json b/Mods/vcmi/Content/config/rmg/unknownUnused/kite.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/kite.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/kite.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/upgrade.json b/Mods/vcmi/Content/config/rmg/unknownUnused/upgrade.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/upgrade.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/upgrade.json diff --git a/Mods/vcmi/config/rmg/unknownUnused/wheel.json b/Mods/vcmi/Content/config/rmg/unknownUnused/wheel.json similarity index 100% rename from Mods/vcmi/config/rmg/unknownUnused/wheel.json rename to Mods/vcmi/Content/config/rmg/unknownUnused/wheel.json diff --git a/Mods/vcmi/config/russian.json b/Mods/vcmi/Content/config/russian.json similarity index 100% rename from Mods/vcmi/config/russian.json rename to Mods/vcmi/Content/config/russian.json diff --git a/Mods/vcmi/config/spanish.json b/Mods/vcmi/Content/config/spanish.json similarity index 100% rename from Mods/vcmi/config/spanish.json rename to Mods/vcmi/Content/config/spanish.json diff --git a/Mods/vcmi/config/spells.json b/Mods/vcmi/Content/config/spells.json similarity index 100% rename from Mods/vcmi/config/spells.json rename to Mods/vcmi/Content/config/spells.json diff --git a/Mods/vcmi/config/swedish.json b/Mods/vcmi/Content/config/swedish.json similarity index 100% rename from Mods/vcmi/config/swedish.json rename to Mods/vcmi/Content/config/swedish.json diff --git a/Mods/vcmi/config/towerCreature.json b/Mods/vcmi/Content/config/towerCreature.json similarity index 100% rename from Mods/vcmi/config/towerCreature.json rename to Mods/vcmi/Content/config/towerCreature.json diff --git a/Mods/vcmi/config/towerFactions.json b/Mods/vcmi/Content/config/towerFactions.json similarity index 100% rename from Mods/vcmi/config/towerFactions.json rename to Mods/vcmi/Content/config/towerFactions.json diff --git a/Mods/vcmi/config/ukrainian.json b/Mods/vcmi/Content/config/ukrainian.json similarity index 100% rename from Mods/vcmi/config/ukrainian.json rename to Mods/vcmi/Content/config/ukrainian.json diff --git a/Mods/vcmi/config/vietnamese.json b/Mods/vcmi/Content/config/vietnamese.json similarity index 100% rename from Mods/vcmi/config/vietnamese.json rename to Mods/vcmi/Content/config/vietnamese.json diff --git a/Mods/vcmi/Sprites/QuickRecruitmentWindow/CreaturePurchaseCard.png b/Mods/vcmi/Sprites/QuickRecruitmentWindow/CreaturePurchaseCard.png deleted file mode 100644 index 5d7bfbfef627c3325f7f90a633611e795926536e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13531 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 !kYjA+dS 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 Date: Fri, 22 Nov 2024 16:46:48 +0000 Subject: [PATCH 09/19] Added existing HD assets for vcmi mod Some of our custom assets were actually made in high resolution, and then - greatly downscaled for use in vcmi. This PR adds (some of) these assets using recently introduced HD assets loading support. None of these were upscaled, but rather downscaled from existing high-resolution version. Following assets were added: - vcmi icon for map format - based on our main logo, with no text - 'defend' icon for stack queue - now also based on our logo, with no text and sepia effect - 'wait' icon for stack queue - added only x2 version. Was actually already present in vcmi mod, but unused. - icons for creature window (attack/defense/hit points/etc) - it was based on existing CC0 asset - 'gear' icon for settings - made from scratch by me. Will also upload all of these assets in their original resolution to vcmi-assets repository. --- .../Content/Sprites/battle/queueDefend.png | Bin 0 -> 594 bytes .../vcmi/Content/Sprites/battle/queueWait.png | Bin 0 -> 6726 bytes .../Content/Sprites/settingsWindow/gear.png | Bin 747 -> 877 bytes .../Sprites/vcmi/battleQueue/defendBig.png | Bin 2498 -> 0 bytes .../Sprites/vcmi/battleQueue/defendSmall.png | Bin 733 -> 0 bytes .../Sprites/vcmi/battleQueue/statesBig.json | 8 ---- .../Sprites/vcmi/battleQueue/statesSmall.json | 8 ---- .../Sprites/vcmi/battleQueue/waitBig.png | Bin 1721 -> 0 bytes .../Sprites/vcmi/battleQueue/waitSmall.png | Bin 759 -> 0 bytes .../Content/Sprites2x/battle/queueDefend.png | Bin 0 -> 1493 bytes .../Content/Sprites2x/battle/queueWait.png | Bin 0 -> 719 bytes .../Sprites2x/mapFormatIcons/vcmi1.png | Bin 0 -> 2314 bytes .../Content/Sprites2x/settingsWindow/gear.png | Bin 0 -> 2234 bytes .../Content/Sprites2x/stackWindow/icons.png | Bin 0 -> 4492 bytes .../Content/Sprites3x/battle/queueDefend.png | Bin 0 -> 2820 bytes .../Sprites3x/mapFormatIcons/vcmi1.png | Bin 0 -> 4052 bytes .../Content/Sprites3x/settingsWindow/gear.png | Bin 0 -> 3769 bytes .../Content/Sprites3x/stackWindow/icons.png | Bin 0 -> 7575 bytes .../Content/Sprites4x/battle/queueDefend.png | Bin 0 -> 4453 bytes .../Sprites4x/mapFormatIcons/vcmi1.png | Bin 0 -> 6314 bytes .../Content/Sprites4x/settingsWindow/gear.png | Bin 0 -> 5177 bytes .../Content/Sprites4x/stackWindow/icons.png | Bin 0 -> 10266 bytes client/battle/BattleInterfaceClasses.cpp | 39 ++++++++---------- client/battle/BattleInterfaceClasses.h | 3 +- 24 files changed, 19 insertions(+), 39 deletions(-) create mode 100644 Mods/vcmi/Content/Sprites/battle/queueDefend.png create mode 100644 Mods/vcmi/Content/Sprites/battle/queueWait.png delete mode 100644 Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendBig.png delete mode 100644 Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendSmall.png delete mode 100644 Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesBig.json delete mode 100644 Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesSmall.json delete mode 100644 Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitBig.png delete mode 100644 Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitSmall.png create mode 100644 Mods/vcmi/Content/Sprites2x/battle/queueDefend.png create mode 100644 Mods/vcmi/Content/Sprites2x/battle/queueWait.png create mode 100644 Mods/vcmi/Content/Sprites2x/mapFormatIcons/vcmi1.png create mode 100644 Mods/vcmi/Content/Sprites2x/settingsWindow/gear.png create mode 100644 Mods/vcmi/Content/Sprites2x/stackWindow/icons.png create mode 100644 Mods/vcmi/Content/Sprites3x/battle/queueDefend.png create mode 100644 Mods/vcmi/Content/Sprites3x/mapFormatIcons/vcmi1.png create mode 100644 Mods/vcmi/Content/Sprites3x/settingsWindow/gear.png create mode 100644 Mods/vcmi/Content/Sprites3x/stackWindow/icons.png create mode 100644 Mods/vcmi/Content/Sprites4x/battle/queueDefend.png create mode 100644 Mods/vcmi/Content/Sprites4x/mapFormatIcons/vcmi1.png create mode 100644 Mods/vcmi/Content/Sprites4x/settingsWindow/gear.png create mode 100644 Mods/vcmi/Content/Sprites4x/stackWindow/icons.png diff --git a/Mods/vcmi/Content/Sprites/battle/queueDefend.png b/Mods/vcmi/Content/Sprites/battle/queueDefend.png new file mode 100644 index 0000000000000000000000000000000000000000..87e61b3abfbaa0d6d3971df92f3cd213ba31eb7f GIT binary patch literal 594 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 delta 724 zcmV;_0xSLP2I~coBYy(2NkljH*aYOF|nlL>!O-$S4{eXkT0XzSL+#2hk<;5gTN1d66d+W_^I{ zq}#yPw68DS)saQD5xq$h2Akq&hVaoGX^%{=t&D;4A}=Ax*MEGU&c*$aL(KW8M>=9+ ziF8JKBVCYAWX1Nn>I4viXdz$oeLC+#_dC;j1BI;V;q7wbRchSxjFU%K@5c2!{;;t= z8yafUp{_a+1*2ubdHZ*c+a2V-I^)N?X|HhI6R}1V`(+CUOiGPD+nk+zPq^dlekZxI zG!W{l;z0=3Wq*Kdp@;LOWFEtmsG|@Qu%UUutS(c@eZ}eb=QWp7qK-j&>^TsE*`J^^ z|1Y!&#>s+YAti+bzrUS#h1^vvkUp1APd*yzv$s?wnDr6DgPyW8C$}&Y6GL|4{1KKI z@54w?BqcHWN$HJCOON9Feuy2S7|>)8vR$_D_~9iC_kTFR$BX9=GZ8~_nct^(_K1-} zwPH>|T#*!U07wvwjdWXu5MgR!*ebis@6$W(oxX-;X(*B$c~A%*+%rMVvNNZ)GC78t zmQl>^-rRXKKJtEPcJf_Fi#-e6LXSUN*}>ft7+T1VA6d%6gPt)tDfzjPrB5DRP>Y$9 zpXZ%RWq$=OP?Glx@-tpTo8UPvD6%Cbg|Zx=RyJY5KULYZU$biBq@tYf&1HqILeS&i zxn$WwRZ^%9eWW_9ugz@UxM3O98U27jpWCm}65nT>Jib=-17r(@VB9&?58yu~C&TUk z?wmif1)c*4=1n9Q63mJ(NM=Le>JUz_er3TjW3~GxA z5L+Qf3WyICXU9>VVV1N|1zbR^0L1P<915ispyJHfN?HKh_8OD5vK&hQ0000>lXf00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;R+5AE)GjNicSCk03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00|~ZL_t(o!`+x|a8%_L z$A6n-v(IKX$u66ay&)1dyvU+K5|kQ15wrwTI~B0gDUO4c;v0^1Z2iztJGRwvMr8)a z+R=`TRE1Wjp{---I0y)pBqbypSxI0QxPg$|o9t%qz9oB?WcT*NB7!1BKk%Vv=6<+$ z?!D)K{^x(5bDjsjqpfLh8}n*}p{s8i&2QdsEb}-FuC}df@E9J4Fb?g0$}kMW$YxW< zhBa=(>%NL$n(92pLa#7B`s+F)Ga57ok8C!=!L3GSG-y2YNVPGqMtmnQri!bmil!qu9Vl899UTGOw7|jJA4E-;1oF%y)yArotLYB(a>vqJ&pQdJ zK~DFp%&Vp5N4*LW2$}&6lCNIiH!B<6d*dIVq z6F7yHfoO`Tc81#8TEbxsML9z(GRVC7OIg4EVVtFQ!h<2KBKPg4Ej?`7(nFmWBnMb> zq_DRWUVCm8l2pZEf8dg0{Th&9UzBo}oz9+a(xVaXY`U9Sv+Hm=&1l*f_Tq8OB}*`g zDgterC=@ol9yhYABA;VhR&tjBbRC3%@iCp_fg=>#1&SKGG7zWD&GN=ZP8^px5eYH9 z#)E6d3JjwZmrDSHq@zKI@1tJ{F+L_Usno)gk1gY!<~_9fAQ}a)2OI*TI!JCf9yr46 z>*kZvVb9Auz6K=ks}Dqp#Or_B!jbN7rhBG*S?4B!Vdwx@7^3-aI~gBKG7=wV_I2}l z=;3v=>}h6q^G4P*6`-ebAOIYIrDzgIk943aGD?&y1KF|DXG*6)i-svI$^l77gTNpr zlb~zYiwq6)VJ*z!_xn+Y;sAsPLu4~Lix$=L*drToJI@6MNFFyrn2E&FD2jp*;>tiE zCo-p_jI*QtjHC@L3;`9$zRg4u89G|qS+wXj03upW#9A!L*m#PUUwVzE`(8mm$A+ST zuoO^a`Laly&Itl3wmZ0Pc6Cm?fzQcibh4@A#KL{VhELHg2LZTm%^D_^77~vnNF^g! zEKcrOy&6e?PX!!bK<1TLytbr%9VH0ak!V^aDth$JZ#>)4k2J!eIA=$dg5 zSe#|JrD}!-`p7SI;HW5L-VL=>RCR-(?fi`cR#!LwlK+6 zPIsV}MGXt^Tsw`jigKJzGp0-xvfMi{MxrUf!9zaWl0*tS&CP#d*&RQmVezd1WHUON zb{np;Vjh2DCV`_qdVOuAN5b5(^i~=c-oo~6Z`0Z0W8ty|%<|4*EPpDofer=}p-V3D zmt+K;^ORc)q3zHyW-ol2e>d--_0#>_c+0(%&Agv`@BIn(vgtS-b^x0Hv6GJ0c5D_C zbFQtXd1o_^{c6+s-)gZWlO2LRzLTa2F#^!i>POed@Op2c++_!%gc2Heu3kk{dj)`d z?!GJ6TaNV-iJfKr18bQ)XCsE8vvSTxU=Z{0Zo-2hAVj|sqW|RJ#F`#}5CTPua??%q zjKqhLDk~A3VdJlN5(gR7xbwi zhC?dbw(V!!Y@c{)deo>%*Fja3ixezL@Z6?@#NsMl$n zmxjX$j`j4=-rh-aq=3);L*GIpfGoqo_DxI27aG>oJE0!A??Cl~brgab#IVk(F4v&9X7YsOkUb-!RF zZO|R)#b(P@P9Ts3U0im9b=lPPs8Q3F?Ez!+3$-|fmGZJO7T-L~t8e``CzdawvChCS zbPW9r!LIi(GAW$GN@z?+?N|62kjEuCx{Gk)x)y4{xEZqmz-uFmAWR_BWoO z>9#8L6xd2!q@$k_>Ujf34>HZWB)5v{DNY1rc738<5yTZ4`NGsFrbB+sSn8@IF>;nj zBE#~=MwT~1vCYnad0il_ebdOsBO+HBH3FgkJi>>O2l(VcjgI%_(NG z%fc;7zK`vK5m1XIDHJxgH~)u!?P!@Wi0^DdV0b+kFFk#`kqK`z!ojV^Q|rHHG%a=; zkFQ;1%$+&K5JFtFBMQUgb{K0`)fr7qb%sM=0LI*zQ?CAj&HttS4+;VX9P(+kG5`Po M07*qoM6N<$f*mcDzyJUM diff --git a/Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendSmall.png b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/defendSmall.png deleted file mode 100644 index b22a1b5d64d0a96e98c740ec1d961a722df4c00d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmV<30wVp1P)WFU8GbZ8()Nlj2>E@cM*00KctL_t(I%hgj|NYil? zJ^OFdZRV2c+DGi;Pg_l?<}gr}qY_4D3o6`01VJx`^yWGpS*;-IA7Cn#N4^JZkI9Y9g6Ydu?%Y&f|@E`$@pYCzWNAj z1^8ycmCJM&D;h5Bl={9d@i$5pGL?jmOpl_cuSbWuaKO@SVGfT@%vv4p!)qP^ko@Ke zGD-gM-fH zVhb&V&lf`XLnn4u^5JyNyc-Xs`hR=g>ZTC!0g5E&0D>=X?;sosKwQd&Xp;f}z$sY3 zVk%4JGFdGLDZ*OLQbK~I=de7u49#{OOotkw-oXauKcl>&3XVY+1Bhc?CU$!U2TUf$ zkj;rJ*SbKfwFvsgFf#ZChCK$B$zleEC=~ObYc^)>ED-+)GjX(5#7Q$bW*IHLy-lSkdT$%CMIwpQ15W?gKTGN_IXlxiE5;N@ P00000NkvXXu0mjf0K+qH diff --git a/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesBig.json b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesBig.json deleted file mode 100644 index e8383883c..000000000 --- a/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesBig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "basepath": "vcmi/battleQueue/", - "images" : - [ - { "frame" : 0, "file" : "defendBig"}, - { "frame" : 1, "file" : "waitBig"} - ] -} diff --git a/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesSmall.json b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesSmall.json deleted file mode 100644 index 796657130..000000000 --- a/Mods/vcmi/Content/Sprites/vcmi/battleQueue/statesSmall.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "basepath": "vcmi/battleQueue/", - "images" : - [ - { "frame" : 0, "file" : "defendSmall"}, - { "frame" : 1, "file" : "waitSmall"} - ] -} diff --git a/Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitBig.png b/Mods/vcmi/Content/Sprites/vcmi/battleQueue/waitBig.png deleted file mode 100644 index ed0b70ae650aa15acd67891309d72602aa46c2d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1721 zcmV;q21fabP)WFU8GbZ8()Nlj2>E@cM*00tdNL_t(Y$K{r7Y*XhM zhA%s5eVh+C4x~N@$cI^+;AELNiIn1yDa;IQO4TV1lh#Hpv<;~3!d8t`A{IhK^!>HME-JxRW&~W><_&(6T8mPwLfyH;{qKW9r%4gI((oT z3A`kzM?lPZPn}@s&KURZMKQwnFo4R{1&oeOQMRgp$ti(hOfxk( zN>Oncn}2p@9#H^saL?o7zX`R@jgTY+ki3`vpNBHDm!!=X_K;c+807sBNrG1m}ZTsoHli(PDN=;r+oebl`5 zEE_jI13*u2FZs(A031#S`+mL`$!bHgM1TcAu}XY7I>!37wKTu}Yr6Ul@Y0We3K>sK$Z|a7mkZ~$SdNLgJPW~2}Mrqoo#Cp-RHK8 zlfSD^0Zq{~5b*KQp=XFpe1)q>#vcr#8<^I7yHQL`4pOwzNm!q=xQp!{Gik(UJ7*zH zRTocfJ%ysGgeT_K9S)ctZ>PDbDkZX_;xe|pxS5K|s)bG3ttn!6^LqBa>qQTMFNn#l zDdM|pEEE-&abv*Ggb_))lt)7-HZ$p2i#UBwPezc+)MmqCTZ&DBupyy2WbyK*3VwBD zh>6Guz5PChN20X0XyU%BrDrYT_APzkk_rR@^k4lH!vMoD@OV^y`Q{l612AV|mD1_# z)yZ3-;?WQR9YVu8eSQ`OwMr6&%ZljmLA3_VMDWd;Z}3ilVBj9%F#P#19qicAM4<{{ zJ<;9^f-0&5*}fEy23uaJXaAAg$-U-nFY)egc2eqqW2bfEQG@56u17Z@_I0nRTT_HX z4N;+0P+ne6Z*MQ_YisycMI~g+Wq7dX_k7;x!%vxO;oB&0jgc0yu6(J zp`gJ)ki|K6_PqTWrkn=Ud^=W48aX++^!t2F zkGC^D-cI}3qpaSrpKDjT$jw!;SnnI>Lo}6TgvSLZFJW?Ph>kA7pAJ8p&}(Lb(Qz}S zC3!r)ejES1_#Q1g-e$24#=^|%D&Y?rrUx|@stu|=Rb=H3h-0U9Q|U^RxYFrmIxQc7 zN8&eWYdgWNwNB1=CkP#E^@yu|eLxU@z+m3D=X^JuZEK>lvx}U?k5ag-h=1L^P9Tsd z)}cFNM4~$NPu4LU3h~;$zngZyQXtgj-{5LrACaiRvD5k-Q*HGMUTdzUcAcB-%q()2 zWFU8GbZ8()Nlj2>E@cM*00LV{L_t(I%e_-wNK{~n?jNz*-a9?y^8;rtH21N<-K89{fo*YI!qI;<%v zXeERQnPkNJ^g*j|rKO1b*FL+EaOZ)l@L3ybYxcI=&8mLr#Y5U8l#^ZgYgBEu6C;o^k$;eM#AF&D+szkxu>wxU232EwjdVQ*VkiyF#$=6E3e*(RQPMg6;G^1 zw|_d%PylkzHsG=Np-Wj)-)ot0fDHF{sn`8Yidly_Ge`4T?P`nZQS5U-AwTYsKlnJ*K{y6M z09#g-`5VdQYW9hV^`nt_+LoiJMxF`MpQeVTH+?;`V`Gv{;PE__!S`)<9{_xAi@CM+ zNL87`;GCWbqqjE%DYjr~K7Cx3A*FLqD>IL p43N~)3?(Hpt2Dz70`jKk{{l_~@gWU&rm+A3002ovPDHLkV1hj^PT&9l diff --git a/Mods/vcmi/Content/Sprites2x/battle/queueDefend.png b/Mods/vcmi/Content/Sprites2x/battle/queueDefend.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba9c0a58ed0f4b5805fb4763bf6d1e300fe6678 GIT binary patch literal 1493 zcmV;`1uFW9P)_}e0meloFkzV-rPS6|cBEBlqPlTwJcTWcS4?Zb0De>Ve0|9Y@qt18cPg_rd5 zt$K65w$ZqmicZ|7UOKhl=Q1KqnxN&AOS{9?^759_cf8i&+4ot?_l>bdumNBlM|wZ} z<#MwlfM$91`&LLD`z;x^f_#0w*e?_HIra*{`Akr8+tc@AYWl|KzdzdRs+0KW+ScWGGl!^hZS{c9LgKDAb zAy>QBG})g0_+b)@Ll7#IYT-DNrXvwT;7G~%%XgA{Q#f;-1pe5*XS6abYj&nUMQ!9QDnOM zag%u<-hL^-vX!0YthMbIfa^%SM51k@TB%*eZYaaj%zPTxwOAVfbs*d+e(9yR-i<|T zgRyNAq}T$Bv?hr0J2oJ-A0}0ZwK2+H+ny}}IDi54_HV#$cMpj6=hkl_G@#K&>5c(> zk%<5B>+^(>At;@JehcX|h#cUtV?eau*)9xVti>1sQ9w#U(wf>vk&Q|VjO`p?@i!;esP*AEPzoje-AP0%M&w$M z@<5~r`~)LCF4w=tC}@k06goC-15IDCymStw49!5bItHlJqYHmJUBSjN@BH~G1_yGu z84t&Ek)Dg^dW;YC^PoEx$Pes;AjVdFtkMLbW^s9wFa7K!^W(joDmBh^46s)5fAiZD zn|6M*Tby2PvQli3NqHn(iR(J#GakuZnp}2Fu$#ZLQXB?RGX+mkQIJhI|UEEf>}sTqyh0TM?amO#8f~@;8*7M_xd;i7hFC!|0T~YjpbZ=KfLta?S2kH2=uUsT zV}P4I=7ZI%U2pb-g~?uhU~Y(^o)lrEP+DUxZ6j?fkph2Pe<}s8%j!mx)k;WrHp!l; zz8~J`(8Mn<>w;wO{^^fhb*$%?2`RbO-ciCRZtGWi=LKSGuSjIU$r2mEZx+{Sg@&n- zeDmnS;2R$InlH633t)WrQ;JvY8hpv%V5T+Lm*ep406`SDJC9>=ASmm(z z^V9t4FYE1j4$bv{=EldyzwtL+l3i`r;1?$+y54VvFxS{O&hCls_D}?&Y8N4!1TT%% z4kv%T%um0wf)oyi76yKQcz*Etg*(03|C<2ZnP>X5v;9vUAI^TLE1R-6JTlF~Xr3@u zXvcwk7Hd3C{OZsA>}$Wn4-CD-`QIP9+T^1S-~U~I`nz0|j$P~J8>4;cCups|6e+mw zfyuTBWi8st^Ov8m@T>3sfz4`&#jK2tc0K%BcY5RZxRPf7`hGP4@g4#9r5R z3d6lQ93ekl2(&&SRU$4J?hqve*bsqAc79^u@~HBI*QF3HyhE-Q`wZr=93i9 zm6;sM{;s#nd(4d<{ekcPL+_04`m~RqkWxHE8}or?XjHWtS_xluq_|h-#XB~zlgHin v2Hl}j&j=!w>B%IY`||gFr^x^FpPIh{L!$x=PQ|#(00000NkvXXu0mjfo{{=q literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites2x/battle/queueWait.png b/Mods/vcmi/Content/Sprites2x/battle/queueWait.png new file mode 100644 index 0000000000000000000000000000000000000000..53e203dda3edf315b3bd2df2f1209596ce396e63 GIT binary patch literal 719 zcmV;=0xa&01yxW zDIpL-IRGgk0O{3`As7fbDFE2UgcuMA`0vAhX(|5x_pX{yIWYk2+n~(7dnp(Q_~@K- zV=4dt)|`w|F)0uT000mO2-wiP7#ILjLMhP0ra&y^cS$Ci^08U4&YweZ2;g8D#nFDv3|6^td)U6aSWbH9v>gL=WJ&AsCdEPRrn$} zx8*M?s+Sc8Z%MIt&dmvTVn4gW;6BrlPKS)Kl^`?k5qOv7P$cAou}%7+3S9WqFS|6I zua1r)N{;Ib1jacuREYg)!ct!IYSH@LOe>fTH=ALX13dS5)dJi_rWB==sD)*7FA`z>BD4?}NO;(J4Z8H!eF%|sB{Q|LqDi%v8fm{Fp002ovPDHLkV1oKv BB@O@p literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites2x/mapFormatIcons/vcmi1.png b/Mods/vcmi/Content/Sprites2x/mapFormatIcons/vcmi1.png new file mode 100644 index 0000000000000000000000000000000000000000..1be03a4600b7a17bb9abcd9508f6dc34e51e7924 GIT binary patch literal 2314 zcmV+l3HA1gP) z)wy*mZvOcvPF8C~Mr1@bX^H4tl%tM1s-~r-#eeFIDd{6SY&*T&C)ciwp?*4f#4;p)|^e>!&T zSmkoLs&ct}>-_oimo8hjY~uysjW^y}p zs+B8OCdZ5!qpw>+`tpKj8_lynHIKGuv)M>>b#*8jjZW(A?QI2_Nmlk}E_NxP|MfF*5jx?Q{3 zBp3jE_St6(&A``^$t0ddWnRa-T$4SxCQX_I)n(uSm@dEka<#U$>gMBqt*S|_DkK|} zsoYalRi(zpMj3FjTmc{e11K_JwcBpHWemL9TW+}}5FxMIbd<#-p*LS^^B7_8;Xm+Rw?Kh{k*-NbcK^EcmobJf+= z5fXN9TU34`cW~A%IMn01!+G3;-lG9%}L8#Tc&JZo7>= z=XpG)?Y7$vgP}8E$%$VMN%q!>m+w(I*Ne4Eglm+D*DD`RX!FfB(>;$oqB(Qs5C(il zZ~!1y@eXtafEQkPK`U0Q(B#RJT|(nJOhI|=_Ea1!D;bx(5}{NkE3pqNR4Qgv%4g&i zr0>q1ts58>kSt?z-!I z>b~pnc+f(jfTsY##s08RaL&iG2n%@lrtI^PQrYd5ev?asUsAxH3pp zAaS`4Z~YKJSP*A4AcVBO@gX5Fj4&g|0B)fAfHiB@;N`&y6DCCH{xH~ealCeUz$L}? zSr7?v&E>)h{nty1MQ>>BNu^*E-@$hVivcga^b#Ffhn?@IP@{Q3Xz$Jh81K{>&S#J^ zjga%Y5aQoe13oW#D(mAlYlT=TB%I2D0^q*;?xV$BZ4;d-)P9U}NznI8cx#9a79LTf zF7F)^yuyGYvA7%yN=A9l4_BCAtQnN36sy}iT-d;_0YWV>09<|b)mpS@(PtRO=?`PC zJoQgnJavMS$tp#{QQ`e$B8l;eN1|%59={<`r9WTsxa}uglZ0`oD|Z^OrU$d{zUwYp zZRQJvK|9xiG!TKB@4x!$t9tn1hj~B^6r)D}wDP%>8I+UCzVd~vu_7nmE0`8>H}?UK zTTu+Bi)4@TN1vhh-hUrp-NEbKOE0}NSO75Ug7$cchp%p)tUTWIedk%1{8&-f;0&uI zD3t?>0{}vcZDGYAh410Mw}UnkV}S9HdB-E}snb(u&Q*`CB~rR9nGw65FV8f@A621T zlIQzw*nt87#ALlism({ zfh&O^k}D3X=y@3J;(A!Qbm6jg?OG;Gd>;TXTD#4LBt3zg3fpY|Dx355Fwe85Nb?td zSKXy-dAh;2CO0!<&_MC%A5e>3+DM~#aJqb%ls&b^pj6M5v&0eSTJwiygy%Z$t4Oh z0L=e#_MpFYWpC`b@oJv2jry}$i}|6rM@fE^20nwwVSqE9jL%q&J#qj^aOTXJw^#_= z6ZBt(99?gmF=NJEjLHCFyX|*WCO%o&VnKL5XKSudR3@KOxKj2IR>Fr(LYpo8)!tt-d-m)N|35_b*=L^*Ed*Y*P*@r=kc#d&OZBWyuY7?!?i|+7>3f>8894nNOoN3=d(ZB zwWDaQH>&>-`N>ay0^M)6F`2YX_07*qoM6N<$g7*f63;+NC literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites2x/settingsWindow/gear.png b/Mods/vcmi/Content/Sprites2x/settingsWindow/gear.png new file mode 100644 index 0000000000000000000000000000000000000000..ff89fc0e666626d491c5715cd17160630ab6c95f GIT binary patch literal 2234 zcmV;r2u1gaP)(ADp!jY5yG&*kPvRHgZlLUixB!E12cuP>rAigWhGFRkAi!e=Dn%6*yK!EZ9guSfiYRZK`Ve9T zh#>R`Q3%B}V3-#0Bn4n<$0Ek-PifKtY`;uWtW!rYM_807&tYOEB<6WG2w?$6j>fZ; zf{T$9b%mrBvk_fRvRnYah&7zoyJvO5!o?eDA3?{9Sj0*^Hx0r7Krwo(QlV0NMK~~$ zcVOe3-o0v43m0v`{X5wVAx*5Dk2Gxfvk$Mk;JmZPj4m%Pi2d>Bq8xornW9`1oj88K zira6!s7t3#btN?9&`<~yaAVleepWhd%SDSdbUHUDCtNdVVAs9IjTuqAaZ_V@)#|M!C^T|-uXfKrbA8{_ zPn+DQOPBgm@RP{Q2};gTa-Eg%*fIOp9&*T@1F{_cmFaXvz^uC6FVQTg|`TW%^UD(GhzA^-8%j!gdf*P<0ur!BQF zzUY{qr6nb~xL@FL#KfEk1MWvnPo@DMbu8ALc;Lb37LOX$KfL!|1Gjy>FCLH2 z?>p$s+W??hv0V{Iu^zh5l)d`=DF+N0)a6P+Qh^*qNSdLrz%oZLITXX3chQzRGg4G(aBt_a*uKaRh$LZknJ}nLHhEh z8Mq-63HdiMaA1!U4%lx%1bvVYje_E$Tw`nF_NmpCrK7kg zvA}-NBK-Y;PsCV~>Mj}@;!{gX3izmmGDT$BiYDu=cc-tlLa?;9wzPeIUL-15$EFPa6q5)}yp1`PX@H+Sw07w)FO!55QrE z?z@XVXG3$Wx#jcEzx(&1OYWWn02|R!(V%Fi&fk%(eeFn0Q5!AKsr%rq3x-F_i}Qj5 zV%6#fIArWCu)FlnpYK4A9$mN`&L_~Yb<55@_L?wt)27Dt0DzEKqZVs1_}sx4R-~~h z>E?umm2E(L`~7riD}DLZPkw|DydIZ@f`TGTN%8hLE<$36o2_i2nCoOl9p)%09r*mK zscnjV`0@9dn_=K~ZcdKH+6uN!Z?L;fx?ec|Z3_kHA=pO3bMRUrvCQhk9c?6oVP-4a zX_>}lhUPMQQyqQiKxivX7{8B-vK^T7Y}m1*CB2)r1!81-Tcz!G)EE*p$8B3A0MBDTU+Dls>&#Dk7FW1DT}!CmLsb^|LB?_YCiHuBt;G@?^s_B zPds$&E~Q?2_ENQwSNM_Qa%E)&d4K)!?vN)QyQz}5$>lI?-4(?&k6m%e#GaEUj+hcH z&+n0`h?XTBmDKsAKW(gD+XO%TvKYSlb~Zi$7&m%2Mhd!htM?cA-L0)#w#Jsc_4XGZ z-FEw9i`hK34aIt**p$h8Rb77Zk*8Ev6pfbBu}GpVIfNR)GDX+lHg_S$uUZw{9bAJ4Jwmo;=syFz%6`$>KzYrnGqe26MMynrX7HvA_y0*;rMnVH( z`t;dveDm#ZDY{2fFGUve?)yJApLNFg-jQ&)J+PEYImzGtn7`z`5C7WGzh8%vNF;30 z9Eb6c6cgMd{y)m`mPF#gM?RQu+fH*$b+jlHGDG}~mX_A}!$%$SmMYS_f6~fo`CBex73ddkyy93eRrYfqn7MBhFg3+69a z9sGRD&GKDYvS7xYhq%;4tDx@b!45QSNEm~ZHLv>T*f~^*U!T)Uqe|6>y0R>X}qn7{bOsZo^b*z=oO}s1c zo6H79j6_^6#v&*gKzF4YcJydX1b+@oiTeotPmDz?OTEPZ0KnVdPaz9a5dZ)H07*qo IM6N<$f|S!!y#N3J literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites2x/stackWindow/icons.png b/Mods/vcmi/Content/Sprites2x/stackWindow/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..b1cdf1c2245b04b8676b25cb4d2f4654021e1e13 GIT binary patch literal 4492 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 WYRz@zWF!;-0000Qqxs=NPx z^PE!=S6p$$6<1tw#T8dvsekdw4lLh%^UYp= z9=~m`z4pp+38-K2hZYqTy{Kb;Fc{oj_13v_=XzWM>Or<_*)l}IfBV;8e=Y0Lqlbh- zA&Ew#hs9#CJLb)sm*W!fKa!G?64|zG+l*u~`O!~5{nWTyw{D`xf`-FkQ8`S*(Gv?6 zEGTvf_%F+f6)TE1Zrpfvb#?U%3Vv~yE?p#%NQeS1CcO6fd~=nMua$)EE&=}q`R%vg za<$6YuW8e!zkT)9SEnpqyx7yOT|2-g>wi|Ni@fAAImZ$Gp5e2?PSNYSk(%AD|^SH&;-AM_ROKAq52m zgr#C7=Sm$HD-kCxT)42Q{GUp_RSp_H$`q&pTeogq@!D&z1(z;enx_EAX3Ut8ufTQI z#M(u#k5h1W-Lz>_7Y#WOA#K~X6~NxSd9ytA)Kj9~AV(f~q!bqy%hOLkEpNT{y2K~9!A@iWgnT2axP!Bb@S%Uo85cwz0I?ZfDIcq zOj3(}AInuMM6pr>2<4n;$dMm@_(A&j?=QrAlk)O%;j{0*|GwOR|NSy@rYrCGCP(y3D?Y1F8ZXn2xee)&Zne)wVTBU7hN z6?%ZqS`CRLB@s_Z&AQ*Du&7*Gwdo;|(k4<>=jWby6-09%yp41GJo{b98H6sWsHhN1 zTYYa6L9&eitJwkn(@#I8p^_txIKr+03V_Id`|T%M`AGZr?Kvku{`jN3@WKncNBZ{d zD;+y_l-8|VlMAqHn3ZHg5Q&6pq;~Z;Qdrznnv}PdU_q&b)T;Lpo80DmwbV$D5!_9TQ53IGHkP(iRnlIY`)KMweWAsIDl6r;3i)rzoU zA&bvy*h+{(DV~IgFJ03G{S_kqO7Zv#rMOXBiRKkcLVs>Ve;yWZ9$>%Mx8HtC!iQL{ zWhVia0Ffa>h5#U5AgfoeCP7nPa!jlSY*Yph9xP>LWyF4f2XIIf#Eu!ct=A*MC6lCJ z<$jTEOZ7M@v4l@@3mQvaeyKz}K1t?k=xN$a3Q9}lk3asv(6I1`QHCLX)51Ay}zdIslucqL~tj0X5*G=>tB4Bt3wiI+fHM6WAtFw@sok5r5Dl zGslgUSj*Oe2drPeUP#bw+O)||0!W4c3ISLdWI#e;VWBX!K zlMW|(IjXO7d?3#M@L?VS3F%R_AWx)GQGryXa{>t(638=I*$GqYn+Fi%`GWx)VKnd& z1Dnx#oGEw*V4?^)05wP8GmL2F`-+r+{M?j>nIZ5y;;Gr_0RSHaNXki?A`&qTS0>nq z6L3bST1c{MMhmA=gn{#@y-q-cq;rL8UanViQ;DCDN1n0YGb;%I?Dbaj>$HTBTn%Jr zsKE<3HnC%Suag9$!a@xoOTx%VhbJ*&jFHr9pZ??ZrJ6tUPP_mQ$krrW3%E2y!-o$S z2w;8(fH`jjIIA1W2btj8n6UFk7F-d65{}sK;gpKKHsT;5$0xB+j1a^gc(_h7#v4$G;2fi>IM0)N@PHVgqegf< z8wp@8D9Im7^35c`&f)$>5Nc#(Rz+e0Nq@8Rwo#SQ&ZP;6>pva^+(M2ebzWyB0c+N* z32CJhF_10U0VvZGbij7r$Z(ddPBpN+s8=+Z^4ekD8J3UOxj5%k89m+<;LhaFG)PwF z0GpkpAE5IEWbyzbRS{lb@3WHB=Ja`;St&6JsAmA|Jhs?mPGg}-RC87NJiia~N>pV0 zOy-TU(gUzG07X9g>@z$<5Uk$v07RGvpd3StGe@K)v;E-MM3%LK?czz!QWOz3_Q1D6p{u|kfmLE^QMl-U^rdY%uk2`8!)(W^MBxEH4EFV&KR`3Tijci~-h|SZZyta-w)8dUR6OyO_ z?G$@y;U_aEaEqv#f0aKK4z1+1jy)T50D`-3s;a7LN74mI+#c{zr)67Tz|y7785v<* zbLIhkx1+#kWU!J{l|}&YGjanSvAMDe53mvxA~1kNwh{nfn{aXBE?_eCOoFw_$m)Ma zrU#tMmIjd1Ga!s+jPT=}b}%9`6SK1vW!zFx0pR=$?rmOHovj1_>{>traIBjt3966f zOBYL7o>%g6ZL0|jE-c(9Q^)CCfKqxEGIyiX2F&H`a=;1txm=;EP3rp*Yv^KxwYZ~k z(=nCYBf@7w(TE^SL0F-nQk$&=U|s95G!rLn z!Q!D>x`L{f4k%{5A{lE0$%N3!a)tLnmX)r&kI`}nYB|J6Sh;c~;f_@~LZNNqf~cig z>jAgkdh0T^_;nDV8=%B2vsK&nQX3580f3iImRNjTsP+*6M-4JQmU073$O6M(GzqXT7Ql;pRN zx=@+`K_J26JphqdQG6eJ^AAOumr|0H;fru2LJxm0&cY8d9L+mUPo$N&dW9 zS3MyZiAp>Ts&&bkUSNtiwm&lcz-O2eAtaK3*%Or1UD^*fgy#d;f^sjDadg7A#gIIZ zQ%o`rNF+u`!O|00yoCzX!cyAeQ^$ybYXVu00uIZk4CWeD*;~3BZ%IQS z0N~#kF=E7TBtbx6M;f7^ThG2ySr?KJH8~!jnq>aRlj?xu>F^UnW2lmo2Hr?=g3i6| z9K!pSFJCSY&T|JwQp=Vt`5kVjG;Ih3unRe&5A*2_z>s zM=b2vgBJ$8ohR8ZS+a!Elgf)ySO`Oq(yw2?&(sTEZio-*@qECy0|pGZhh;#30}w*d zo>OPZhT0sScEJN6AQk^@WlYtF?JIHQ00SFEi~#F5m~J41UbFh%xnYaY0@#30 zUC-`k1)IG|R{xvz-+tnWCw|kAA5c%6o#Q#rP+>2#$dM~;$CeRq~M6_o6ris(>nh+d&Y#8R!fnlWpR6t)>EYqo7kcgfWK z301L%%QkS4WC7o{o!gFU+m}>5apJ_uTK+!Ib(eq)89R1tOqU4v(th9@5;9?hnjI3R zO`j#@9mmMpifvL8tdmfL&0DDoh=vaEsq;Vo{BuGMWhTHgWtz02qkGxL?-s&&`;w)rx4cRx7oZTy4T_($2d`pRw~~b1+9L{Q==Rl?>Y*ncp$X zXQGeB3(x4;d&DzSkE!EPx zeMd@7o}9PugRo@GF_UcPUvR+%7x8FR7JOSu{mb2V-#u2rd|i`hDV9wXsLOQ%4LfeFBZfl;NO&c?zv~I4sU2KD6yQt$YKsTfSR91i}0iQ0}_%N z!cM#R;)}0g@!kExrvFe5IpmN}b=X}2uCV6_uyVjB?4j(bJ;(l}PtFOMgO`E7EG`x>jpxZ$N zr6yjXiT7tEVz*tKJV2g>$GwK}&+^xD9z~pFPkcktT1*x(e_lda)P(X4B)*&~uCQ+6| z!4gPkPE({t8j(pj2Ua`PLU2qVQLvKO267o6SP}#WxZl0`Omw}W7?4nwC3^_$nO?s8`VFf{@R$aIvIxu8{}AHjDze}f*k$q4^!7Z--fbNx zrfHtujx5=k*VKJKu}|W)BZ0q}63NSS6YP+jYe?mmV!4T_SeuGSlRVIK5q$3GD2k#O zkWsYuC9u!guVTpU7bF*~UTfxpSrd+(u#zknJkw5#qW8uWB@0pUcW1L1xQZZoXqmHL zSZ;rHyhWlOuykX&-V>}Si52ZI;zq?Hl_6owfh4yL6!bKk+_N-9Lo75z^HSUsh#@tI zZzqeQ6cU2bDhUn@jHC1btb;98v5A_FZMscV3M^9#QG?~$eH|W2l6eN`JKL`e!_s{2 zh9#F&8u(}4;V+-wUp$Y&DJFCQt}OvL z=VUr1UA~dd{A>}IT`KDt_r>cNzV|6Oe);s_5_8@Dj5Yz*3Wvc0$0K6T}j~1gLE`AMbbHd1}z)NuvTKVDOL0t@KZj2|BG7 zv-9wgGsiN2v;w0+*x9=VJ`!CNwaowy*SN}bGdpZ_T&X=XEGvsWBeA&Vmrc9m~ z{|*x|kqGYc^7`a&eps8i@4#UVTch@35~hu`zV^yPp%ccB4D#{uF-jt;a16MoBhbgr z0i14cYjbAj{9FC~4|6J0Qgb^9A>9fwQSDL0(KTcGMEd?a4^4>(8+aMf^y=CAjI86| z-t)jWnS_uoScld+*jhbBgPZ8=>2W;x=+|#&+6&tlP#{>(UZ+jvE}Ccm@z{+60=*OX zSU{)M8p6W|McsejHKBolKAz;1WBPGpqkLB`{dicyw9#RDgHEdf*~DTB4QRrc3|Q0m ztk>(c!-ho%-g3(|-ud~*da51uy3am&*7o}^Zzl{J8aYC%(;E7ARQA*A1n;q9V|tb> z+gHTI6Pp(h*BD+iKJiFG&`Zz#????t!Dd9(ULGKdpS@ui4ujgb*g~oglt4 zCwWuw!`F8`VzC(FI0m4r4V=)B0Dm7Zi`8T}7q{@6C#a8gKodBM$E{W`gU#mW1#{6a zvuC_7TdR+Y4KdG|zde^TEgl9k5Q(etyDx5zA2~eeN%(!(1PbosLGcSPQ0TzxV5%t3 z0M@Qb9#GeXF);v z+UH;Vadk~?GngDkZUCtRko65+`n4PLYnqzc^P?gLSglrOLJ(3lQ9)wFgQp@TCr*}= zOEs$;vuR>KmGg$z&vfHa`gztmhmCMqD-o#*xLR6%`Kqx8E&Z@Y-8{ z9FYKagV_O~Y<3im9yr&{|CQ&jjK1mmaaRZ0yn{e{vKqT(j0B`Lp|7>AoBTa{3;Ad6 zHgdM|;`8^BmtT5>*lhlN>#<$s?I_l;b#?XCt5$D6@agBXO9&y&617OwDp5OVSkSJ% ze0+!%QHH%tT)aHP5gz8}3>xAWU@&O)Y8>T7x22_ny#4+hvU+V2IakTDACb&ZIl1zR zNyKb6%ImSckmQVPCLA8(UU&Afo2Ir(d!N5@ZkbD6Q2!GJ-5JRx>Uj9F>kBEB#N{T6b1}^=^4jKe@b$)odM&4 zLR)b@0!->>RZnm+63&y>qx`tuAn2$Jib@3BlL!G#OFz*skV#2)1P}w2NKrf{vq{J2 zSJlpn2^K&>gIrPiw1P&Ef4I*%Q0@>i{F1Hh7s!mP!^%q|^4%0D&e4kO08Fb3{F(S? zzAc>Z+Xpu$9YRCpn&Te6qZ7tO^b6#aNh76wPDoZ)D5Q&W$6GF+7aq&he?knynt1S+0Z?T`_g_75&6rUULk$MKo@n}FB2}Oe z8JLU)GHq(CY-;ikSDh8$Q;$t2@4j^}@$<6+4%K)R12swq89qEV_=(5v9xz})K<&Xp z8Ld1>{FNG~KP)J<=y(4;mk*Irkv9bg`A=l=!;L|5-FZ6+w{WAA8pIdKGMQKD%8zD#$k~EX3u@Y-_Lq2yZi_sr_!ks z?oa^DNO{IUF(?6rWzeSz44&1w2ek^9*__6vwtbP&m;S`UEeN#)!WGHy+$D(&?fVg^ z1@3Sx)ei@U=d)^EY-ZG)2#Wi#RB)~%at>fE>XYWsq@?uS7!RNR(6M^kj*PB{9+)}M zVlhW@@gkQR5IM!bYLV4yT36|3?Tg4TaEgeZ0}VJwU47%hYi2yWk5@w2L8lP1%wM#9 zEv1^S)7+7WyDwO@O3LaR8yY)1d9I(;VL&2{xrez0eYLfXorOh}jg)$j7vzCCnDflt z>-uN*@^zq5v7^pT;m3bq&9a~L+6+ZCjuf?^st!+$!B&8f}T(o%SiP58?8iNMg2C`2D z7^u_bay<3y=YLmL)pcC&EKo4su!=gY+OS~=%7oLJgd93v^w$K59e+8>DSGU z-d>Sy;KE;f_v}B~k(XamH+Zn07~pR;8}wQohyV|i70ijwE~hgmx1{Q$&sQB=usE?6 zl2JgOUfQv7b4umOlckv>Mnt;(eXSwV{nWDU?e^n;{qWQBQv87k-%0ipL$Jrg|FKcQ zvDF{B-7fda)w?%-@%6F}`~@1X<6S{NUxVd|N3O6v{J>@L=nisrRFLoP;uYzq<}XTY zY-x3Mf&pj5C#CSgKX~^6>pgc(zeO*V_>uR0h5%x6!Kb@{eDVs@jOmjsd-mD|?jxvy zTci4i5sZ#ze|ZH0scJ{ZO#LEJ0oRE<71hie)X<)O&3JL|{@l+07iu23uEQ`8q|)zy z)ZfdKoZ?Yv3}{5aBE5{)A_aNpDVlKknbVAcAV#JbAAtXXIXO3=3$g2$DxL9M(Tp+E z9x62KbrXemT=+5U)k{4!e?(YTG!m8yvEg2c%zAabyOlpsfu0PcIaI%jS4ql+|f zGUw#W(YAhU#(02~Ty*5n=X@RNr(&=2fCjgn+Z2%Ad^X_fXFY00000NkvXXu0mjfJG)Ra literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites3x/stackWindow/icons.png b/Mods/vcmi/Content/Sprites3x/stackWindow/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec5a9e3207409b9bcdf6b6012c3105c9493611a GIT binary patch literal 7575 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 literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites4x/mapFormatIcons/vcmi1.png b/Mods/vcmi/Content/Sprites4x/mapFormatIcons/vcmi1.png new file mode 100644 index 0000000000000000000000000000000000000000..0193036bedc1c85e460bfca507c92bef08a22976 GIT binary patch literal 6314 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 literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites4x/settingsWindow/gear.png b/Mods/vcmi/Content/Sprites4x/settingsWindow/gear.png new file mode 100644 index 0000000000000000000000000000000000000000..83d451dbe5aa3f3c022ed71e81b5dce4a54b9978 GIT binary patch literal 5177 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 literal 0 HcmV?d00001 diff --git a/Mods/vcmi/Content/Sprites4x/stackWindow/icons.png b/Mods/vcmi/Content/Sprites4x/stackWindow/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..95abe6c3c35c159a2dd784f07949b7901f5af7b8 GIT binary patch literal 10266 zcmZ{KcTiK&yDf$mdP0#7fzW#Z=_RyKRl0Nt9h53fM0yDwl&*9TM0%5|l7x;l>4@}R zgCMAs%X@F`AHVzN&YC&<+vodc|FP%HK5MOS$Ll}Rq#$J?#lyp+(AH8nyc^Z=@Bqd@ zqPwWtBK+>jyQ;0OVjOhu#{zymRGXzAm-42`W3jacJ>OdA-J0mK*y^#o(0aI}cl;^f z<@AF^?FyIEuw#?y3PZEdi)_bWmnmgsD;5_<$Kr*Ou&^$5T*tE?%djI}NAG(gy*l}~ zZ6!5?=A^tUQncP7>r64udmc-Cw|9_1AE;!Ps#o~VO_V-Z)* zSXYY=F+!!EA#SNiHOkRD_krRf+$s`aEa89ii`3~S+Y(r%A2l+W*rSq^iBoRIa9PEu zz7efY>CtkH3!P&SNQWGTw)_43f}Xm6zr29K#LDHT>4QI^zF~kvu!bKa;$?M`V-&-p zL$n`lDua=C^-ETy%4ra-Ng*Hgu$Yo6;i?LYDMnh=AjIAe{a*jW-3EQ7Uo|kaM7(@P zLdSx|FspAOeY0Yx=J83RD8W8Vz_aa2U{duiL@_~?{kvK*vx2{RdP!r_ zHRYNy&cFmNQ0G{gVq)S>92Uc05Y-7v!`O?I^w}?mJ4GYrf!AxE%979lolEA0Q?jhz zHi)1M&Vtz1GfeCUVi@Jupq-czYgxPBtY|Hs7myP{*&)s$@ zY}vSbJsXE72{S2h*Cp5%3l}0kIENk9#vj3?GsDn)g@WVZMyJ~_>D4%g&iA%)ITff! zUo%dcwC!CA&D-wFeh{1{{Yj?$mMh@*9~wd3LMN&I6@n~qM+Rp5o3_H=YEdcYLt8ws4Sm#WjJZoC)5vpbh|2+Q6waL;CTN52KQ9mO^Cb3=_)dD zVi8ANh^Sz#nmYjyWr@X9*TsQkm?YoQW z{p%T77Z7DL+upu?ca6>0;H|OZXWF9Nf1KJj>*YgL!&oktRhOl1Z$oyw_^c<`G}{W5 z9)YNUz(RF2PWOInR@;5DZ?(^~2ULCJ5iYubq?4pQ(Yz#ze z1WR*NiE*GnF6t}}2kv&?nMxl;HwH^u{=L7Y2Wg&6R-Vu%t zDbr9)WO^ewxf!7q_N>X>(M-(n_c~F~CVWbNG*cC~{^W%tmkOVWA%pa8fia=<-&HcJ zaKM$Yw&UvYCEo0wZNT(!-Q_p!A+qcn?8qv?+8tikN67q798AX6fpzE~v8SI#lsQ1M z>`DG&vV9{^Lq*OEacamJ-?t+)CIik*zQ#hD`lagj{5Mp)gDhJ2gV(<3d~b2TVtH@B zBc`N6HDxZl9q^J!ypS%qA>lZs-mwW3b@Dui^O}@gjqMZ$utXa(T_^m~r$tT_FtZ7e z=`nH$$ONd;@_d=HT5W8|w;!NPM-ABnJ?d!%C^^Lo7mf@7g-V z*)k(>tQ$bJuEyepfOupUHrs}D)5m!egeLz|YXQ14_^ztTha`KA+eE*P+pjk(JrTkC z(hLm|r4-;`L%fs#d`P7Lo8k{)ZUV_wiz~$jdXneLjA@sWSYXQhw9r-QbMNoqw42&k z=fif(a8M{3l=QVTCt>~)f7y-`u}(XcUMuc&X{wkJU3y8mIcf5q@)5>0sb89NWqwVf z-<}}WF2NX4fJ8uSKHv^q)}Bf$oN!Xu^x%KWiP&0Y(aQ>M-jfYK_7OSFnj|p1VcBd_ zc>NfRPCdy3qnO7yqW=ugtA&vlpj&n#l-g*aIIf%5S>RHG7{(xSD2(BiPwZv23yg9W z`q-jAjL;K<53WrYdCT3Vk!MV}LhruuORqZPOD9pN%1vinvAP_uwZj(n8R%**dEJ}C z9n`2rA)-olfOtTZ$2dSTmnv|kBE2hM7o#Ra^2#9QTBc_NzK0ZyY-1^(Ln0xI1_{F; ztkjgWL>fRy4R}$aUiGjE%|yGdgge)v&12M(2dv4Mb+Q|FSVC?sSejVJonwVl*=!t`<1rnu^{gcTm z(sWMnGn=ah#7RaVqnKs-K7nC!?b@$Y(k(ClY#x;dJE`jpvyt%Mr4&TPM4jX41UPA# z!*2sJ(e8b$i!xW?_i7*)MHokP!wIsMFk&Qv%Ax$DO&(oD&`HCYX^PxsUnKmqic~1I zZJ51DAdvnh0%TeYEENK7AaU~_v9p1Ra+c5W!9;==luz;$=tq`^1mRQjc{Oa0El3BneF0)?u*_apO+txJos#m=&$9n2x< zkCQZ)eqBg=$T6q2yY}BkR@2)!X!tk2UTa_u2!VG|L`%1}zZwACpuH?_nfiS47KCDd zHBK3aovpB7N1ai`dq09_l0+D<66_Ki##3eymypjhPtYzt44(W+E)5MQm26Z1ZI=Be z4GHRx=D!LmTX({pb2?hEp&Bn0*~?u~=0veDvU0RS^oe{|01%tpU;efxH7!~E84Qvn z%%^srM;q!R`6G*%Q!+i&P}7Ha(wmO5_r;(uaMC-@4=PLb@X$2IETsmBqz~?i<27Kd zh#MU1iTi0NTIwM)k>Zr=X_ct6t5izodol_eedt~$@}s8AX-Wr|>$ynC>9}I;_Fj%I z*#MOaLir&6k|c~17?t1Nh=?E9v{|x$2UCZ_N%nfjwWY%cD|rEbC^?XFd)zwQ&*jV6 z=l>1RA-maESJ(UFDpRdC6B@aSf5N%`ru)B{aRUUA$qry7TJ(+u%g+~Bx;T=n{db1s z!)Y34x_Jf4Xx51j2Hnow+5z7s1{Knwh(= zk}nm7+w#h=JlKvP0?P+876tGn{y$Fj zG9F≥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 O@U%4^sn@F7MgAAdlk(UA literal 0 HcmV?d00001 diff --git a/client/battle/BattleInterfaceClasses.cpp b/client/battle/BattleInterfaceClasses.cpp index b7622316c..f9dde7e68 100644 --- a/client/battle/BattleInterfaceClasses.cpp +++ b/client/battle/BattleInterfaceClasses.cpp @@ -1066,11 +1066,13 @@ StackQueue::StackBox::StackBox(StackQueue * owner): roundRect = std::make_shared(Rect(0, 0, 15, 18), ColorRGBA(0, 0, 0, 255), ColorRGBA(241, 216, 120, 255)); round = std::make_shared(4, 2, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE); - int icon_x = pos.w - 17; - int icon_y = pos.h - 18; + Point iconPos(pos.w - 16, pos.h - 16); - stateIcon = std::make_shared(AnimationPath::builtin("VCMI/BATTLEQUEUE/STATESSMALL"), 0, 0, icon_x, icon_y); - stateIcon->visible = false; + defendIcon = std::make_shared(ImagePath::builtin("battle/QueueDefend"), iconPos); + waitIcon = std::make_shared(ImagePath::builtin("battle/QueueWait"), iconPos); + + defendIcon->setEnabled(false); + waitIcon->setEnabled(false); } roundRect->disable(); } @@ -1106,22 +1108,13 @@ void StackQueue::StackBox::setUnit(const battle::Unit * unit, size_t turn, std:: round->setText(tmp); } - if(stateIcon) + if(!owner->embedded) { - if(unit->defended((int)turn) || (turn > 0 && unit->defended((int)turn - 1))) - { - stateIcon->setFrame(0, 0); - stateIcon->visible = true; - } - else if(unit->waited((int)turn)) - { - stateIcon->setFrame(1, 0); - stateIcon->visible = true; - } - else - { - stateIcon->visible = false; - } + bool defended = unit->defended(turn) || (turn > 0 && unit->defended(turn - 1)); + bool waited = unit->waited(turn) && !defended; + + defendIcon->setEnabled(defended); + waitIcon->setEnabled(waited); } } else @@ -1131,9 +1124,11 @@ void StackQueue::StackBox::setUnit(const battle::Unit * unit, size_t turn, std:: icon->visible = false; icon->setFrame(0); amount->setText(""); - - if(stateIcon) - stateIcon->visible = false; + if(!owner->embedded) + { + defendIcon->setEnabled(false); + waitIcon->setEnabled(false); + } } } diff --git a/client/battle/BattleInterfaceClasses.h b/client/battle/BattleInterfaceClasses.h index 819ed3504..9465502bc 100644 --- a/client/battle/BattleInterfaceClasses.h +++ b/client/battle/BattleInterfaceClasses.h @@ -260,7 +260,8 @@ class StackQueue : public CIntObject std::shared_ptr background; std::shared_ptr icon; std::shared_ptr amount; - std::shared_ptr stateIcon; + std::shared_ptr waitIcon; + std::shared_ptr defendIcon; std::shared_ptr round; std::shared_ptr roundRect; From 4683b5d52a73ad5c4bba10b2a9ccb0ffdabc54d8 Mon Sep 17 00:00:00 2001 From: Maurycy <55395993+XCOM-HUB@users.noreply.github.com> Date: Sat, 23 Nov 2024 00:19:20 +0100 Subject: [PATCH 10/19] Update swedish.ts --- launcher/translation/swedish.ts | 46 ++++++++++++++++----------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/launcher/translation/swedish.ts b/launcher/translation/swedish.ts index 2bd48e043..7ae569217 100644 --- a/launcher/translation/swedish.ts +++ b/launcher/translation/swedish.ts @@ -138,7 +138,7 @@ Other - Övrigt + Annan @@ -442,17 +442,17 @@ Gog files - + GOG-filer All files (*.*) - + Alla filer (*.*) Select files (configs, mods, maps, campaigns, gog files) to install... - + Välj filer (konfigurationsfiler, moddar, kartor, kampanjer och GOG-filer) som ska installeras... @@ -499,7 +499,7 @@ Installation framgångsrikt nedladdad? Installing chronicles - + Installera Chronicles @@ -704,7 +704,7 @@ Installation framgångsrikt nedladdad? Mods Validation - + Validering av moddar @@ -729,12 +729,12 @@ Installation framgångsrikt nedladdad? Full - + Hela Use scalable fonts - + Använd skalbara teckensnitt @@ -744,27 +744,27 @@ Installation framgångsrikt nedladdad? Cursor Scaling - + Skalning av markör Scalable - + Skalbar Miscellaneous - + Övrigt Font Scaling (experimental) - + Skalning av teckensnitt (experimentell) Original - + Original @@ -774,7 +774,7 @@ Installation framgångsrikt nedladdad? Basic - + Grundläggande @@ -1059,35 +1059,35 @@ Exklusivt helskärmsläge - spelet kommer att täcka hela skärmen och använda File cannot opened - + Filen kan inte öppnas Invalid file selected - Ogiltig fil vald + Ogiltig fil vald You have to select an gog installer file! - + Du måste välja en GOG-installationsfil! You have to select an chronicle installer file! - + Du måste välja en Chronicles-installationsfil! Extracting error! - Extraktionsfel! + Extraheringsfel! Heroes Chronicles - + Heroes Chronicles @@ -1420,18 +1420,18 @@ Vänligen välj en mapp som innehåller data från Heroes III: Complete Edition Stream error while extracting files! error reason: - Strömningsfel vid extrahering av filer! + Strömningsfel vid extrahering av filer! Orsak till fel: Not a supported Inno Setup installer! - Inno Setup-installationsprogrammet stöds inte! + Inno Setup-installationsprogrammet stöds inte! VCMI was compiled without innoextract support, which is needed to extract exe files! - + VCMI kompilerades utan stöd för innoextract, vilket behövs för att extrahera exe-filer! From 3c4064e09d397f3e63678bd5d2120b354c43fd04 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 23 Nov 2024 02:10:01 +0100 Subject: [PATCH 11/19] prism attack fix --- lib/battle/CBattleInfoCallback.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/battle/CBattleInfoCallback.cpp b/lib/battle/CBattleInfoCallback.cpp index d4ec621c6..251c1f9b7 100644 --- a/lib/battle/CBattleInfoCallback.cpp +++ b/lib/battle/CBattleInfoCallback.cpp @@ -1424,7 +1424,7 @@ AttackableTiles CBattleInfoCallback::getPotentiallyAttackableHexes( { //friendly stacks can also be damaged by Dragon Breath const auto * st = battleGetUnitByPos(nextHex, true); - if(st != nullptr) + if(st != nullptr && st != attacker) //but not unit itself (doublewide + prism attack) at.friendlyCreaturePositions.insert(nextHex); } } From 5e5a85418037dcbbdcab4a699f74fca218916e16 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 23 Nov 2024 02:33:25 +0100 Subject: [PATCH 12/19] fix misaligned button in randommap --- client/lobby/RandomMapTab.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/lobby/RandomMapTab.cpp b/client/lobby/RandomMapTab.cpp index bf25bedbc..9555a7045 100644 --- a/client/lobby/RandomMapTab.cpp +++ b/client/lobby/RandomMapTab.cpp @@ -469,6 +469,8 @@ TeamAlignmentsWidget::TeamAlignmentsWidget(RandomMapTab & randomMapTab): variables["totalPlayers"].Integer() = totalPlayers; pos.w = variables["windowSize"]["x"].Integer() + totalPlayers * variables["cellMargin"]["x"].Integer(); + auto widthExtend = std::max(pos.w, 220) - pos.w; // too small for buttons + pos.w += widthExtend; pos.h = variables["windowSize"]["y"].Integer() + totalPlayers * variables["cellMargin"]["y"].Integer(); variables["backgroundRect"]["x"].Integer() = 0; variables["backgroundRect"]["y"].Integer() = 0; @@ -553,7 +555,7 @@ TeamAlignmentsWidget::TeamAlignmentsWidget(RandomMapTab & randomMapTab): for(int teamId = 0; teamId < totalPlayers; ++teamId) { - variables["point"]["x"].Integer() = variables["cellOffset"]["x"].Integer() + plId * variables["cellMargin"]["x"].Integer(); + variables["point"]["x"].Integer() = variables["cellOffset"]["x"].Integer() + plId * variables["cellMargin"]["x"].Integer() + (widthExtend / 2); variables["point"]["y"].Integer() = variables["cellOffset"]["y"].Integer() + teamId * variables["cellMargin"]["y"].Integer(); auto button = buildWidget(variables["button"]); players.back()->addToggle(teamId, std::dynamic_pointer_cast(button)); From 9e6cd9b94dcab9999115a227ff66be0f4151aed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Zieli=C5=84ski?= Date: Sat, 23 Nov 2024 12:37:30 +0100 Subject: [PATCH 13/19] Add "special" property for secondary skills --- config/schemas/skill.json | 4 ++++ docs/modders/Entities_Format/Secondary_Skill_Format.md | 9 +++++++++ lib/CSkillHandler.cpp | 8 ++++++-- lib/CSkillHandler.h | 1 + 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/config/schemas/skill.json b/config/schemas/skill.json index 162f84de6..2332f0eaf 100644 --- a/config/schemas/skill.json +++ b/config/schemas/skill.json @@ -94,5 +94,9 @@ "onlyOnWaterMap" : { "type" : "boolean", "description" : "It true, skill won't be available on a map without water" + }, + "special" : { + "type" : "boolean", + "description" : "If true, skill is not available on maps at random" } } diff --git a/docs/modders/Entities_Format/Secondary_Skill_Format.md b/docs/modders/Entities_Format/Secondary_Skill_Format.md index 367ca775f..f157359d4 100644 --- a/docs/modders/Entities_Format/Secondary_Skill_Format.md +++ b/docs/modders/Entities_Format/Secondary_Skill_Format.md @@ -2,6 +2,15 @@ ## Main format +```jsonc +{ + // Skill be only be available on maps with water + "onlyOnWaterMap" : false, + // Skill is not available on maps at random + "special" : true +} +``` + ```jsonc { "skillName": diff --git a/lib/CSkillHandler.cpp b/lib/CSkillHandler.cpp index 8207ca558..e5436ba08 100644 --- a/lib/CSkillHandler.cpp +++ b/lib/CSkillHandler.cpp @@ -32,7 +32,9 @@ CSkill::CSkill(const SecondarySkill & id, std::string identifier, bool obligator id(id), identifier(std::move(identifier)), obligatoryMajor(obligatoryMajor), - obligatoryMinor(obligatoryMinor) + obligatoryMinor(obligatoryMinor), + special(false), + onlyOnWaterMap(false) { gainChance[0] = gainChance[1] = 0; //affects CHeroClassHandler::afterLoadFinalization() levels.resize(NSecondarySkill::levels.size() - 1); @@ -216,6 +218,7 @@ std::shared_ptr CSkillHandler::loadFromJson(const std::string & scope, c skill->modScope = scope; skill->onlyOnWaterMap = json["onlyOnWaterMap"].Bool(); + skill->special = json["special"].Bool(); VLC->generaltexth->registerString(scope, skill->getNameTextID(), json["name"]); switch(json["gainChance"].getType()) @@ -275,7 +278,8 @@ std::set CSkillHandler::getDefaultAllowed() const std::set result; for (auto const & skill : objects) - result.insert(skill->getId()); + if (!skill->special) + result.insert(skill->getId()); return result; } diff --git a/lib/CSkillHandler.h b/lib/CSkillHandler.h index e54797268..ae89435eb 100644 --- a/lib/CSkillHandler.h +++ b/lib/CSkillHandler.h @@ -75,6 +75,7 @@ public: void serializeJson(JsonSerializeFormat & handler); bool onlyOnWaterMap; + bool special; friend class CSkillHandler; friend DLL_LINKAGE std::ostream & operator<<(std::ostream & out, const CSkill & skill); From 6366175a3c0e383659588d1730ba044e3d65615a Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:19:07 +0100 Subject: [PATCH 14/19] fix window --- client/adventureMap/CList.cpp | 2 +- client/windows/CCastleInterface.cpp | 2 +- client/windows/InfoWindows.cpp | 26 ++++++++++++-------------- client/windows/InfoWindows.h | 1 - 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/client/adventureMap/CList.cpp b/client/adventureMap/CList.cpp index 121853931..d25a612a3 100644 --- a/client/adventureMap/CList.cpp +++ b/client/adventureMap/CList.cpp @@ -450,7 +450,7 @@ void CTownList::CTownItem::open() void CTownList::CTownItem::showTooltip() { - CRClickPopup::createAndPush(town, GH.getCursorPosition()); + CRClickPopup::createAndPush(town, pos.center()); } void CTownList::CTownItem::gesture(bool on, const Point & initialPosition, const Point & finalPosition) diff --git a/client/windows/CCastleInterface.cpp b/client/windows/CCastleInterface.cpp index eba40eedc..3d917712e 100644 --- a/client/windows/CCastleInterface.cpp +++ b/client/windows/CCastleInterface.cpp @@ -456,7 +456,7 @@ void CHeroGSlot::showPopupWindow(const Point & cursorPosition) { if(hero) { - GH.windows().createAndPushWindow(Point(pos.x + 175, pos.y + 100), hero); + GH.windows().createAndPushWindow(pos.center(), hero); } } diff --git a/client/windows/InfoWindows.cpp b/client/windows/InfoWindows.cpp index 2719c08d5..494192e4c 100644 --- a/client/windows/InfoWindows.cpp +++ b/client/windows/InfoWindows.cpp @@ -266,16 +266,6 @@ void CRClickPopupInt::mouseDraggedPopup(const Point & cursorPosition, const Poin close(); } -Point CInfoBoxPopup::toScreen(Point p) -{ - auto bounds = adventureInt->terrainAreaPixels(); - - vstd::abetween(p.x, bounds.top() + 100, bounds.bottom() - 100); - vstd::abetween(p.y, bounds.left() + 100, bounds.right() - 100); - - return p; -} - void CInfoBoxPopup::mouseDraggedPopup(const Point & cursorPosition, const Point & lastUpdateDistance) { if(!settings["adventure"]["rightButtonDrag"].Bool()) @@ -289,7 +279,7 @@ void CInfoBoxPopup::mouseDraggedPopup(const Point & cursorPosition, const Point CInfoBoxPopup::CInfoBoxPopup(Point position, const CGTownInstance * town) - : CWindowObject(RCLICK_POPUP | PLAYER_COLORED, ImagePath::builtin("TOWNQVBK"), toScreen(position)) + : CWindowObject(RCLICK_POPUP | PLAYER_COLORED, ImagePath::builtin("TOWNQVBK"), position) { InfoAboutTown iah; LOCPLINT->cb->getTownInfo(town, iah, LOCPLINT->localState->getCurrentArmy()); //todo: should this be nearest hero? @@ -298,10 +288,12 @@ CInfoBoxPopup::CInfoBoxPopup(Point position, const CGTownInstance * town) tooltip = std::make_shared(Point(9, 10), iah); addUsedEvents(DRAG_POPUP); + + fitToScreen(10); } CInfoBoxPopup::CInfoBoxPopup(Point position, const CGHeroInstance * hero) - : CWindowObject(RCLICK_POPUP | PLAYER_COLORED, ImagePath::builtin("HEROQVBK"), toScreen(position)) + : CWindowObject(RCLICK_POPUP | PLAYER_COLORED, ImagePath::builtin("HEROQVBK"), position) { InfoAboutHero iah; LOCPLINT->cb->getHeroInfo(hero, iah, LOCPLINT->localState->getCurrentArmy()); //todo: should this be nearest hero? @@ -310,10 +302,12 @@ CInfoBoxPopup::CInfoBoxPopup(Point position, const CGHeroInstance * hero) tooltip = std::make_shared(Point(9, 10), iah); addUsedEvents(DRAG_POPUP); + + fitToScreen(10); } CInfoBoxPopup::CInfoBoxPopup(Point position, const CGGarrison * garr) - : CWindowObject(RCLICK_POPUP | PLAYER_COLORED, ImagePath::builtin("TOWNQVBK"), toScreen(position)) + : CWindowObject(RCLICK_POPUP | PLAYER_COLORED, ImagePath::builtin("TOWNQVBK"), position) { InfoAboutTown iah; LOCPLINT->cb->getTownInfo(garr, iah); @@ -322,15 +316,19 @@ CInfoBoxPopup::CInfoBoxPopup(Point position, const CGGarrison * garr) tooltip = std::make_shared(Point(9, 10), iah); addUsedEvents(DRAG_POPUP); + + fitToScreen(10); } CInfoBoxPopup::CInfoBoxPopup(Point position, const CGCreature * creature) - : CWindowObject(RCLICK_POPUP | BORDERED, ImagePath::builtin("DIBOXBCK"), toScreen(position)) + : CWindowObject(RCLICK_POPUP | BORDERED, ImagePath::builtin("DIBOXBCK"), position) { OBJECT_CONSTRUCTION; tooltip = std::make_shared(Point(9, 10), creature); addUsedEvents(DRAG_POPUP); + + fitToScreen(10); } std::shared_ptr diff --git a/client/windows/InfoWindows.h b/client/windows/InfoWindows.h index 81b661339..468088dd2 100644 --- a/client/windows/InfoWindows.h +++ b/client/windows/InfoWindows.h @@ -90,7 +90,6 @@ public: class CInfoBoxPopup : public CWindowObject { std::shared_ptr tooltip; - Point toScreen(Point pos); Point dragDistance; From b29d7e8cfdbf16076b039495349221824556dfc4 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:57:49 +0100 Subject: [PATCH 15/19] third upgrade for 8th dwelling --- lib/constants/EntityIdentifiers.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/constants/EntityIdentifiers.h b/lib/constants/EntityIdentifiers.h index c4a1f6272..3bc547247 100644 --- a/lib/constants/EntityIdentifiers.h +++ b/lib/constants/EntityIdentifiers.h @@ -298,7 +298,7 @@ public: HORDE_2_UPGR, GRAIL, EXTRA_TOWN_HALL, EXTRA_CITY_HALL, EXTRA_CAPITOL, DWELL_FIRST=30, DWELL_LVL_2, DWELL_LVL_3, DWELL_LVL_4, DWELL_LVL_5, DWELL_LVL_6, DWELL_LAST=36, DWELL_UP_FIRST=37, DWELL_LVL_2_UP, DWELL_LVL_3_UP, DWELL_LVL_4_UP, DWELL_LVL_5_UP, - DWELL_LVL_6_UP, DWELL_UP_LAST=43, DWELL_LVL_8=150, DWELL_LVL_8_UP=151, + DWELL_LVL_6_UP, DWELL_UP_LAST=43, DWELL_LVL_8=150, DWELL_LVL_8_UP=151, //150-154 reserved for 8. creature with potential upgrades DWELL_LVL_1 = DWELL_FIRST, DWELL_LVL_7 = DWELL_LAST, @@ -337,7 +337,10 @@ public: if (it != tmp.end()) return std::distance(tmp.begin(), it); } - return (dwelling - DWELL_FIRST) % (GameConstants::CREATURES_PER_TOWN - 1); + if(dwelling >= BuildingIDBase::DWELL_LVL_8 && dwelling < BuildingIDBase::DWELL_LVL_8 + 5) + return 7; + else + return (dwelling - DWELL_FIRST) % (GameConstants::CREATURES_PER_TOWN - 1); } static int getUpgradedFromDwelling(BuildingIDBase dwelling) @@ -349,15 +352,18 @@ public: if (it != tmp.end()) return i; } - return (dwelling - DWELL_FIRST) / (GameConstants::CREATURES_PER_TOWN - 1); + if(dwelling >= BuildingIDBase::DWELL_LVL_8 && dwelling < BuildingIDBase::DWELL_LVL_8 + 5) + return dwelling - BuildingIDBase::DWELL_LVL_8; + else + return (dwelling - DWELL_FIRST) / (GameConstants::CREATURES_PER_TOWN - 1); } static void advanceDwelling(BuildingIDBase & dwelling) { - if(dwelling != BuildingIDBase::DWELL_LVL_8) - dwelling.advance(GameConstants::CREATURES_PER_TOWN - 1); - else + if(dwelling >= BuildingIDBase::DWELL_LVL_8 && dwelling < BuildingIDBase::DWELL_LVL_8 + 5) dwelling.advance(1); + else + dwelling.advance(GameConstants::CREATURES_PER_TOWN - 1); } bool IsSpecialOrGrail() const From 2b692c2606ecdd2dfdbda60d1827f33dbe512c89 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Sun, 24 Nov 2024 19:26:06 +0000 Subject: [PATCH 16/19] Fix h3 bug: icons of View Earth and View Air are swapped --- Mods/vcmi/Content/Sprites/spells.json | 7 +++++++ client/render/ImageLocator.cpp | 10 ++++++---- client/renderSDL/RenderHandler.cpp | 8 +++++++- 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 Mods/vcmi/Content/Sprites/spells.json diff --git a/Mods/vcmi/Content/Sprites/spells.json b/Mods/vcmi/Content/Sprites/spells.json new file mode 100644 index 000000000..4d6bddeb2 --- /dev/null +++ b/Mods/vcmi/Content/Sprites/spells.json @@ -0,0 +1,7 @@ +{ + "images" : + [ + { "frame" : 3, "defFile" : "spells.def", "defFrame" : 5}, + { "frame" : 5, "defFile" : "spells.def", "defFrame" : 3} + ] +} diff --git a/client/render/ImageLocator.cpp b/client/render/ImageLocator.cpp index aefbc6d30..515e767a0 100644 --- a/client/render/ImageLocator.cpp +++ b/client/render/ImageLocator.cpp @@ -15,15 +15,17 @@ #include "../../lib/json/JsonNode.h" - ImageLocator::ImageLocator(const JsonNode & config) - : image(ImagePath::fromJson(config["file"])) - , defFile(AnimationPath::fromJson(config["defFile"])) - , defFrame(config["defFrame"].Integer()) + : defFrame(config["defFrame"].Integer()) , defGroup(config["defGroup"].Integer()) , verticalFlip(config["verticalFlip"].Bool()) , horizontalFlip(config["horizontalFlip"].Bool()) { + if(!config["file"].isNull()) + image = ImagePath::fromJson(config["file"]); + + if(!config["defFile"].isNull()) + defFile = AnimationPath::fromJson(config["defFile"]); } ImageLocator::ImageLocator(const ImagePath & path) diff --git a/client/renderSDL/RenderHandler.cpp b/client/renderSDL/RenderHandler.cpp index ccfd5bec8..24aa78ebd 100644 --- a/client/renderSDL/RenderHandler.cpp +++ b/client/renderSDL/RenderHandler.cpp @@ -142,7 +142,13 @@ void RenderHandler::initFromJson(AnimationLayoutMap & source, const JsonNode & c JsonNode toAdd = node; JsonUtils::inherit(toAdd, base); - toAdd["file"].String() = basepath + node["file"].String(); + + if (toAdd.Struct().count("file")) + toAdd["file"].String() = basepath + node["file"].String(); + + if (toAdd.Struct().count("defFile")) + toAdd["defFile"].String() = basepath + node["defFile"].String(); + source[group][frame] = ImageLocator(toAdd); } } From 1b9c6b176361737db42c3383fb15f753d3c7cda9 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Sun, 24 Nov 2024 19:47:52 +0000 Subject: [PATCH 17/19] Add fix for similarly swapped portraits of Wights and Wraiths --- Mods/vcmi/Content/Sprites/cprsmall.json | 8 ++++++++ Mods/vcmi/Content/Sprites/spells.json | 1 + 2 files changed, 9 insertions(+) create mode 100644 Mods/vcmi/Content/Sprites/cprsmall.json diff --git a/Mods/vcmi/Content/Sprites/cprsmall.json b/Mods/vcmi/Content/Sprites/cprsmall.json new file mode 100644 index 000000000..3eec15da7 --- /dev/null +++ b/Mods/vcmi/Content/Sprites/cprsmall.json @@ -0,0 +1,8 @@ +{ + "images" : + [ + // Fix for swapped in H3 icons of Wight and Wraith + { "frame" : 62, "defFile" : "cprsmall.def", "defFrame" : 63}, + { "frame" : 63, "defFile" : "cprsmall.def", "defFrame" : 62} + ] +} diff --git a/Mods/vcmi/Content/Sprites/spells.json b/Mods/vcmi/Content/Sprites/spells.json index 4d6bddeb2..4c13e5c79 100644 --- a/Mods/vcmi/Content/Sprites/spells.json +++ b/Mods/vcmi/Content/Sprites/spells.json @@ -1,6 +1,7 @@ { "images" : [ + // Fix for swapped in H3 icons of View Earth and View Air { "frame" : 3, "defFile" : "spells.def", "defFrame" : 5}, { "frame" : 5, "defFile" : "spells.def", "defFrame" : 3} ] From 538f8443988040d8abc976da06b4c8caef788d81 Mon Sep 17 00:00:00 2001 From: Andrey Filipenkov Date: Sun, 24 Nov 2024 22:47:51 +0300 Subject: [PATCH 18/19] [docs] add referenced image to the repo --- docs/players/Installation_iOS.md | 5 ++--- docs/players/images/itunes.jpg | Bin 0 -> 16331 bytes 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 docs/players/images/itunes.jpg diff --git a/docs/players/Installation_iOS.md b/docs/players/Installation_iOS.md index bf71d7225..4dfcd7478 100644 --- a/docs/players/Installation_iOS.md +++ b/docs/players/Installation_iOS.md @@ -8,9 +8,9 @@ The easiest and recommended way to install on a non-jailbroken device is to inst i) Use [AltStore Windows](https://faq.altstore.io/altstore-classic/how-to-install-altstore-windows) or [AltStore macOS](https://faq.altstore.io/altstore-classic/how-to-install-altstore-macos) instructions to install the store depending on the operating system you are using. -If you're having trouble enabling "sync with this iOS device over Wi-Fi" press on the rectangular shape below "Account". Example shown below. +If you're having trouble enabling "sync with this iOS device over Wi-Fi" press on the rectangular shape below "Account". Windows example from iTunes shown below: -![image](https://github.com/user-attachments/assets/74fe2ca2-b55c-4b05-b083-89df604248f3) +![iTunes](images/itunes.jpg) ii) Download the VCMI-iOS.ipa file on your iOS device directly from the [latest releases](https://github.com/vcmi/vcmi/releases/latest). @@ -50,7 +50,6 @@ To run on a non-jailbroken device you need to sign the IPA file, you have the fo The easiest way to install the ipa on your device is to do one of the following: - In AltStore go to >My Apps > press + in the top left corner. Select VCMI-iOS.ipa to install or - - Drag and drop the .ipa file into your iOS device in iTunes Alternatively, to install the signed ipa on your device, you can use Xcode or Apple Configurator (available on the Mac App Store for free). The latter also allows installing ipa from the command line, here's an example that assumes you have only 1 device connected to your Mac and the signed ipa is on your desktop: diff --git a/docs/players/images/itunes.jpg b/docs/players/images/itunes.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1301fbf6d213fd4818929b8351b590c5d92f7eca GIT binary patch literal 16331 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 Date: Sun, 24 Nov 2024 20:05:34 +0000 Subject: [PATCH 19/19] Fix Orrin as starting hero on some maps Fixes a bug that led to Orrin being replaced with a different randomly selected hero on maps where starting hero is not generated in town, but pre-placed on map --- lib/gameState/CGameState.cpp | 2 +- lib/mapObjects/CGHeroInstance.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/gameState/CGameState.cpp b/lib/gameState/CGameState.cpp index 91a58b796..7df3c63e9 100644 --- a/lib/gameState/CGameState.cpp +++ b/lib/gameState/CGameState.cpp @@ -62,7 +62,7 @@ boost::shared_mutex CGameState::mutex; HeroTypeID CGameState::pickNextHeroType(const PlayerColor & owner) { const PlayerSettings &ps = scenarioOps->getIthPlayersSettings(owner); - if(ps.hero >= HeroTypeID(0) && !isUsedHero(HeroTypeID(ps.hero))) //we haven't used selected hero + if(ps.hero.isValid() && !isUsedHero(HeroTypeID(ps.hero))) //we haven't used selected hero { return HeroTypeID(ps.hero); } diff --git a/lib/mapObjects/CGHeroInstance.cpp b/lib/mapObjects/CGHeroInstance.cpp index 7380ef70b..b295d0b16 100644 --- a/lib/mapObjects/CGHeroInstance.cpp +++ b/lib/mapObjects/CGHeroInstance.cpp @@ -661,8 +661,10 @@ void CGHeroInstance::pickRandomObject(vstd::RNG & rand) if (ID == Obj::RANDOM_HERO) { + auto selectedHero = cb->gameState()->pickNextHeroType(getOwner()); + ID = Obj::HERO; - subID = cb->gameState()->pickNextHeroType(getOwner()); + subID = selectedHero; randomizeArmy(getHeroClass()->faction); }