Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 5 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -721,9 +721,9 @@ FetchContent_Declare (storm
FetchContent_GetProperties (storm)
if (NOT storm_POPULATED)
message (STATUS "Installing StormLib...")
FetchContent_Populate (storm)
FetchContent_MakeAvailable (storm)
endif()
add_subdirectory (${storm_SOURCE_DIR} ${storm_BINARY_DIR} EXCLUDE_FROM_ALL)

set (storm_warning_disable_flags "")
add_local_compiler_flag_if_supported (-Wno-implicit-function-declaration storm_warning_disable_flags)
target_compile_options (storm PRIVATE ${storm_warning_disable_flags})
Expand All @@ -738,9 +738,8 @@ if (NOGGIT_WITH_SCRIPTING)
FetchContent_GetProperties (json)
if (NOT json_POPULATED)
message (STATUS "Installing json.hpp...")
FetchContent_Populate (json)
FetchContent_MakeAvailable (json)
endif()
add_subdirectory (${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)

# Dependency: lodepng
FetchContent_Declare (lodepng
Expand All @@ -750,7 +749,7 @@ if (NOGGIT_WITH_SCRIPTING)
FetchContent_GetProperties (lodepng)
if (NOT lodepng_POPULATED)
message (STATUS "Installing lodepng...")
FetchContent_Populate (lodepng)
FetchContent_MakeAvailable (lodepng)
endif()
add_library (lodepng "${lodepng_SOURCE_DIR}/lodepng.cpp")
target_include_directories (lodepng SYSTEM PUBLIC ${lodepng_SOURCE_DIR})
Expand All @@ -767,13 +766,7 @@ if (NOGGIT_WITH_SCRIPTING)
FetchContent_GetProperties (fastnoise2)
if (NOT fastnoise2_POPULATED)
message (STATUS "Installing FastNoise2... (big repo, large download)")
FetchContent_Populate (fastnoise2)
endif()

if (FASTNOISE2_NOISETOOL)
add_subdirectory (${fastnoise2_SOURCE_DIR} ${fastnoise2_BINARY_DIR})
else()
add_subdirectory (${fastnoise2_SOURCE_DIR} ${fastnoise2_BINARY_DIR} EXCLUDE_FROM_ALL)
FetchContent_MakeAvailable (fastnoise2)
endif()

# Dependency: Lua
Expand Down
23 changes: 22 additions & 1 deletion src/noggit/MPQ.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ MPQFile::MPQFile(std::string const& filename)
: eof(true)
, pointer(0)
, External(false)
, _filename(noggit::mpq::normalized_filename(filename))
, _filename(filename)
, _disk_path (getDiskPath (_filename))
{
if (filename.empty())
Expand Down Expand Up @@ -358,5 +358,26 @@ namespace noggit
);
return filename;
}
std::string uni_path (std::string filename)
{
try
{
// Check without normalization
std::filesystem::path local_path(getDiskPath(filename));

if (std::filesystem::exists(local_path) || existsInMPQ (filename))
{
return filename;
}
else
{
return normalized_filename(filename);
}
}
catch (const std::exception& e)
{
throw std::runtime_error ("Error! File " + filename + " does not exists");
}
}
}
}
1 change: 1 addition & 0 deletions src/noggit/MPQ.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,5 +107,6 @@ namespace noggit
{
std::string normalized_filename (std::string filename);
std::string normalized_filename_insane (std::string filename);
std::string uni_path (std::string filename);
}
}
2 changes: 1 addition & 1 deletion src/noggit/World.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ bool World::IsEditableWorld(int pMapId)
}

std::stringstream ssfilename;
ssfilename << "World\\Maps\\" << lMapName << "\\" << lMapName << ".wdt";
ssfilename << noggit::mpq::uni_path("World/Maps/" + lMapName + "/" + lMapName + ".wdt");

if (!MPQFile::exists(ssfilename.str()))
{
Expand Down
2 changes: 1 addition & 1 deletion src/noggit/map_horizon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ namespace noggit
map_horizon::map_horizon(const std::string& basename, const MapIndex * const index)
{
std::stringstream filename;
filename << "World\\Maps\\" << basename << "\\" << basename << ".wdl";
filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + ".wdl");
_filename = filename.str();

if (!MPQFile::exists(_filename))
Expand Down
14 changes: 7 additions & 7 deletions src/noggit/map_index.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ MapIndex::MapIndex (const std::string &pBasename, int map_id, World* world)
_loading_radius = NoggitSettings.value("loading_radius", 1).toInt();

std::stringstream filename;
filename << "World\\Maps\\" << basename << "\\" << basename << ".wdt";
filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + ".wdt");

MPQFile theFile(filename.str());

Expand Down Expand Up @@ -87,7 +87,7 @@ MapIndex::MapIndex (const std::string &pBasename, int map_id, World* world)
theFile.seekRelative(4);

std::stringstream adt_filename;
adt_filename << "World\\Maps\\" << basename << "\\" << basename << "_" << i << "_" << j << ".adt";
adt_filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + "_" + std::to_string(i) + "_" + std::to_string(j) + ".adt");

mTiles[j][i].tile = nullptr;
mTiles[j][i].onDisc = MPQFile::existsOnDisk(adt_filename.str());
Expand Down Expand Up @@ -149,7 +149,7 @@ void MapIndex::saveall (World* world)
void MapIndex::save()
{
std::stringstream filename;
filename << "World\\Maps\\" << basename << "\\" << basename << ".wdt";
filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + ".wdt");

//NOGGIT_LOG << "Saving WDT \"" << filename << "\"." << std::endl;

Expand Down Expand Up @@ -317,7 +317,7 @@ MapTile* MapIndex::loadTile(const tile_index& tile, bool reloading)
}

std::stringstream filename;
filename << "World\\Maps\\" << basename << "\\" << basename << "_" << tile.x << "_" << tile.z << ".adt";
filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + "_" + std::to_string(tile.x) + "_" + std::to_string(tile.z) + ".adt");

if (!MPQFile::exists(filename.str()))
{
Expand Down Expand Up @@ -610,7 +610,7 @@ uid_fix_status MapIndex::fixUIDs (World* world, bool cancel_on_model_loading_err
}

std::stringstream filename;
filename << "World\\Maps\\" << basename << "\\" << basename << "_" << x << "_" << z << ".adt";
filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + "_" + std::to_string(x) + "_" + std::to_string(z) + ".adt");

if (!MPQFile::exists(filename.str()))
{
Expand Down Expand Up @@ -860,7 +860,7 @@ uid_fix_status MapIndex::fixUIDs (World* world, bool cancel_on_model_loading_err
// that shouldn't be there to avoid creating new duplicates

std::stringstream filename;
filename << "World\\Maps\\" << basename << "\\" << basename << "_" << x << "_" << z << ".adt";
filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + "_" + std::to_string(x) + "_" + std::to_string(z) + ".adt");

// load the tile without the models
MapTile tile(x, z, filename.str(), mBigAlpha, false, use_mclq_green_lava(), false, world, tile_mode::uid_fix_all);
Expand Down Expand Up @@ -900,7 +900,7 @@ void MapIndex::searchMaxUID()
}

std::stringstream filename;
filename << "World\\Maps\\" << basename << "\\" << basename << "_" << x << "_" << z << ".adt";
filename << noggit::mpq::uni_path("World/Maps/" + basename + "/" + basename + "_" + std::to_string(x) + "_" + std::to_string(z) + ".adt");
highestGUID = std::max(highestGUID, getHighestGUIDFromFile(filename.str()));
}
}
Expand Down