forked from Popn_Tools/popnhax
exclude from versions,CS + default fav rework
This commit is contained in:
parent
5e57926b58
commit
d6ca83d076
@ -85,12 +85,7 @@ void prepare_favorite_list(){
|
||||
|
||||
if ( file == NULL )
|
||||
{
|
||||
file = fopen("data_mods\\default.fav", "rb");
|
||||
|
||||
if (file == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
char line[32];
|
||||
@ -213,6 +208,10 @@ void categ_inject_favorites()
|
||||
__asm("cmp ecx, 0\n");
|
||||
__asm("jne skip_fake_login\n");
|
||||
__asm("mov dword ptr [edx], 0xFF000001\n");
|
||||
__asm("sub edx, 0x19D\n"); //back to popn friendid offset
|
||||
__asm("mov dword ptr [edx], 0x61666564\n"); // "defa"
|
||||
__asm("add edx, 0x04\n");
|
||||
__asm("mov dword ptr [edx], 0x00746C75\n"); // "ult"
|
||||
__asm("skip_fake_login:\n");
|
||||
|
||||
//retrieve songlist according to friend id
|
||||
@ -986,6 +985,84 @@ bool load_favorites(){
|
||||
return true;
|
||||
}
|
||||
|
||||
void (*real_getversion)();
|
||||
void hook_getversion()
|
||||
{
|
||||
__asm("cmp eax, _g_min_id\n");
|
||||
__asm("jb real_version\n");
|
||||
__asm("cmp dword ptr _g_max_id, 0\n");
|
||||
__asm("je force_version_0\n");
|
||||
__asm("cmp eax, _g_max_id\n");
|
||||
__asm("ja real_version\n");
|
||||
|
||||
__asm("force_version_0:\n");
|
||||
__asm("mov eax, 0x00\n");
|
||||
//__asm("mov ecx, 0x138E\n");
|
||||
__asm("ret\n");
|
||||
|
||||
__asm("real_version:\n");
|
||||
real_getversion();
|
||||
}
|
||||
|
||||
void (*real_getcsversion)();
|
||||
void hook_getcsversion()
|
||||
{
|
||||
__asm("cmp eax, _g_min_id\n");
|
||||
__asm("jb real_csversion\n");
|
||||
__asm("cmp dword ptr _g_max_id, 0\n");
|
||||
__asm("je force_csversion_0\n");
|
||||
__asm("cmp eax, _g_max_id\n");
|
||||
__asm("ja real_csversion\n");
|
||||
|
||||
__asm("force_csversion_0:\n");
|
||||
__asm("mov eax, 0x00\n");
|
||||
//__asm("mov ecx, 0x138E\n");
|
||||
__asm("ret\n");
|
||||
|
||||
__asm("real_csversion:\n");
|
||||
real_getcsversion();
|
||||
}
|
||||
|
||||
bool patch_exclude(const char *game_dll_fn)
|
||||
{
|
||||
|
||||
DWORD dllSize = 0;
|
||||
char *data = getDllData(game_dll_fn, &dllSize);
|
||||
|
||||
{
|
||||
int64_t pattern_offset = search(data, dllSize, "\x00\x8B\x56\x04\x0F\xB7\x02\xE8", 8, 0);
|
||||
if (pattern_offset == -1) {
|
||||
LOG("popnhax: exclude_customs: cannot find songlist processing table\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t function_call_addr = (int64_t)(data + pattern_offset + 0x07);
|
||||
uint32_t function_offset = *((uint32_t*)(function_call_addr +0x01));
|
||||
uint64_t function_addr = function_call_addr+5+function_offset;
|
||||
|
||||
MH_CreateHook((LPVOID)function_addr, (LPVOID)hook_getversion,
|
||||
(void **)&real_getversion);
|
||||
}
|
||||
|
||||
{
|
||||
int64_t pattern_offset = search(data, dllSize, "\xB8\x13\x05\x00\x00\x66\x3B\xF0", 8, 0);
|
||||
if (pattern_offset == -1) {
|
||||
LOG("popnhax: exclude_customs: cannot find getCSVersion calling function\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t function_call_addr = (int64_t)(data + pattern_offset + 0x0C);
|
||||
uint32_t function_offset = *((uint32_t*)(function_call_addr +0x01));
|
||||
uint64_t function_addr = function_call_addr+5+function_offset;
|
||||
|
||||
MH_CreateHook((LPVOID)function_addr, (LPVOID)hook_getcsversion,
|
||||
(void **)&real_getcsversion);
|
||||
}
|
||||
|
||||
LOG("popnhax: exclude_customs: Custom songs excluded from version listings\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool patch_custom_categs(const char *dllFilename, uint8_t mode, uint16_t min, uint16_t max)
|
||||
{
|
||||
g_min_id = min;
|
||||
@ -999,6 +1076,8 @@ bool patch_custom_categs(const char *dllFilename, uint8_t mode, uint16_t min, ui
|
||||
load_databases();
|
||||
}
|
||||
|
||||
patch_exclude(dllFilename);
|
||||
|
||||
patch_custom_highlight(dllFilename);
|
||||
|
||||
load_favorites();
|
||||
|
Loading…
Reference in New Issue
Block a user