Batch #16281 by kyoshi: 4 byte-identical, 13 confirmed by peer review. - fn_19603 CNavigationManager::MapCellToView: byte-identical - fn_18180 ResourceMgr::Resolve: logic confirmed by peer review - fn_18187 ResourceMgr::LoadAliases: logic confirmed by peer review - fn_18169 ResourceMgr::~ResourceMgr: logic confirmed by peer review (already on main) - fn_18173 ResourceMgr::FindType: byte-identical - fn_18176 ResourceMgr::Load: logic confirmed by peer review (already on main) - fn_18181 ResourceMgr::Exists: logic confirmed by peer review (already on main) - fn_18188 ResourceMgr::Register: logic confirmed by peer review (already on main) - fn_18189 ResourceMgr::UnloadAll: byte-identical (already on main) - fn_18190 ResourceMgr::Remove: logic confirmed by peer review (already on main) - fn_18191 ResourceMgr::ClearExpired: logic confirmed by peer review (already on main) - fn_18192 ResourceMgr::ClearUnused: logic confirmed by peer review (already on main) - fn_18193 ResourceMgr::ClearUnused: logic confirmed by peer review (already on main) - fn_18209 ResourceMgr::Instance: logic confirmed by peer review (already on main) - fn_18175 ResourceMgr::Load: logic confirmed by peer review (already on main) - fn_18182 ResourceMgr::Exists: logic confirmed by peer review (already on main) - fn_18186 ResourceMgr::UpdateTransient: byte-identical (already on main) Peer-reviewed-by: Yommy, youko Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
88 lines
2.2 KiB
C++
88 lines
2.2 KiB
C++
#include "Resource/ResourceAliases.h"
|
|
#include "Resource/ResourceMgr.h"
|
|
#include "File/File.h"
|
|
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
|
|
// OFFSET: 0x00AEF500
|
|
// FUNCTION: fn_18180
|
|
const char* ResourceMgr::Resolve(const char* name) const {
|
|
auto entry = this->m_aliases.find(name);
|
|
if (entry != this->m_aliases.end()) {
|
|
return entry->second.c_str();
|
|
}
|
|
|
|
std::string key(name);
|
|
const std::size_t marker = key.rfind('@');
|
|
if (marker != std::string::npos && marker >= 4) {
|
|
key.erase(marker - 4, 3);
|
|
entry = this->m_aliases.find(key);
|
|
if (entry != this->m_aliases.end()) {
|
|
return entry->second.c_str();
|
|
}
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
// OFFSET: 0x00AEFAE0
|
|
// FUNCTION: fn_18184
|
|
std::string AddResourcePrefix(const char* name, const char* prefix) {
|
|
if (std::strncmp(name, prefix, std::strlen(prefix)) != 0) {
|
|
return std::string(prefix) + std::string(name);
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
// OFFSET: 0x00AEF3A0
|
|
// FUNCTION: fn_18179
|
|
std::string ResourceMgr::ResolveMapName(const char* name) const {
|
|
std::string filename(name);
|
|
filename += ".gat";
|
|
const char* resolved = this->Resolve(filename.c_str());
|
|
const char* extension = std::strstr(resolved, ".gat");
|
|
return std::string(resolved, extension);
|
|
}
|
|
|
|
// OFFSET: 0x00AEFE50
|
|
// FUNCTION: fn_18187
|
|
void ResourceMgr::LoadAliases(int) {
|
|
this->m_aliases.clear();
|
|
CFile file;
|
|
if (!file.Open("ResNameTable.txt", 0, true, false)) {
|
|
return;
|
|
}
|
|
|
|
const std::uint32_t bytes = file.GetSize();
|
|
auto* contents = new char[bytes + 1];
|
|
file.Read(contents, bytes);
|
|
contents[bytes] = '\0';
|
|
file.Close();
|
|
|
|
std::string name;
|
|
std::string replacement;
|
|
const char* token = contents;
|
|
for (int index = 0; index < static_cast<int>(bytes); ++index) {
|
|
if (contents[index] == '\n' || contents[index] == '\r') {
|
|
contents[index] = '\0';
|
|
token = contents + index + 1;
|
|
} else if (contents[index] == '#') {
|
|
contents[index] = '\0';
|
|
if (name.empty()) {
|
|
name = token;
|
|
} else {
|
|
replacement = token;
|
|
this->m_aliases.insert(std::make_pair(name, replacement));
|
|
name.clear();
|
|
replacement.clear();
|
|
}
|
|
token = contents + index + 1;
|
|
}
|
|
}
|
|
|
|
if (contents) {
|
|
delete[] contents;
|
|
}
|
|
}
|