mirror of
https://github.com/CrazyRedMachine/popnhax.git
synced 2024-11-27 23:40:50 +01:00
custom game dll and xml file
This commit is contained in:
parent
c68a52d296
commit
694e998352
@ -8,6 +8,9 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <io.h>
|
||||||
|
#define F_OK 0
|
||||||
|
#define access _access
|
||||||
|
|
||||||
#include "util/fuzzy_search.h"
|
#include "util/fuzzy_search.h"
|
||||||
|
|
||||||
@ -24,7 +27,10 @@
|
|||||||
|
|
||||||
#include "SearchFile.h"
|
#include "SearchFile.h"
|
||||||
|
|
||||||
#define DEBUG 0
|
const char* g_game_dll_fn = NULL;
|
||||||
|
const char* g_config_fn = NULL;
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
|
|
||||||
#if DEBUG == 1
|
#if DEBUG == 1
|
||||||
double g_multiplier = 1.;
|
double g_multiplier = 1.;
|
||||||
@ -331,7 +337,7 @@ asm(
|
|||||||
|
|
||||||
void patch_string(const char *input_string, const char *new_string) {
|
void patch_string(const char *input_string, const char *new_string) {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
@ -354,7 +360,7 @@ void patch_string(const char *input_string, const char *new_string) {
|
|||||||
|
|
||||||
bool patch_hex(const char *find, uint8_t find_size, int64_t shift, const char *replace, uint8_t replace_size) {
|
bool patch_hex(const char *find, uint8_t find_size, int64_t shift, const char *replace, uint8_t replace_size) {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
|
|
||||||
@ -559,7 +565,7 @@ char *parse_patchdb(const char *input_filename, char *base_data) {
|
|||||||
static bool patch_purelong()
|
static bool patch_purelong()
|
||||||
{
|
{
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
{
|
{
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
@ -594,7 +600,7 @@ static bool patch_purelong()
|
|||||||
|
|
||||||
static bool patch_database(uint8_t force_unlocks) {
|
static bool patch_database(uint8_t force_unlocks) {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
patch_purelong();
|
patch_purelong();
|
||||||
|
|
||||||
@ -840,7 +846,7 @@ static bool patch_database(uint8_t force_unlocks) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HMODULE _moduleBase = GetModuleHandle("popn22.dll");
|
HMODULE _moduleBase = GetModuleHandle(g_game_dll_fn);
|
||||||
for (size_t i = 0; i < hook_offsets.size(); i++) {
|
for (size_t i = 0; i < hook_offsets.size(); i++) {
|
||||||
switch (hook_offsets[i]->method) {
|
switch (hook_offsets[i]->method) {
|
||||||
case 0: {
|
case 0: {
|
||||||
@ -872,7 +878,7 @@ static bool patch_database(uint8_t force_unlocks) {
|
|||||||
|
|
||||||
static bool patch_unset_volume() {
|
static bool patch_unset_volume() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
int64_t first_loc = 0;
|
int64_t first_loc = 0;
|
||||||
|
|
||||||
@ -910,7 +916,7 @@ static bool patch_unset_volume() {
|
|||||||
|
|
||||||
static bool patch_event_mode() {
|
static bool patch_event_mode() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
{
|
{
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
@ -937,7 +943,7 @@ static bool patch_event_mode() {
|
|||||||
|
|
||||||
static bool patch_remove_timer() {
|
static bool patch_remove_timer() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
int64_t first_loc = 0;
|
int64_t first_loc = 0;
|
||||||
|
|
||||||
@ -975,7 +981,7 @@ static bool patch_remove_timer() {
|
|||||||
|
|
||||||
static bool patch_freeze_timer() {
|
static bool patch_freeze_timer() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
{
|
{
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
@ -999,7 +1005,7 @@ static bool patch_freeze_timer() {
|
|||||||
|
|
||||||
static bool patch_skip_tutorials() {
|
static bool patch_skip_tutorials() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
int64_t first_loc = 0;
|
int64_t first_loc = 0;
|
||||||
|
|
||||||
@ -1079,7 +1085,7 @@ bool force_unlock_deco_parts() {
|
|||||||
|
|
||||||
bool force_unlock_songs() {
|
bool force_unlock_songs() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
int music_unlocks = 0, chart_unlocks = 0;
|
int music_unlocks = 0, chart_unlocks = 0;
|
||||||
|
|
||||||
@ -1133,7 +1139,7 @@ bool force_unlock_songs() {
|
|||||||
|
|
||||||
bool force_unlock_charas() {
|
bool force_unlock_charas() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
int chara_unlocks = 0;
|
int chara_unlocks = 0;
|
||||||
|
|
||||||
@ -1187,7 +1193,7 @@ bool force_unlock_charas() {
|
|||||||
|
|
||||||
static bool patch_unlocks_offline() {
|
static bool patch_unlocks_offline() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
{
|
{
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
@ -1241,7 +1247,7 @@ static bool get_addr_icca(uint32_t *res)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
|
|
||||||
@ -1272,7 +1278,7 @@ static bool get_addr_timing_offset(uint32_t *res)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
|
|
||||||
@ -1305,7 +1311,7 @@ static bool get_addr_beam_brightness(uint32_t *res)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
|
|
||||||
@ -1336,7 +1342,7 @@ static bool get_addr_sd_timing(uint32_t *res)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
|
|
||||||
@ -1367,7 +1373,7 @@ static bool get_addr_hd_timing(uint32_t *res)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
fuzzy_search_task task;
|
fuzzy_search_task task;
|
||||||
|
|
||||||
@ -1389,7 +1395,7 @@ static bool get_addr_hd_timing(uint32_t *res)
|
|||||||
static bool patch_hidden_is_offset()
|
static bool patch_hidden_is_offset()
|
||||||
{
|
{
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
uint32_t timing_addr = 0;
|
uint32_t timing_addr = 0;
|
||||||
if (!get_addr_timing_offset(&timing_addr))
|
if (!get_addr_timing_offset(&timing_addr))
|
||||||
{
|
{
|
||||||
@ -1476,7 +1482,7 @@ static bool patch_hidden_is_offset()
|
|||||||
|
|
||||||
static bool patch_pfree() {
|
static bool patch_pfree() {
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
/* stop stage counter (2 matches, 1st one is the good one) */
|
/* stop stage counter (2 matches, 1st one is the good one) */
|
||||||
{
|
{
|
||||||
@ -1620,7 +1626,7 @@ pfree_apply:
|
|||||||
static bool patch_quick_retire(bool pfree)
|
static bool patch_quick_retire(bool pfree)
|
||||||
{
|
{
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
|
|
||||||
if ( !pfree )
|
if ( !pfree )
|
||||||
{
|
{
|
||||||
@ -1750,7 +1756,7 @@ static bool patch_add_to_base_offset(int8_t delta) {
|
|||||||
static bool patch_keysound_offset(int8_t value)
|
static bool patch_keysound_offset(int8_t value)
|
||||||
{
|
{
|
||||||
DWORD dllSize = 0;
|
DWORD dllSize = 0;
|
||||||
char *data = getDllData("popn22.dll", &dllSize);
|
char *data = getDllData(g_game_dll_fn, &dllSize);
|
||||||
g_keysound_offset = -1*value;
|
g_keysound_offset = -1*value;
|
||||||
|
|
||||||
patch_add_to_base_offset(value);
|
patch_add_to_base_offset(value);
|
||||||
@ -1929,7 +1935,52 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
_load_config("popnhax.xml", &config, config_psmap);
|
LPWSTR *szArglist;
|
||||||
|
int nArgs;
|
||||||
|
|
||||||
|
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
|
||||||
|
if (szArglist == NULL) {
|
||||||
|
printf("popnhax: Failed to get cmdline\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < nArgs; i++) {
|
||||||
|
/* game dll */
|
||||||
|
if ( wcsstr(szArglist[i], L".dll") != NULL && wcsstr(szArglist[i], L"popn2") == szArglist[i] )
|
||||||
|
{
|
||||||
|
char* resultStr = new char [wcslen(szArglist[i]) + 1];
|
||||||
|
wsprintfA ( resultStr, "%S", szArglist[i]);
|
||||||
|
g_game_dll_fn = strdup(resultStr);
|
||||||
|
}
|
||||||
|
/* config xml */
|
||||||
|
else if ( wcscmp(szArglist[i], L"--popnhax-config") == 0 )
|
||||||
|
{
|
||||||
|
char* resultStr = new char [wcslen(szArglist[i+1]) + 1];
|
||||||
|
wsprintfA ( resultStr, "%S", szArglist[i+1]);
|
||||||
|
g_config_fn = strdup(resultStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LocalFree(szArglist);
|
||||||
|
|
||||||
|
if (g_game_dll_fn == NULL)
|
||||||
|
g_game_dll_fn = strdup("popn22.dll");
|
||||||
|
|
||||||
|
if (g_config_fn == NULL)
|
||||||
|
{
|
||||||
|
/* if there's an xml named like the custom game dll, it takes priority */
|
||||||
|
char *tmp_name = strdup(g_game_dll_fn);
|
||||||
|
strcpy(tmp_name+strlen(tmp_name)-3, "xml");
|
||||||
|
if (access(tmp_name, F_OK) == 0)
|
||||||
|
g_config_fn = strdup(tmp_name);
|
||||||
|
else
|
||||||
|
g_config_fn = strdup("popnhax.xml");
|
||||||
|
free(tmp_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("popnhax: Game dll: %s\n",g_game_dll_fn);
|
||||||
|
printf("popnhax: config file: %s\n",g_config_fn);
|
||||||
|
|
||||||
|
_load_config(g_config_fn, &config, config_psmap);
|
||||||
|
|
||||||
if (config.unset_volume) {
|
if (config.unset_volume) {
|
||||||
patch_unset_volume();
|
patch_unset_volume();
|
||||||
@ -1987,7 +2038,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
|
|||||||
|
|
||||||
if (config.force_unlocks) {
|
if (config.force_unlocks) {
|
||||||
if (!config.patch_db) {
|
if (!config.patch_db) {
|
||||||
// Only unlock using these methods if it's not done directly through the database hooks
|
/* Only unlock using these methods if it's not done directly through the database hooks */
|
||||||
force_unlock_songs();
|
force_unlock_songs();
|
||||||
force_unlock_charas();
|
force_unlock_charas();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user