Function at 0x180002880
Capabilities:
Check for time delay via gettickcount
Log keystrokes via polling
Print debug messages

Disassembly:
mov qword [rsp + 8], rcx
push rbx
push rbp
push rsi
push rdi
push r14
sub rsp, 0x90
mov qword [rsp + 0x58], 0xfffffffffffffffe
mov rbp, rdx
mov dword [0x180023ce4], 1
mov r8, qword [0x180023cf0]
mov rbx, r8
mov rax, qword [r8 + 8]
cmp byte [rax + 0x19], 0
jne 0x1800028d8
nop dword [rax]
cmp qword [rax + 0x20], rcx
jae 0x1800028cc
mov rax, qword [rax + 0x10]
jmp 0x1800028d2
mov rbx, rax
mov rax, qword [rax]
cmp byte [rax + 0x19], 0
je 0x1800028c0
mov qword [rsp + 0x60], rbx
mov qword [rsp + 0x68], r8
cmp rbx, r8
je 0x1800028ed
cmp rcx, qword [rbx + 0x20]
jae 0x180002925
lea rax, [rsp + 0xc0]
mov qword [rsp + 0xd8], rax
lea r8, [rsp + 0xd8]
call fcn.180003ca0
lea r9, [rax + 0x20]
mov qword [rsp + 0x20], rax
mov r8, rbx
lea rdx, [rsp + 0x40]
call fcn.180003cd0
mov rbx, qword [rsp + 0x40]
mov rsi, qword [rbx + 0x28]
xor r14d, r14d
test rsi, rsi
jne 0x180002a30
lea ecx, [rsi + 0x68]
call fcn.180004a08
mov rsi, rax
mov qword [rsp + 0x70], rax
mov rdi, qword [rsp + 0xc0]
mov qword [rax + 0x18], r14
mov qword [rax + 0x2c], r14
mov qword [rax + 0x34], r14
mov r8, qword [rdi]
mov rcx, rdi
call qword [r8 + 8]
mov qword [rsi + 0x60], rdi
mov qword [rsi], rbp
mov qword [rsi + 8], r14
mov dword [rsi + 0x10], r14d
mov rax, qword [rbp + 0x434]
add rax, rbp
mov qword [rsi + 0x20], rax
mov rcx, rsi
call fcn.180001560
lea rdx, [rsi + 0x18]
mov rcx, rdi
call qword [sym.imp.d3dx9_43.dll_D3DXCreateSprite]
test eax, eax
jns 0x1800029a7
lea rcx, str.D3DXCreateSprite_FAILED
call qword [sym.imp.KERNEL32.dll_OutputDebugStringA]
nop
mov rdx, qword [0x180023cf0]
mov rbx, rdx
mov rax, qword [rdx + 8]
mov rcx, qword [rsp + 0xc0]
cmp byte [rax + 0x19], 0
jne 0x1800029db
cmp qword [rax + 0x20], rcx
jae 0x1800029cf
mov rax, qword [rax + 0x10]
jmp 0x1800029d5
mov rbx, rax
mov rax, qword [rax]
cmp byte [rax + 0x19], 0
je 0x1800029c3
mov qword [rsp + 0x78], rbx
mov qword [rsp + 0x80], rdx
cmp rbx, rdx
je 0x1800029f3
cmp rcx, qword [rbx + 0x20]
jae 0x180002a25
lea rax, [rsp + 0xc0]
mov qword [rsp + 0x48], rax
lea r8, [rsp + 0x48]
call fcn.180003ca0
lea r9, [rax + 0x20]
mov qword [rsp + 0x20], rax
mov r8, rbx
lea rdx, [rsp + 0x50]
call fcn.180003cd0
mov rbx, qword [rsp + 0x50]
mov qword [rbx + 0x28], rsi
mov qword [0x180023ce8], rbp
mov rcx, rsi
call fcn.180001ee0
mov dword [0x180023ce4], r14d
cmp dword [rsi + 0x34], 0
je 0x180002a6d
mov eax, dword [rsi + 0x2c]
mov rcx, qword [0x180023ce8]
mov dword [rcx + 0x468], eax
mov dword [rcx + 0x478], r14d
mov rcx, qword [rcx + 0x45c]
call qword [sym.imp.KERNEL32.dll_SetEvent]
mov dword [rsi + 0x34], r14d
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x478]
test ecx, ecx
je 0x180002c2e
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x454]
mov ebx, 0xffff8001
test ecx, ecx
je 0x180002adc
call qword [sym.imp.KERNEL32.dll_GetTickCount]
mov ecx, dword [rsi + 0x30]
add ecx, 0xfa
cmp eax, ecx
jbe 0x180002adc
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x454]
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
and ax, bx
mov ecx, r14d
setne cl
mov dword [rsi + 0x34], ecx
mov dword [rsi + 0x38], r14d
test ax, ax
je 0x180002adc
call qword [sym.imp.KERNEL32.dll_GetTickCount]
mov dword [rsi + 0x30], eax
cmp dword [rsi + 0x34], 0
jne 0x180002bed
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x458]
test ecx, ecx
je 0x180002be7
call qword [sym.imp.KERNEL32.dll_GetTickCount]
mov ecx, dword [rsi + 0x30]
add ecx, 0xfa
cmp eax, ecx
jbe 0x180002be7
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x428]
test ecx, ecx
je 0x180002be7
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x458]
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
and ax, bx
mov ecx, r14d
setne cl
mov dword [rsi + 0x34], ecx
test ax, ax
je 0x180002be7
mov dword [rsi + 0x38], 1
call qword [sym.imp.KERNEL32.dll_GetTickCount]
mov dword [rsi + 0x30], eax
lea rcx, [rsp + 0xd0]
call qword [sym.imp.USER32.dll_GetCursorPos]
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x428]
lea rdx, [rsp + 0xd0]
call qword [sym.imp.USER32.dll_ScreenToClient]
mov rax, qword [rsp + 0xd0]
mov qword [rsi + 0x3c], rax
mov rax, qword [0x180023ce8]
mov ecx, dword [rax + 0x428]
lea rdx, [rsi + 0x4c]
call qword [sym.imp.USER32.dll_GetClientRect]
movd xmm1, dword [rsi + 0x3c]
cvtdq2ps xmm1, xmm1
mov eax, dword [rsi + 0x54]
sub eax, dword [rsi + 0x4c]
movd xmm0, eax
cvtdq2ps xmm0, xmm0
divss xmm1, xmm0
movss dword [rsi + 0x44], xmm1
movd xmm2, dword [rsi + 0x40]
cvtdq2ps xmm2, xmm2
mov eax, dword [rsi + 0x58]
sub eax, dword [rsi + 0x50]
movd xmm0, eax
cvtdq2ps xmm0, xmm0
divss xmm2, xmm0
movss dword [rsi + 0x48], xmm2
cmp dword [rsi + 0x34], 0
je 0x180002c2e
mov dword [0x180023ce0], 1
mov rcx, qword [rsi + 0x60]
mov rax, qword [rcx]
mov dword [rsp + 0x30], r14d
movss xmm0, dword [0x18001f2c4]
movss dword [rsp + 0x28], xmm0
mov dword [rsp + 0x20], 0xffff00ff
mov r9d, 1
xor r8d, r8d
xor edx, edx
call qword [rax + 0x158]
mov dword [rsi + 0x2c], r14d
add rsp, 0x90
pop r14
pop rdi
pop rsi
pop rbp
pop rbx
ret