2
0

MapFormatSettings.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * MapFormatSettings.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "MapFormatSettings.h"
  12. #include "MapFeaturesH3M.h"
  13. #include "../GameLibrary.h"
  14. #include "../IGameSettings.h"
  15. #include "../json/JsonUtils.h"
  16. #include "../modding/ModScope.h"
  17. VCMI_LIB_NAMESPACE_BEGIN
  18. MapIdentifiersH3M MapFormatSettings::generateMapping(EMapFormat format)
  19. {
  20. auto features = MapFormatFeaturesH3M::find(format, 0);
  21. MapIdentifiersH3M identifierMapper;
  22. if(features.levelROE)
  23. identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_RESTORATION_OF_ERATHIA));
  24. if(features.levelAB)
  25. identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_ARMAGEDDONS_BLADE));
  26. if(features.levelSOD)
  27. identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_SHADOW_OF_DEATH));
  28. if(features.levelCHR)
  29. identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_CHRONICLES));
  30. if(features.levelWOG)
  31. identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_IN_THE_WAKE_OF_GODS));
  32. if(features.levelHOTA0)
  33. identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_HORN_OF_THE_ABYSS));
  34. return identifierMapper;
  35. }
  36. std::map<CampaignVersion, EMapFormat> MapFormatSettings::generateCampaignMapping()
  37. {
  38. return {
  39. {CampaignVersion::RoE, EMapFormat::ROE },
  40. {CampaignVersion::AB, EMapFormat::AB },
  41. {CampaignVersion::SoD, EMapFormat::SOD },
  42. {CampaignVersion::WoG, EMapFormat::WOG },
  43. {CampaignVersion::Chr, EMapFormat::CHR },
  44. {CampaignVersion::HotA, EMapFormat::HOTA}
  45. };
  46. }
  47. std::map<EMapFormat, MapIdentifiersH3M> MapFormatSettings::generateMappings()
  48. {
  49. std::map<EMapFormat, MapIdentifiersH3M> result;
  50. auto addMapping = [&result](EMapFormat format)
  51. {
  52. try
  53. {
  54. result[format] = generateMapping(format);
  55. logMod->trace("Loaded map format support for %d", static_cast<int>(format));
  56. }
  57. catch(const std::runtime_error &)
  58. {
  59. // unsupported map format - skip
  60. logMod->debug("Failed to load map format support for %d", static_cast<int>(format));
  61. }
  62. };
  63. addMapping(EMapFormat::ROE);
  64. addMapping(EMapFormat::AB);
  65. addMapping(EMapFormat::SOD);
  66. addMapping(EMapFormat::CHR);
  67. addMapping(EMapFormat::HOTA);
  68. addMapping(EMapFormat::WOG);
  69. return result;
  70. }
  71. MapFormatSettings::MapFormatSettings()
  72. : mapping(generateMappings())
  73. , campaignToMap(generateCampaignMapping())
  74. , campaignOverridesConfig(JsonUtils::assembleFromFiles("config/campaignOverrides.json"))
  75. , mapOverridesConfig(JsonUtils::assembleFromFiles("config/mapOverrides.json"))
  76. {
  77. for (auto & entry : mapOverridesConfig.Struct())
  78. JsonUtils::validate(entry.second, "vcmi:mapHeader", "patch for " + entry.first);
  79. campaignOverridesConfig.setModScope(ModScope::scopeMap());
  80. mapOverridesConfig.setModScope(ModScope::scopeMap());
  81. }
  82. VCMI_LIB_NAMESPACE_END