forked from Popn_Tools/popnhax
debounce
This commit is contained in:
parent
17e536a090
commit
3fc1a0a7e0
2
dist/popnhax/popnhax.xml
vendored
2
dist/popnhax/popnhax.xml
vendored
@ -73,6 +73,8 @@
|
|||||||
<fps_uncap __type="bool">0</fps_uncap>
|
<fps_uncap __type="bool">0</fps_uncap>
|
||||||
<!-- 1000Hz polling rate (no more shifting timing windows/magic bpm, consistent scoring independently of framerate) -->
|
<!-- 1000Hz polling rate (no more shifting timing windows/magic bpm, consistent scoring independently of framerate) -->
|
||||||
<enhanced_polling __type="bool">0</enhanced_polling>
|
<enhanced_polling __type="bool">0</enhanced_polling>
|
||||||
|
<!-- button release debounce time in ms (for enhanced_polling only) -->
|
||||||
|
<debounce __type="u8">5</debounce>
|
||||||
|
|
||||||
<!-- Song db patches -->
|
<!-- Song db patches -->
|
||||||
<!-- Force the newly created buffers to be the same size as the original buffers -->
|
<!-- Force the newly created buffers to be the same size as the original buffers -->
|
||||||
|
@ -37,6 +37,7 @@ struct popnhax_config {
|
|||||||
bool disable_translation;
|
bool disable_translation;
|
||||||
bool translation_debug;
|
bool translation_debug;
|
||||||
bool enhanced_polling;
|
bool enhanced_polling;
|
||||||
|
uint8_t debounce;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -151,6 +151,8 @@ PSMAP_MEMBER_REQ(PSMAP_PROPERTY_TYPE_BOOL, struct popnhax_config, translation_de
|
|||||||
"/popnhax/translation_debug")
|
"/popnhax/translation_debug")
|
||||||
PSMAP_MEMBER_REQ(PSMAP_PROPERTY_TYPE_BOOL, struct popnhax_config, enhanced_polling,
|
PSMAP_MEMBER_REQ(PSMAP_PROPERTY_TYPE_BOOL, struct popnhax_config, enhanced_polling,
|
||||||
"/popnhax/enhanced_polling")
|
"/popnhax/enhanced_polling")
|
||||||
|
PSMAP_MEMBER_REQ(PSMAP_PROPERTY_TYPE_U8, struct popnhax_config, debounce,
|
||||||
|
"/popnhax/debounce")
|
||||||
PSMAP_END
|
PSMAP_END
|
||||||
|
|
||||||
enum BufferIndexes {
|
enum BufferIndexes {
|
||||||
@ -1915,6 +1917,7 @@ FILE *debug_fp;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint32_t g_last_button_state = 0;
|
uint32_t g_last_button_state = 0;
|
||||||
|
uint8_t g_debounce = 0;
|
||||||
int32_t g_button_state[9] = {0};
|
int32_t g_button_state[9] = {0};
|
||||||
static unsigned int __stdcall enhanced_polling_proc(void *ctx)
|
static unsigned int __stdcall enhanced_polling_proc(void *ctx)
|
||||||
{
|
{
|
||||||
@ -1978,7 +1981,7 @@ static unsigned int __stdcall enhanced_polling_proc(void *ctx)
|
|||||||
{
|
{
|
||||||
g_button_state[i] = curr_time;
|
g_button_state[i] = curr_time;
|
||||||
}
|
}
|
||||||
button_debounce[i] = 5; // 5ms of debounce on release (since we're forced to stub usbPadReadLast)
|
button_debounce[i] = g_debounce; //debounce on release (since we're forced to stub usbPadReadLast)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1988,7 +1991,13 @@ static unsigned int __stdcall enhanced_polling_proc(void *ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (button_debounce[i] == 0)
|
if (button_debounce[i] == 0)
|
||||||
|
{
|
||||||
g_button_state[i] = -1;
|
g_button_state[i] = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_last_button_state |= 1<<(8+i); //debounce period still running: button is still pressed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if DEBUG >= 1
|
#if DEBUG >= 1
|
||||||
@ -2058,8 +2067,10 @@ void patch_enhanced_poll() {
|
|||||||
|
|
||||||
static HANDLE enhanced_polling_thread;
|
static HANDLE enhanced_polling_thread;
|
||||||
|
|
||||||
static bool patch_enhanced_polling()
|
static bool patch_enhanced_polling(uint8_t debounce)
|
||||||
{
|
{
|
||||||
|
g_debounce = debounce;
|
||||||
|
|
||||||
if (enhanced_polling_thread == NULL) {
|
if (enhanced_polling_thread == NULL) {
|
||||||
enhanced_polling_thread = (HANDLE) _beginthreadex(
|
enhanced_polling_thread = (HANDLE) _beginthreadex(
|
||||||
NULL,
|
NULL,
|
||||||
@ -2092,18 +2103,17 @@ static bool patch_enhanced_polling()
|
|||||||
{
|
{
|
||||||
int64_t pattern_offset = search(data, dllSize, "\x83\xC4\x04\x5D\xC3\xCC\xCC", 7, 0);
|
int64_t pattern_offset = search(data, dllSize, "\x83\xC4\x04\x5D\xC3\xCC\xCC", 7, 0);
|
||||||
if (pattern_offset == -1) {
|
if (pattern_offset == -1) {
|
||||||
LOG("popnhax: enhanced polling: cannot find usbPadRead call (1st occ)\n");
|
LOG("popnhax: enhanced polling: cannot find usbPadRead call (1)\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
pattern_offset = search(data, dllSize-pattern_offset-1, "\x83\xC4\x04\x5D\xC3\xCC\xCC", 7, pattern_offset+1);
|
pattern_offset = search(data, dllSize-pattern_offset-1, "\x83\xC4\x04\x5D\xC3\xCC\xCC", 7, pattern_offset+1);
|
||||||
if (pattern_offset == -1) {
|
if (pattern_offset == -1) {
|
||||||
LOG("popnhax: enhanced polling: cannot find usbPadRead call (2nd occ)\n");
|
LOG("popnhax: enhanced polling: cannot find usbPadRead call (2)\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
usbPadReadHook_addr = (uint32_t)&usbPadReadHook;
|
usbPadReadHook_addr = (uint32_t)&usbPadReadHook;
|
||||||
void *addr = (void *)&usbPadReadHook_addr;
|
void *addr = (void *)&usbPadReadHook_addr;
|
||||||
uint32_t as_int = (uint32_t)addr;
|
uint32_t as_int = (uint32_t)addr;
|
||||||
LOG("usbPadReadHook address is %x (and pointer to it at %p, %x)\n", usbPadReadHook_addr, &usbPadReadHook_addr, as_int);
|
|
||||||
|
|
||||||
uint64_t patch_addr = (int64_t)data + pattern_offset - 0x04; // usbPadRead function address
|
uint64_t patch_addr = (int64_t)data + pattern_offset - 0x04; // usbPadRead function address
|
||||||
patch_memory(patch_addr, (char*)&as_int, 4); // game will call usbPadReadHook instead of real usbPadRead
|
patch_memory(patch_addr, (char*)&as_int, 4); // game will call usbPadReadHook instead of real usbPadRead
|
||||||
@ -2113,7 +2123,11 @@ static bool patch_enhanced_polling()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG("popnhax: enhanced polling enabled\n");
|
LOG("popnhax: enhanced polling enabled");
|
||||||
|
if (g_debounce != 0)
|
||||||
|
LOG(" (%u ms debounce)", g_debounce);
|
||||||
|
LOG("\n");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3366,7 +3380,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
|
|||||||
patch_fps_uncap();
|
patch_fps_uncap();
|
||||||
|
|
||||||
if (config.enhanced_polling)
|
if (config.enhanced_polling)
|
||||||
patch_enhanced_polling();
|
patch_enhanced_polling(config.debounce);
|
||||||
|
|
||||||
#if DEBUG == 1
|
#if DEBUG == 1
|
||||||
patch_get_time();
|
patch_get_time();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user