2019-09-24 04:30:08 -04:00
|
|
|
#include <std_include.hpp>
|
2022-03-23 09:48:13 -04:00
|
|
|
#include <loader/module_loader.hpp>
|
|
|
|
#include <utils/hook.hpp>
|
|
|
|
|
2019-09-24 04:30:08 -04:00
|
|
|
#include "game/game.hpp"
|
|
|
|
|
|
|
|
static __declspec(naked) void db_load_stub_client(game::native::XZoneInfo*, unsigned int, int)
|
|
|
|
{
|
|
|
|
__asm
|
|
|
|
{
|
|
|
|
sub esp, 0Ch
|
|
|
|
mov eax, [esp + 18h]
|
|
|
|
|
|
|
|
mov ecx, game::native::DB_LoadXAssets
|
|
|
|
add ecx, 7h
|
|
|
|
push ecx
|
|
|
|
retn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static __declspec(naked) void db_load_stub_server(game::native::XZoneInfo*, unsigned int, int)
|
|
|
|
{
|
|
|
|
__asm
|
|
|
|
{
|
|
|
|
sub esp, 10h
|
|
|
|
mov eax, [esp + 1Ch]
|
|
|
|
|
|
|
|
mov ecx, game::native::DB_LoadXAssets
|
|
|
|
add ecx, 7h
|
|
|
|
push ecx
|
|
|
|
retn
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class fastfiles final : public module
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
void post_load() override
|
|
|
|
{
|
|
|
|
utils::hook(game::native::DB_LoadXAssets, db_load_stub, HOOK_JUMP).install()->quick();
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
static void db_load_stub(game::native::XZoneInfo* zone_info, const unsigned int zone_count, const int sync)
|
|
|
|
{
|
|
|
|
for (unsigned int i = 0; i < zone_count; ++i)
|
|
|
|
{
|
|
|
|
if (zone_info[i].name)
|
|
|
|
{
|
|
|
|
printf("Loading FastFile: %s (0x%X | 0x%X)\n", zone_info[i].name, zone_info[i].allocFlags,
|
|
|
|
zone_info[i].freeFlags);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (game::is_dedi()) return db_load_stub_server(zone_info, zone_count, sync);
|
|
|
|
else return db_load_stub_client(zone_info, zone_count, sync);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
REGISTER_MODULE(fastfiles)
|