Additional localized string hook

This commit is contained in:
Federico Cecchetto 2022-07-15 02:43:50 +02:00
parent 3e04061489
commit 1c7ec6e3a7
3 changed files with 35 additions and 0 deletions

View File

@ -30,6 +30,32 @@ namespace localized_strings
return seh_string_ed_get_string_hook.invoke<const char*>(reference);
});
}
game::XAssetHeader db_find_localize_entry_stub(game::XAssetType type, const char* name, int allow_create_default)
{
const auto value = localized_overrides.access<const char*>([&](const localized_map& map)
-> const char*
{
const auto entry = map.find(name);
if (entry != map.end())
{
return utils::string::va("%s", entry->second.data());
}
return nullptr;
});
if (value == nullptr)
{
return game::DB_FindXAssetHeader(type, name, allow_create_default);
}
static game::LocalizeEntry entry{};
entry.value = value;
entry.name = name;
return static_cast<game::XAssetHeader>(&entry);
}
}
void override(const std::string& key, const std::string& value)
@ -47,6 +73,7 @@ namespace localized_strings
{
// Change some localized strings
seh_string_ed_get_string_hook.create(0x1405E5FD0, &seh_string_ed_get_string);
utils::hook::call(0x1405E5AB9, db_find_localize_entry_stub);
}
};
}

View File

@ -822,6 +822,12 @@ namespace game
void* models;
};
struct LocalizeEntry
{
const char* value;
const char* name;
};
union XAssetHeader
{
void* data;
@ -834,6 +840,7 @@ namespace game
TTF* ttf;
MapEnts* mapents;
AddonMapEnts* addon_mapents;
LocalizeEntry* localize;
};
struct XAsset

View File

@ -156,6 +156,7 @@ namespace game
WEAK symbol<void(int critSec)> Sys_LeaveCriticalSection{0x1406242C0};
WEAK symbol<const char*()> SEH_GetCurrentLanguageCode{0x1405E5180};
WEAK symbol<const char*()> SEH_GetCurrentLanguageName{0x1405E5200};
WEAK symbol<const char*(const char* string)> UI_SafeTranslateString{0x1405A2930};
WEAK symbol<int(int localClientNum, const char* sound)> UI_PlayLocalSoundAlias{0x140606080};