diff --git a/client/CPlayerInterface.cpp b/client/CPlayerInterface.cpp index 09bdc174f..63019f00e 100644 --- a/client/CPlayerInterface.cpp +++ b/client/CPlayerInterface.cpp @@ -239,7 +239,7 @@ void CPlayerInterface::performAutosave() prefix = settings["general"]["savePrefix"].String(); if(prefix.empty()) { - std::string name = cb->getMapHeader()->name; + std::string name = cb->getMapHeader()->name.toString(); int txtlen = TextOperations::getUnicodeCharactersCount(name); TextOperations::trimRightUnicode(name, std::max(0, txtlen - 15)); @@ -1718,7 +1718,7 @@ void CPlayerInterface::requestReturningToMainMenu(bool won) if(!ps->checkVanquished()) param.allDefeated = false; } - param.scenarioName = cb->getMapHeader()->name; + param.scenarioName = cb->getMapHeader()->name.toString(); param.playerName = cb->getStartInfo()->playerInfos.find(*cb->getPlayerID())->second.name; HighScoreCalculation highScoreCalc; highScoreCalc.parameters.push_back(param); diff --git a/client/CServerHandler.cpp b/client/CServerHandler.cpp index 952b6feb1..3ffbb8023 100644 --- a/client/CServerHandler.cpp +++ b/client/CServerHandler.cpp @@ -701,7 +701,7 @@ void CServerHandler::startCampaignScenario(HighScoreParameter param, std::shared highScoreCalc->isCampaign = true; highScoreCalc->parameters.clear(); } - param.campaignName = cs->getName(); + param.campaignName = cs->getNameTranslated(); highScoreCalc->parameters.push_back(param); GH.dispatchMainThread([ourCampaign, this]() diff --git a/client/lobby/CBonusSelection.cpp b/client/lobby/CBonusSelection.cpp index d25778e9e..e63167a0c 100644 --- a/client/lobby/CBonusSelection.cpp +++ b/client/lobby/CBonusSelection.cpp @@ -79,9 +79,9 @@ CBonusSelection::CBonusSelection() iconsMapSizes = std::make_shared(AnimationPath::builtin("SCNRMPSZ"), 4, 0, 735, 26); labelCampaignDescription = std::make_shared(481, 63, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, CGI->generaltexth->allTexts[38]); - campaignDescription = std::make_shared(getCampaign()->getDescription(), Rect(480, 86, 286, 117), 1); + campaignDescription = std::make_shared(getCampaign()->getDescriptionTranslated(), Rect(480, 86, 286, 117), 1); - mapName = std::make_shared(481, 219, FONT_BIG, ETextAlignment::TOPLEFT, Colors::YELLOW, CSH->mi->getName()); + mapName = std::make_shared(481, 219, FONT_BIG, ETextAlignment::TOPLEFT, Colors::YELLOW, CSH->mi->getNameTranslated()); labelMapDescription = std::make_shared(481, 253, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, CGI->generaltexth->allTexts[496]); mapDescription = std::make_shared("", Rect(480, 278, 292, 108), 1); @@ -146,18 +146,18 @@ void CBonusSelection::createBonusesIcons() std::string picName = bonusPics[bonusType]; size_t picNumber = bonDescs[i].info2; - std::string desc; + MetaString desc; switch(bonDescs[i].type) { case CampaignBonusType::SPELL: - desc = CGI->generaltexth->allTexts[715]; - boost::algorithm::replace_first(desc, "%s", CGI->spells()->getByIndex(bonDescs[i].info2)->getNameTranslated()); + desc.appendLocalString(EMetaText::GENERAL_TXT, 715); + desc.replaceLocalString(EMetaText::SPELL_NAME, bonDescs[i].info2); break; case CampaignBonusType::MONSTER: picNumber = bonDescs[i].info2 + 2; - desc = CGI->generaltexth->allTexts[717]; - boost::algorithm::replace_first(desc, "%d", std::to_string(bonDescs[i].info3)); - boost::algorithm::replace_first(desc, "%s", CGI->creatures()->getByIndex(bonDescs[i].info2)->getNamePluralTranslated()); + desc.appendLocalString(EMetaText::GENERAL_TXT, 717); + desc.replaceNumber(bonDescs[i].info3); + desc.replaceLocalString(EMetaText::CRE_PL_NAMES, bonDescs[i].info2); break; case CampaignBonusType::BUILDING: { @@ -182,17 +182,16 @@ void CBonusSelection::createBonusesIcons() picNumber = -1; if(vstd::contains((*CGI->townh)[faction]->town->buildings, buildID)) - desc = (*CGI->townh)[faction]->town->buildings.find(buildID)->second->getNameTranslated(); - + desc.appendTextID((*CGI->townh)[faction]->town->buildings.find(buildID)->second->getNameTextID()); break; } case CampaignBonusType::ARTIFACT: - desc = CGI->generaltexth->allTexts[715]; - boost::algorithm::replace_first(desc, "%s", CGI->artifacts()->getByIndex(bonDescs[i].info2)->getNameTranslated()); + desc.appendLocalString(EMetaText::GENERAL_TXT, 715); + desc.replaceLocalString(EMetaText::ART_NAMES, bonDescs[i].info2); break; case CampaignBonusType::SPELL_SCROLL: - desc = CGI->generaltexth->allTexts[716]; - boost::algorithm::replace_first(desc, "%s", CGI->spells()->getByIndex(bonDescs[i].info2)->getNameTranslated()); + desc.appendLocalString(EMetaText::GENERAL_TXT, 716); + desc.replaceLocalString(EMetaText::ART_NAMES, bonDescs[i].info2); break; case CampaignBonusType::PRIMARY_SKILL: { @@ -211,7 +210,7 @@ void CBonusSelection::createBonusesIcons() } } picNumber = leadingSkill; - desc = CGI->generaltexth->allTexts[715]; + desc.appendLocalString(EMetaText::GENERAL_TXT, 715); std::string substitute; //text to be printed instead of %s for(int v = 0; v < toPrint.size(); ++v) @@ -224,14 +223,13 @@ void CBonusSelection::createBonusesIcons() } } - boost::algorithm::replace_first(desc, "%s", substitute); + desc.replaceRawString(substitute); break; } case CampaignBonusType::SECONDARY_SKILL: - desc = CGI->generaltexth->allTexts[718]; - - boost::algorithm::replace_first(desc, "%s", CGI->generaltexth->levels[bonDescs[i].info3 - 1]); //skill level - boost::algorithm::replace_first(desc, "%s", CGI->skillh->getByIndex(bonDescs[i].info2)->getNameTranslated()); //skill name + desc.appendLocalString(EMetaText::GENERAL_TXT, 718); + desc.replaceTextID(TextIdentifier("core", "genrltxt", "levels", bonDescs[i].info3 - 1).get()); + desc.replaceLocalString(EMetaText::SEC_SKILL_NAME, bonDescs[i].info2); picNumber = bonDescs[i].info2 * 3 + bonDescs[i].info3 - 1; break; @@ -258,18 +256,17 @@ void CBonusSelection::createBonusesIcons() } picNumber = serialResID; - desc = CGI->generaltexth->allTexts[717]; - boost::algorithm::replace_first(desc, "%d", std::to_string(bonDescs[i].info2)); - std::string replacement; + desc.appendLocalString(EMetaText::GENERAL_TXT, 717); + desc.replaceNumber(bonDescs[i].info2); + if(serialResID <= 6) { - replacement = CGI->generaltexth->restypes[serialResID]; + desc.replaceLocalString(EMetaText::RES_NAMES, serialResID); } else { - replacement = CGI->generaltexth->allTexts[714 + serialResID]; + desc.replaceLocalString(EMetaText::GENERAL_TXT, 714 + serialResID); } - boost::algorithm::replace_first(desc, "%s", replacement); break; } case CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO: @@ -278,31 +275,29 @@ void CBonusSelection::createBonusesIcons() if(!superhero) logGlobal->warn("No superhero! How could it be transferred?"); picNumber = superhero ? superhero->portrait : 0; - desc = CGI->generaltexth->allTexts[719]; - - boost::algorithm::replace_first(desc, "%s", getCampaign()->scenario(static_cast(bonDescs[i].info2)).scenarioName); + desc.appendLocalString(EMetaText::GENERAL_TXT, 719); + desc.replaceRawString(getCampaign()->scenario(static_cast(bonDescs[i].info2)).scenarioName.toString()); break; } case CampaignBonusType::HERO: - desc = CGI->generaltexth->allTexts[718]; - boost::algorithm::replace_first(desc, "%s", CGI->generaltexth->capColors[bonDescs[i].info1]); //hero's color - + desc.appendLocalString(EMetaText::GENERAL_TXT, 718); + desc.replaceTextID(TextIdentifier("core", "genrltxt", "capColors", bonDescs[i].info1).get()); if(bonDescs[i].info2 == 0xFFFF) { - boost::algorithm::replace_first(desc, "%s", CGI->generaltexth->allTexts[101]); //hero's name + desc.replaceLocalString(EMetaText::GENERAL_TXT, 101); picNumber = -1; picName = "CBONN1A3.BMP"; } else { - boost::algorithm::replace_first(desc, "%s", CGI->heroh->objects[bonDescs[i].info2]->getNameTranslated()); + desc.replaceTextID(CGI->heroh->objects[bonDescs[i].info2]->getNameTextID()); } break; } - std::shared_ptr bonusButton = std::make_shared(Point(475 + i * 68, 455), AnimationPath(), CButton::tooltip(desc, desc)); + std::shared_ptr bonusButton = std::make_shared(Point(475 + i * 68, 455), AnimationPath(), CButton::tooltip(desc.toString(), desc.toString())); if(picNumber != -1) picName += ":" + std::to_string(picNumber); @@ -355,8 +350,8 @@ void CBonusSelection::updateAfterStateChange() if(!CSH->mi) return; iconsMapSizes->setFrame(CSH->mi->getMapSizeIconId()); - mapName->setText(CSH->mi->getName()); - mapDescription->setText(CSH->mi->getDescription()); + mapName->setText(CSH->mi->getNameTranslated()); + mapDescription->setText(CSH->mi->getDescriptionTranslated()); for(size_t i = 0; i < difficultyIcons.size(); i++) { if(i == CSH->si->difficulty) diff --git a/client/lobby/CSelectionBase.cpp b/client/lobby/CSelectionBase.cpp index 4982d8f76..dbc8793f4 100644 --- a/client/lobby/CSelectionBase.cpp +++ b/client/lobby/CSelectionBase.cpp @@ -200,8 +200,8 @@ void InfoCard::changeSelection() return; labelSaveDate->setText(mapInfo->date); - mapName->setText(mapInfo->getName()); - mapDescription->setText(mapInfo->getDescription()); + mapName->setText(mapInfo->getNameTranslated()); + mapDescription->setText(mapInfo->getDescriptionTranslated()); mapDescription->label->scrollTextTo(0, false); if(mapDescription->slider) diff --git a/client/lobby/RandomMapTab.cpp b/client/lobby/RandomMapTab.cpp index aaaacea86..b5bdd9a61 100644 --- a/client/lobby/RandomMapTab.cpp +++ b/client/lobby/RandomMapTab.cpp @@ -163,8 +163,8 @@ void RandomMapTab::updateMapInfoByHost() mapInfo->isRandomMap = true; mapInfo->mapHeader = std::make_unique(); mapInfo->mapHeader->version = EMapFormat::VCMI; - mapInfo->mapHeader->name = CGI->generaltexth->allTexts[740]; - mapInfo->mapHeader->description = CGI->generaltexth->allTexts[741]; + mapInfo->mapHeader->name.appendLocalString(EMetaText::GENERAL_TXT, 740); + mapInfo->mapHeader->description.appendLocalString(EMetaText::GENERAL_TXT, 741); mapInfo->mapHeader->difficulty = 1; // Normal mapInfo->mapHeader->height = mapGenOptions->getHeight(); mapInfo->mapHeader->width = mapGenOptions->getWidth(); diff --git a/client/lobby/SelectionTab.cpp b/client/lobby/SelectionTab.cpp index 34375db26..9e0f87052 100644 --- a/client/lobby/SelectionTab.cpp +++ b/client/lobby/SelectionTab.cpp @@ -111,11 +111,11 @@ bool mapSorter::operator()(const std::shared_ptr aaa, const std::sh return (a->victoryIconIndex < b->victoryIconIndex); break; case _name: //by name - return boost::ilexicographical_compare(a->name, b->name); + return boost::ilexicographical_compare(a->name.toString(), b->name.toString()); case _fileName: //by filename return boost::ilexicographical_compare(aaa->fileURI, bbb->fileURI); default: - return boost::ilexicographical_compare(a->name, b->name); + return boost::ilexicographical_compare(a->name.toString(), b->name.toString()); } } else //if we are sorting campaigns @@ -125,9 +125,9 @@ bool mapSorter::operator()(const std::shared_ptr aaa, const std::sh case _numOfMaps: //by number of maps in campaign return aaa->campaign->scenariosCount() < bbb->campaign->scenariosCount(); case _name: //by name - return boost::ilexicographical_compare(aaa->campaign->getName(), bbb->campaign->getName()); + return boost::ilexicographical_compare(aaa->campaign->getNameTranslated(), bbb->campaign->getNameTranslated()); default: - return boost::ilexicographical_compare(aaa->campaign->getName(), bbb->campaign->getName()); + return boost::ilexicographical_compare(aaa->campaign->getNameTranslated(), bbb->campaign->getNameTranslated()); } } } @@ -367,7 +367,7 @@ void SelectionTab::showPopupWindow(const Point & cursorPosition) if(!curItems[py]->isFolder) { - std::string text = boost::str(boost::format("{%1%}\r\n\r\n%2%:\r\n%3%") % curItems[py]->getName() % CGI->generaltexth->translate("vcmi.lobby.filename") % curItems[py]->fullFileURI); + std::string text = boost::str(boost::format("{%1%}\r\n\r\n%2%:\r\n%3%") % curItems[py]->getNameTranslated() % CGI->generaltexth->translate("vcmi.lobby.filename") % curItems[py]->fullFileURI); if(curItems[py]->date != "") text += boost::str(boost::format("\r\n\r\n%1%:\r\n%2%") % CGI->generaltexth->translate("vcmi.lobby.creationDate") % curItems[py]->date); diff --git a/client/mainmenu/CCampaignScreen.cpp b/client/mainmenu/CCampaignScreen.cpp index 004539454..4078908e1 100644 --- a/client/mainmenu/CCampaignScreen.cpp +++ b/client/mainmenu/CCampaignScreen.cpp @@ -105,7 +105,7 @@ CCampaignScreen::CCampaignButton::CCampaignButton(const JsonNode & config, const status = CCampaignScreen::ENABLED; auto header = CampaignHandler::getHeader(campFile); - hoverText = header->getName(); + hoverText = header->getNameTranslated(); if(persistentStorage["completedCampaigns"][header->getFilename()].Bool()) status = CCampaignScreen::COMPLETED; diff --git a/lib/StartInfo.cpp b/lib/StartInfo.cpp index f3abd2d92..7e14bb8bb 100644 --- a/lib/StartInfo.cpp +++ b/lib/StartInfo.cpp @@ -62,8 +62,8 @@ PlayerSettings * StartInfo::getPlayersSettings(const ui8 connectedPlayerId) std::string StartInfo::getCampaignName() const { - if(!campState->getName().empty()) - return campState->getName(); + if(!campState->getNameTranslated().empty()) + return campState->getNameTranslated(); else return VLC->generaltexth->allTexts[508]; } diff --git a/lib/campaign/CampaignHandler.cpp b/lib/campaign/CampaignHandler.cpp index 63fae7c05..ad1e9146f 100644 --- a/lib/campaign/CampaignHandler.cpp +++ b/lib/campaign/CampaignHandler.cpp @@ -134,7 +134,7 @@ std::string CampaignHandler::readLocalizedString(CBinaryReader & reader, std::st return ""; VLC->generaltexth->registerString(modName, stringID, input); - return VLC->generaltexth->translate(stringID.get()); + return stringID.get(); } void CampaignHandler::readHeaderFromJson(CampaignHeader & ret, JsonNode & reader, std::string filename, std::string modName, std::string encoding) @@ -149,8 +149,8 @@ void CampaignHandler::readHeaderFromJson(CampaignHeader & ret, JsonNode & reader ret.version = CampaignVersion::VCMI; ret.campaignRegions = CampaignRegions::fromJson(reader["regions"]); ret.numberOfScenarios = reader["scenarios"].Vector().size(); - ret.name = reader["name"].String(); - ret.description = reader["description"].String(); + ret.name.appendTextID(reader["name"].String()); + ret.description.appendTextID(reader["description"].String()); ret.difficultyChoosenByPlayer = reader["allowDifficultySelection"].Bool(); ret.music = AudioPath::fromJson(reader["music"]); ret.filename = filename; @@ -383,8 +383,8 @@ void CampaignHandler::readHeaderFromMemory( CampaignHeader & ret, CBinaryReader ret.version = static_cast(reader.readUInt32()); ui8 campId = reader.readUInt8() - 1;//change range of it from [1, 20] to [0, 19] ret.loadLegacyData(campId); - ret.name = readLocalizedString(reader, filename, modName, encoding, "name"); - ret.description = readLocalizedString(reader, filename, modName, encoding, "description"); + ret.name.appendTextID(readLocalizedString(reader, filename, modName, encoding, "name")); + ret.description.appendTextID(readLocalizedString(reader, filename, modName, encoding, "description")); if (ret.version > CampaignVersion::RoE) ret.difficultyChoosenByPlayer = reader.readInt8(); else diff --git a/lib/campaign/CampaignState.cpp b/lib/campaign/CampaignState.cpp index f8bfe0271..082ddf7ee 100644 --- a/lib/campaign/CampaignState.cpp +++ b/lib/campaign/CampaignState.cpp @@ -134,14 +134,14 @@ bool CampaignHeader::formatVCMI() const return version == CampaignVersion::VCMI; } -std::string CampaignHeader::getDescription() const +std::string CampaignHeader::getDescriptionTranslated() const { - return description; + return description.toString(); } -std::string CampaignHeader::getName() const +std::string CampaignHeader::getNameTranslated() const { - return name; + return name.toString(); } std::string CampaignHeader::getFilename() const @@ -267,7 +267,7 @@ void CampaignState::setCurrentMapAsConquered(std::vector heroe return a->getHeroStrength() > b->getHeroStrength(); }); - logGlobal->info("Scenario %d of campaign %s (%s) has been completed", static_cast(*currentMap), getFilename(), getName()); + logGlobal->info("Scenario %d of campaign %s (%s) has been completed", static_cast(*currentMap), getFilename(), getNameTranslated()); mapsConquered.push_back(*currentMap); auto reservedHeroes = getReservedHeroes(); diff --git a/lib/campaign/CampaignState.h b/lib/campaign/CampaignState.h index 53b6d8e4c..fc5f1cbdf 100644 --- a/lib/campaign/CampaignState.h +++ b/lib/campaign/CampaignState.h @@ -10,6 +10,7 @@ #pragma once #include "../lib/GameConstants.h" +#include "../lib/MetaString.h" #include "../lib/filesystem/ResourcePath.h" #include "CampaignConstants.h" #include "CampaignScenarioPrologEpilog.h" @@ -74,8 +75,8 @@ class DLL_LINKAGE CampaignHeader : public boost::noncopyable CampaignVersion version = CampaignVersion::NONE; CampaignRegions campaignRegions; - std::string name; - std::string description; + MetaString name; + MetaString description; AudioPath music; std::string filename; std::string modName; @@ -90,8 +91,8 @@ public: bool playerSelectedDifficulty() const; bool formatVCMI() const; - std::string getDescription() const; - std::string getName() const; + std::string getDescriptionTranslated() const; + std::string getNameTranslated() const; std::string getFilename() const; std::string getModName() const; std::string getEncoding() const; @@ -176,7 +177,7 @@ struct DLL_LINKAGE CampaignTravel struct DLL_LINKAGE CampaignScenario { std::string mapName; //*.h3m - std::string scenarioName; //from header. human-readble + MetaString scenarioName; //from header std::set preconditionRegions; //what we need to conquer to conquer this one (stored as bitfield in h3c) ui8 regionColor = 0; ui8 difficulty = 0; diff --git a/lib/mapObjects/CGHeroInstance.cpp b/lib/mapObjects/CGHeroInstance.cpp index e82688891..9b2361c72 100644 --- a/lib/mapObjects/CGHeroInstance.cpp +++ b/lib/mapObjects/CGHeroInstance.cpp @@ -1030,8 +1030,6 @@ si32 CGHeroInstance::manaLimit() const std::string CGHeroInstance::getNameTranslated() const { - if (!nameCustom.empty()) - return nameCustom; return VLC->generaltexth->translate(getNameTextID()); } @@ -1049,9 +1047,6 @@ std::string CGHeroInstance::getNameTextID() const std::string CGHeroInstance::getBiographyTranslated() const { - if (!biographyCustom.empty()) - return biographyCustom; - return VLC->generaltexth->translate(getBiographyTextID()); } diff --git a/lib/mapping/CMapHeader.h b/lib/mapping/CMapHeader.h index 64ea09b7b..3c43b03e4 100644 --- a/lib/mapping/CMapHeader.h +++ b/lib/mapping/CMapHeader.h @@ -223,8 +223,8 @@ public: si32 height; /// The default value is 72. si32 width; /// The default value is 72. bool twoLevel; /// The default value is true. - std::string name; - std::string description; + MetaString name; + MetaString description; ui8 difficulty; /// The default value is 1 representing a normal map difficulty. /// Specifies the maximum level to reach for a hero. A value of 0 states that there is no /// maximum level for heroes. This is the default value. diff --git a/lib/mapping/CMapInfo.cpp b/lib/mapping/CMapInfo.cpp index e36ba25c2..f037ef7d4 100644 --- a/lib/mapping/CMapInfo.cpp +++ b/lib/mapping/CMapInfo.cpp @@ -100,12 +100,12 @@ void CMapInfo::countPlayers() amountOfHumanPlayersInSave++; } -std::string CMapInfo::getName() const +std::string CMapInfo::getNameTranslated() const { - if(campaign && !campaign->getName().empty()) - return campaign->getName(); - else if(mapHeader && mapHeader->name.length()) - return mapHeader->name; + if(campaign && !campaign->getNameTranslated().empty()) + return campaign->getNameTranslated(); + else if(mapHeader && !mapHeader->name.empty()) + return mapHeader->name.toString(); else return VLC->generaltexth->allTexts[508]; } @@ -121,16 +121,16 @@ std::string CMapInfo::getNameForList() const } else { - return getName(); + return getNameTranslated(); } } -std::string CMapInfo::getDescription() const +std::string CMapInfo::getDescriptionTranslated() const { if(campaign) - return campaign->getDescription(); + return campaign->getDescriptionTranslated(); else - return mapHeader->description; + return mapHeader->description.toString(); } int CMapInfo::getMapSizeIconId() const diff --git a/lib/mapping/CMapInfo.h b/lib/mapping/CMapInfo.h index 33d3874a1..6ac7ccea9 100644 --- a/lib/mapping/CMapInfo.h +++ b/lib/mapping/CMapInfo.h @@ -50,9 +50,9 @@ public: void campaignInit(); void countPlayers(); // TODO: Those must be on client-side - std::string getName() const; + std::string getNameTranslated() const; std::string getNameForList() const; - std::string getDescription() const; + std::string getDescriptionTranslated() const; int getMapSizeIconId() const; int getMapSizeFormatIconId() const; std::string getMapSizeName() const; diff --git a/lib/mapping/MapFormatH3M.cpp b/lib/mapping/MapFormatH3M.cpp index 9da89c494..751de6ddc 100644 --- a/lib/mapping/MapFormatH3M.cpp +++ b/lib/mapping/MapFormatH3M.cpp @@ -180,8 +180,8 @@ void CMapLoaderH3M::readHeader() mapHeader->areAnyPlayers = reader->readBool(); mapHeader->height = mapHeader->width = reader->readInt32(); mapHeader->twoLevel = reader->readBool(); - mapHeader->name = readLocalizedString("header.name"); - mapHeader->description = readLocalizedString("header.description"); + mapHeader->name.appendTextID(readLocalizedString("header.name")); + mapHeader->description.appendTextID(readLocalizedString("header.description")); mapHeader->difficulty = reader->readInt8(); if(features.levelAB) @@ -2275,7 +2275,7 @@ std::string CMapLoaderH3M::readLocalizedString(const TextIdentifier & stringIden return ""; VLC->generaltexth->registerString(modName, fullIdentifier, mapString); - return VLC->generaltexth->translate(fullIdentifier.get()); + return fullIdentifier.get(); } void CMapLoaderH3M::afterRead() diff --git a/lib/mapping/MapFormatJson.cpp b/lib/mapping/MapFormatJson.cpp index 66de3989e..ba3c044ff 100644 --- a/lib/mapping/MapFormatJson.cpp +++ b/lib/mapping/MapFormatJson.cpp @@ -413,8 +413,8 @@ void CMapFormatJson::serializeAllowedFactions(JsonSerializeFormat & handler, std void CMapFormatJson::serializeHeader(JsonSerializeFormat & handler) { - handler.serializeString("name", mapHeader->name); - handler.serializeString("description", mapHeader->description); + handler.serializeStruct("name", mapHeader->name); + handler.serializeStruct("description", mapHeader->description); handler.serializeInt("heroLevelLimit", mapHeader->levelLimit, 0); //todo: support arbitrary percentage diff --git a/lib/rmg/CMapGenerator.cpp b/lib/rmg/CMapGenerator.cpp index 30dcd24fe..4a3e919d8 100644 --- a/lib/rmg/CMapGenerator.cpp +++ b/lib/rmg/CMapGenerator.cpp @@ -407,8 +407,8 @@ void CMapGenerator::addHeaderInfo() m.width = mapGenOptions.getWidth(); m.height = mapGenOptions.getHeight(); m.twoLevel = mapGenOptions.getHasTwoLevels(); - m.name = VLC->generaltexth->allTexts[740]; - m.description = getMapDescription(); + m.name.appendLocalString(EMetaText::GENERAL_TXT, 740); + m.description.appendRawString(getMapDescription()); m.difficulty = 1; addPlayerInfo(); m.waterMap = (mapGenOptions.getWaterContent() != EWaterContent::EWaterContent::NONE);