Add fonts/bank.ttf to usable hudelem fonts

This commit is contained in:
Federico Cecchetto 2022-06-18 20:55:03 +02:00
parent 1057a5cffc
commit 025a814a6b

View File

@ -19,6 +19,23 @@ namespace fonts
{ {
namespace namespace
{ {
const char* hudelem_fonts[] =
{
"",
"bigfixed",
"smallfixed",
"objective",
"big",
"small",
"hudbig",
"hudsmall",
"buttomprompt",
"subtitle",
"timer",
"nameplate",
"bank"
};
struct font_data_t struct font_data_t
{ {
std::unordered_map<std::string, game::TTF*> fonts; std::unordered_map<std::string, game::TTF*> fonts;
@ -94,6 +111,62 @@ namespace fonts
} }
return result; return result;
} }
game::Font_s* bank_font = nullptr;
utils::hook::detour ui_get_font_handle_hook;
utils::hook::detour ui_asset_cache_hook;
game::Font_s* ui_get_font_handle_stub(void* a1, int font_index)
{
if (font_index == 12 && bank_font != nullptr)
{
return bank_font;
}
return ui_get_font_handle_hook.invoke<game::Font_s*>(a1, font_index);
}
void* ui_asset_cache_stub()
{
if (!game::Com_InFrontend())
{
bank_font = game::R_RegisterFont("fonts/bank.ttf", 32);
}
else
{
bank_font = nullptr;
}
return ui_asset_cache_hook.invoke<void*>();
}
int get_font_handle_index(int hudelem_font_index, int current)
{
if (hudelem_font_index == 12)
{
return 12;
}
return current;
}
void get_hud_elem_info_stub(utils::hook::assembler& a)
{
a.push(ebx);
a.pushad64();
a.mov(edx, ebx);
a.mov(ecx, dword_ptr(rsi, 4));
a.call_aligned(get_font_handle_index);
a.mov(dword_ptr(rsp, 0x80), eax);
a.popad64();
a.pop(ebx);
a.mov(edx, dword_ptr(rdi, 0x240));
a.lea(r8, qword_ptr(rsp, 0x98));
a.jmp(0x14037B39E);
}
} }
void add(const std::string& name, const std::string& data) void add(const std::string& name, const std::string& data)
@ -124,6 +197,14 @@ namespace fonts
void post_unpack() override void post_unpack() override
{ {
utils::hook::call(0x140747096, db_find_xasset_header_stub); utils::hook::call(0x140747096, db_find_xasset_header_stub);
// add fonts/bank.ttf to hud elem fonts
// make font index 12 => bank.ttf
ui_asset_cache_hook.create(0x140606090, ui_asset_cache_stub);
ui_get_font_handle_hook.create(0x1406058F0, ui_get_font_handle_stub);
utils::hook::jump(0x14037B390, utils::hook::assemble(get_hud_elem_info_stub), true);
utils::hook::inject(0x1404C17A6, hudelem_fonts);
utils::hook::set(0x1404C17B7, 13); // 13 hud elem fonts
} }
}; };
} }