diff --git a/binaries/data/mods/public/civs/cart.json b/binaries/data/mods/public/civs/cart.json index 54b670e9c7..83827184c2 100644 --- a/binaries/data/mods/public/civs/cart.json +++ b/binaries/data/mods/public/civs/cart.json @@ -80,6 +80,20 @@ ], "StartEntities": [ + { + "Template": "structures/cart_civil_centre" + }, + { + "Template": "units/cart_support_female_citizen", + "Count": 4 + }, + { + "Template": "units/cart_infantry_spearman_b", + "Count": 4 + }, + { + "Template": "units/cart_cavalry_swordsman_b" + } ], "SelectableInGameSetup": false } diff --git a/binaries/data/mods/public/civs/pers.json b/binaries/data/mods/public/civs/pers.json index b715589c78..0a49ac18ac 100644 --- a/binaries/data/mods/public/civs/pers.json +++ b/binaries/data/mods/public/civs/pers.json @@ -86,6 +86,9 @@ ], "StartEntities": [ + { + "Template": "structures/pers_civil_centre" + } ], "SelectableInGameSetup": false } diff --git a/binaries/data/mods/public/civs/rome.json b/binaries/data/mods/public/civs/rome.json index 7ed6b5885d..3262a12d30 100644 --- a/binaries/data/mods/public/civs/rome.json +++ b/binaries/data/mods/public/civs/rome.json @@ -91,6 +91,9 @@ ], "StartEntities": [ + { + "Template": "structures/rome_civil_centre" + } ], "SelectableInGameSetup": false } diff --git a/source/graphics/MapGenerator.cpp b/source/graphics/MapGenerator.cpp index e11f6a9bad..cc90ceb6aa 100644 --- a/source/graphics/MapGenerator.cpp +++ b/source/graphics/MapGenerator.cpp @@ -91,6 +91,7 @@ bool CMapGeneratorWorker::Run() m_ScriptInterface->RegisterFunction("ExportMap"); m_ScriptInterface->RegisterFunction("SetProgress"); m_ScriptInterface->RegisterFunction("MaybeGC"); + m_ScriptInterface->RegisterFunction, CMapGeneratorWorker::GetCivData>("GetCivData"); // Parse settings CScriptValRooted settingsVal = m_ScriptInterface->ParseJSON(m_Settings); @@ -172,6 +173,43 @@ void CMapGeneratorWorker::MaybeGC(void* cbdata) self->m_ScriptInterface->MaybeGC(); } +std::vector CMapGeneratorWorker::GetCivData(void* UNUSED(cbdata)) +{ + VfsPath path(L"civs/"); + VfsPaths pathnames; + + std::vector data; + + // Load all JSON files in civs directory + Status ret = vfs::GetPathnames(g_VFS, path, L"*.json", pathnames); + if (ret == INFO::OK) + { + for (VfsPaths::iterator it = pathnames.begin(); it != pathnames.end(); ++it) + { + // Load JSON file + CVFSFile file; + PSRETURN ret = file.Load(g_VFS, *it); + if (ret != PSRETURN_OK) + { + LOGERROR(L"CMapGeneratorWorker::GetCivData: Failed to load file '%ls': %hs", path.string().c_str(), GetErrorString(ret)); + } + else + { + data.push_back(std::string(file.GetBuffer(), file.GetBuffer() + file.GetBufferSize())); + } + } + } + else + { + // Some error reading directory + wchar_t error[200]; + LOGERROR(L"CMapGeneratorWorker::GetCivData: Error reading directory '%ls': %ls", path.string().c_str(), StatusDescription(ret, error, ARRAY_SIZE(error))); + } + + return data; + +} + bool CMapGeneratorWorker::LoadScripts(const std::wstring& libraryName) { // Ignore libraries that are already loaded diff --git a/source/graphics/MapGenerator.h b/source/graphics/MapGenerator.h index 668e6355c7..38839d3a1d 100644 --- a/source/graphics/MapGenerator.h +++ b/source/graphics/MapGenerator.h @@ -123,6 +123,7 @@ private: static void ExportMap(void* cbdata, CScriptValRooted data); static void SetProgress(void* cbdata, int progress); static void MaybeGC(void* cbdata); + static std::vector GetCivData(void* cbdata); std::set m_LoadedLibraries; shared_ptr m_MapData;