62 lines
1.4 KiB
C++
62 lines
1.4 KiB
C++
#include <std_include.hpp>
|
|
#include "loader/component_loader.hpp"
|
|
|
|
#include "game/game.hpp"
|
|
|
|
#include "console.hpp"
|
|
|
|
#include <utils/hook.hpp>
|
|
|
|
namespace menus
|
|
{
|
|
namespace
|
|
{
|
|
constexpr auto patch_menu_list_name = "ui/patch_code.txt";
|
|
|
|
void ui_add_menu_list_stub(void* context, void* menu_list, int a3)
|
|
{
|
|
game::UI_AddMenuList(context, menu_list, a3);
|
|
|
|
if (game::DB_XAssetExists(game::ASSET_TYPE_MENULIST, patch_menu_list_name) &&
|
|
!game::DB_IsXAssetDefault(game::ASSET_TYPE_MENULIST, patch_menu_list_name))
|
|
{
|
|
const auto patch_code_list = game::UI_LoadMenus(patch_menu_list_name);
|
|
game::UI_AddMenuList(context, patch_code_list, a3);
|
|
}
|
|
}
|
|
|
|
int menus_open_by_name_stub(void* context, const char* name)
|
|
{
|
|
const std::string override_name = "override/"s + name;
|
|
const auto override_menu = game::Menus_FindByName(context, override_name.data());
|
|
|
|
if (override_menu)
|
|
{
|
|
game::Menus_Open(context, override_menu, 0);
|
|
return 1;
|
|
}
|
|
|
|
const auto menu = game::Menus_FindByName(context, name);
|
|
if (menu)
|
|
{
|
|
game::Menus_Open(context, menu, 0);
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
class component final : public component_interface
|
|
{
|
|
public:
|
|
void post_unpack() override
|
|
{
|
|
utils::hook::call(0x1405F0A45, ui_add_menu_list_stub);
|
|
utils::hook::jump(game::Menus_OpenByName, menus_open_by_name_stub);
|
|
}
|
|
};
|
|
}
|
|
|
|
REGISTER_COMPONENT(menus::component)
|