From a4f69f6ca383059fba6c653adc87875874ba2f48 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Fri, 23 Feb 2024 22:46:38 -0800 Subject: [PATCH] add xbox movement patch --- system/client-functions/Movement.4OED.patch.s | 15 +++++++ system/client-functions/Movement.4OEU.patch.s | 15 +++++++ system/client-functions/Movement.4OJB.patch.s | 15 +++++++ system/client-functions/Movement.4OJD.patch.s | 15 +++++++ system/client-functions/Movement.4OJU.patch.s | 15 +++++++ system/client-functions/Movement.4OPD.patch.s | 15 +++++++ system/client-functions/Movement.4OPU.patch.s | 15 +++++++ system/client-functions/MovementXB.x86.inc.s | 39 +++++++++++++++++++ 8 files changed, 144 insertions(+) create mode 100644 system/client-functions/Movement.4OED.patch.s create mode 100644 system/client-functions/Movement.4OEU.patch.s create mode 100644 system/client-functions/Movement.4OJB.patch.s create mode 100644 system/client-functions/Movement.4OJD.patch.s create mode 100644 system/client-functions/Movement.4OJU.patch.s create mode 100644 system/client-functions/Movement.4OPD.patch.s create mode 100644 system/client-functions/Movement.4OPU.patch.s create mode 100644 system/client-functions/MovementXB.x86.inc.s diff --git a/system/client-functions/Movement.4OED.patch.s b/system/client-functions/Movement.4OED.patch.s new file mode 100644 index 00000000..6ddfc572 --- /dev/null +++ b/system/client-functions/Movement.4OED.patch.s @@ -0,0 +1,15 @@ +.meta name="Movement" +.meta description="Fix movement dead\nzone thresholds" + +entry_ptr: +reloc0: + .offsetof start +start: + .include WriteCodeBlocksXB + + .data 0x00308E88 + .deltaof code_start, code_end + +code_start: + .include MovementXB +code_end: diff --git a/system/client-functions/Movement.4OEU.patch.s b/system/client-functions/Movement.4OEU.patch.s new file mode 100644 index 00000000..1f1b8e7f --- /dev/null +++ b/system/client-functions/Movement.4OEU.patch.s @@ -0,0 +1,15 @@ +.meta name="Movement" +.meta description="Fix movement dead\nzone thresholds" + +entry_ptr: +reloc0: + .offsetof start +start: + .include WriteCodeBlocksXB + + .data 0x00308F08 + .deltaof code_start, code_end + +code_start: + .include MovementXB +code_end: diff --git a/system/client-functions/Movement.4OJB.patch.s b/system/client-functions/Movement.4OJB.patch.s new file mode 100644 index 00000000..72d1bf53 --- /dev/null +++ b/system/client-functions/Movement.4OJB.patch.s @@ -0,0 +1,15 @@ +.meta name="Movement" +.meta description="Fix movement dead\nzone thresholds" + +entry_ptr: +reloc0: + .offsetof start +start: + .include WriteCodeBlocksXB + + .data 0x003067D8 + .deltaof code_start, code_end + +code_start: + .include MovementXB +code_end: diff --git a/system/client-functions/Movement.4OJD.patch.s b/system/client-functions/Movement.4OJD.patch.s new file mode 100644 index 00000000..12fb5529 --- /dev/null +++ b/system/client-functions/Movement.4OJD.patch.s @@ -0,0 +1,15 @@ +.meta name="Movement" +.meta description="Fix movement dead\nzone thresholds" + +entry_ptr: +reloc0: + .offsetof start +start: + .include WriteCodeBlocksXB + + .data 0x003073D8 + .deltaof code_start, code_end + +code_start: + .include MovementXB +code_end: diff --git a/system/client-functions/Movement.4OJU.patch.s b/system/client-functions/Movement.4OJU.patch.s new file mode 100644 index 00000000..1f1b8e7f --- /dev/null +++ b/system/client-functions/Movement.4OJU.patch.s @@ -0,0 +1,15 @@ +.meta name="Movement" +.meta description="Fix movement dead\nzone thresholds" + +entry_ptr: +reloc0: + .offsetof start +start: + .include WriteCodeBlocksXB + + .data 0x00308F08 + .deltaof code_start, code_end + +code_start: + .include MovementXB +code_end: diff --git a/system/client-functions/Movement.4OPD.patch.s b/system/client-functions/Movement.4OPD.patch.s new file mode 100644 index 00000000..061311c9 --- /dev/null +++ b/system/client-functions/Movement.4OPD.patch.s @@ -0,0 +1,15 @@ +.meta name="Movement" +.meta description="Fix movement dead\nzone thresholds" + +entry_ptr: +reloc0: + .offsetof start +start: + .include WriteCodeBlocksXB + + .data 0x00309078 + .deltaof code_start, code_end + +code_start: + .include MovementXB +code_end: diff --git a/system/client-functions/Movement.4OPU.patch.s b/system/client-functions/Movement.4OPU.patch.s new file mode 100644 index 00000000..081a9b8b --- /dev/null +++ b/system/client-functions/Movement.4OPU.patch.s @@ -0,0 +1,15 @@ +.meta name="Movement" +.meta description="Fix movement dead\nzone thresholds" + +entry_ptr: +reloc0: + .offsetof start +start: + .include WriteCodeBlocksXB + + .data 0x00308EB8 + .deltaof code_start, code_end + +code_start: + .include MovementXB +code_end: diff --git a/system/client-functions/MovementXB.x86.inc.s b/system/client-functions/MovementXB.x86.inc.s new file mode 100644 index 00000000..748716f1 --- /dev/null +++ b/system/client-functions/MovementXB.x86.inc.s @@ -0,0 +1,39 @@ +start: + call process_stick_value + push esi + sub esi, 4 + call process_stick_value + pop esi + jmp end + +process_stick_value: + mov ax, [esp + 0x3C] # ax = stick val y + cwd # dx = FFFF if y < 0 else 0000 + xor dh, dh # dx = 00FF if y < 0 else 0000 + add ax, dx # adjust ax if y negative else don't + sar ax, 8 # eax = ----Y1Y2 + neg ax + shl eax, 16 # eax = Y1Y2----- + + mov ax, [esp + 0x3A] # ax = stick val x + cwd # dx = FFFF if x < 0 else 0000 + xor dh, dh # dx = 00FF if x < 0 else 0000 + add ax, dx # adjust ax if x negative else don't + sar ax, 8 # eax = Y1Y2X1X2 + + # check for deadzone - if either value is outside of deadzone, allow movement + xor ecx, ecx # ecx = 0 + lea edx, [eax + 0x28] # edx = eax + 0x28 (deadzone range is -0x28 through 0x28) + cmp dl, 0x50 + cmova ecx, eax # if X2 out of deadzone range, use eax + mov edx, eax + bswap edx # dh = Y2 + lea edx, [edx + 0x2800] # dh = Y2 = 0x28 + cmp dh, 0x50 + cmova ecx, eax # if Y2 out of deadzone range, use eax + + mov [esi + 0x18], ecx # set processed stick values + ret + + .zero 0x53 +end: