Function at 0x18004ff00
Capabilities:
Log keystrokes via polling

Disassembly:
push rbx
sub rsp, 0xc0
mov rax, qword [0x18010d3c0]
xor rax, rsp
mov qword [rsp + 0x68], rax
xor ebx, ebx
cmp byte [0x18014c9cb], bl
je 0x180050044
lea rcx, str.instructional_buttons
call fcn.18001af60
mov ecx, eax
mov dword [0x180149615], eax
call fcn.18001afa0
test eax, eax
je 0x18004ffc1
mov ecx, dword [0x180149615]
call fcn.18001afe0
mov ecx, dword [0x180149615]
lea rdx, str.CLEAR_ALL
call fcn.18001b0a0
call fcn.18001b100
mov ecx, dword [0x180149615]
lea rdx, str.SET_CLEAR_SPACE
call fcn.18001b0a0
mov ecx, 0xc8
call fcn.18001b120
call fcn.18001b100
mov ecx, dword [0x180149615]
lea rdx, str.SET_MAX_WIDTH
call fcn.18001b0a0
movss xmm0, dword [0x1800ffff8]
call fcn.18001b150
call fcn.18001b100
mov ecx, dword [0x180149615]
lea rdx, str.SET_DATA_SLOT_EMPTY
call fcn.18001b0a0
call fcn.18001b100
lea rcx, [0x180149610]
mov byte [0x180149614], 1
call fcn.18001b1e0
cmp byte [0x180149614], bl
je 0x180050044
mov ecx, dword [0x180149615]
call fcn.18001afa0
test eax, eax
je 0x18005003e
mov ecx, dword [0x180149615]
lea rdx, str.DRAW_INSTRUCTIONAL_BUTTONS
call fcn.18001b0a0
call fcn.18001b100
mov ecx, dword [0x180149615]
lea rdx, str.SET_BACKGROUND_COLOUR
call fcn.18001b0a0
xor ecx, ecx
call fcn.18001b120
xor ecx, ecx
call fcn.18001b120
xor ecx, ecx
call fcn.18001b120
mov ecx, 0x50
call fcn.18001b120
call fcn.18001b100
mov dword [0x180149610], ebx
mov byte [0x180149614], bl
call fcn.18004f420
call fcn.18004f000
call fcn.18004f150
cmp dword [0x180149adf], ebx
je 0x180050337
cmp byte [0x180149920], bl
je 0x180050337
movss xmm0, dword [0x180149925]
movaps xmmword [rsp + 0xb0], xmm6
movaps xmmword [rsp + 0xa0], xmm7
movaps xmmword [rsp + 0x90], xmm8
movaps xmmword [rsp + 0x80], xmm9
movaps xmmword [rsp + 0x70], xmm10
movss dword [0x180149929], xmm0
call fcn.180050440
mov rdx, qword [0x18014c9cc]
call fcn.180050730
mov ecx, 1
call fcn.18004f180
movss xmm4, dword [0x180149931]
mov eax, dword [0x180149acf]
movaps xmm2, xmm4
cmp dword [0x180149ad3], eax
mov rdx, qword [0x1801499ee]
cmovle eax, dword [0x180149ad3]
mov r8, qword [0x1801499e6]
movss xmm1, dword [0x180149945]
mov rcx, r8
addss xmm1, dword [0x1801499ae]
movss xmm9, dword [0x1800fffd8]
mulss xmm2, dword [0x180149935]
shr rcx, 0x20
movd xmm0, eax
mov rax, rdx
addss xmm1, dword [0x180149925]
cvtdq2ps xmm0, xmm0
shr rax, 0x20
mov dword [rsp + 0x38], eax
mov dword [rsp + 0x30], edx
mov dword [rsp + 0x28], ecx
mov dword [rsp + 0x20], r8d
mulss xmm0, dword [0x1801499da]
movaps xmm3, xmm0
mulss xmm0, xmm9
mulss xmm3, xmm4
addss xmm1, xmm0
mulss xmm1, xmm4
mulss xmm4, dword [0x180149921]
movaps xmm0, xmm4
call fcn.18004f030
mov ecx, 3
mov dword [0x180149ad3], ebx
call fcn.18004f180
call qword [0x18014aa83]
mov eax, dword [0x180149ad7]
lea rbx, str.shop_arrows_upanddown
movss xmm6, dword [0x180149a7b]
xorps xmm8, xmm8
cmp eax, 1
jne 0x1800501a4
movss xmm8, dword [0x18010009c]
jmp 0x1800501b5
cmp eax, dword [0x180149ad3]
jne 0x1800501c4
movss xmm8, dword [0x1801000bc]
mulss xmm6, dword [0x1800fffe0]
lea rbx, str.arrowright
lea rdx, [rsp + 0x60]
lea rcx, [rsp + 0x64]
call fcn.18004f1b0
movss xmm1, dword [0x180149a77]
movd xmm0, dword [rsp + 0x64]
mov rdx, qword [0x180149a87]
mov r8, qword [0x180149a7f]
mov rax, rdx
movd xmm7, dword [rsp + 0x60]
mov rcx, r8
cvtdq2ps xmm0, xmm0
shr rax, 0x20
mov dword [rsp + 0x38], eax
mov dword [rsp + 0x30], edx
shr rcx, 0x20
cvtdq2ps xmm7, xmm7
mov dword [rsp + 0x28], ecx
mov dword [rsp + 0x20], r8d
divss xmm7, xmm0
movss xmm0, dword [0x180149931]
movaps xmm3, xmm0
mulss xmm7, xmm6
mulss xmm3, xmm1
movaps xmm2, xmm0
mulss xmm2, dword [0x180149935]
mulss xmm1, xmm9
addss xmm1, dword [0x180149929]
mulss xmm1, xmm0
mulss xmm0, dword [0x180149921]
call fcn.18004f030
movss xmm10, dword [0x180149a77]
lea rcx, str.commonmenu
mulss xmm10, xmm9
movss xmm9, dword [0x180149921]
addss xmm10, dword [0x180149929]
call fcn.18001c360
lea rcx, str.commonmenu
test eax, eax
je 0x1800502f2
movss xmm0, dword [0x180149931]
mov rdx, rbx
mov dword [rsp + 0x50], 0xff
movaps xmm1, xmm0
mov dword [rsp + 0x48], 0xff
movaps xmm3, xmm0
mov dword [rsp + 0x40], 0xff
mov dword [rsp + 0x38], 0xff
movss dword [rsp + 0x30], xmm8
mulss xmm1, xmm6
mulss xmm9, xmm0
mulss xmm7, xmm0
movss dword [rsp + 0x28], xmm1
movaps xmm2, xmm9
mulss xmm3, xmm10
movss dword [rsp + 0x20], xmm7
call fcn.18001c3a0
jmp 0x1800502f7
call fcn.18001c310
movss xmm0, dword [0x180149929]
addss xmm0, dword [0x180149a77]
movaps xmm10, xmmword [rsp + 0x70]
movaps xmm9, xmmword [rsp + 0x80]
movaps xmm8, xmmword [rsp + 0x90]
movaps xmm7, xmmword [rsp + 0xa0]
movaps xmm6, xmmword [rsp + 0xb0]
movss dword [0x180149929], xmm0
mov rbx, qword [0x180149a26]
mov rbx, qword [rbx]
cmp byte [rbx + 0x19], 0
jne 0x180050409
mov qword [rsp + 0xd0], rsi
mov qword [rsp + 0xd8], rdi
nop dword [rax + rax]
mov esi, dword [rbx + 0x20]
mov rdi, qword [rbx + 0x28]
call qword [sym.imp.KERNEL32.dll_GetTickCount64]
movsxd rdx, dword [0x18014e926]
sub rax, rdx
movsxd rdx, dword [0x18014e922]
cmp rax, rdx
jbe 0x1800503a4
mov ecx, esi
call qword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jns 0x1800503a4
cmp byte [rdi], 0
sete al
mov byte [rdi], al
call qword [sym.imp.KERNEL32.dll_GetTickCount64]
mov dword [0x18014e926], eax
mov rax, qword [rbx + 0x10]
cmp byte [rax + 0x19], 0
je 0x1800503d0
mov rax, qword [rbx + 8]
cmp byte [rax + 0x19], 0
jne 0x1800503cb
cmp rbx, qword [rax + 0x10]
jne 0x1800503cb
mov rbx, rax
mov rax, qword [rax + 8]
cmp byte [rax + 0x19], 0
je 0x1800503b8
mov rbx, rax
jmp 0x1800503ef
mov rcx, qword [rax]
mov rbx, rax
cmp byte [rcx + 0x19], 0
jne 0x1800503ef
nop dword [rax]
mov rax, qword [rcx]
mov rbx, rcx
mov rcx, rax
cmp byte [rax + 0x19], 0
je 0x1800503e0
cmp byte [rbx + 0x19], 0
je 0x180050360
mov rdi, qword [rsp + 0xd8]
mov rsi, qword [rsp + 0xd0]
mov dword [0x18014e91c], 0
mov word [0x18014e920], 0
mov rcx, qword [rsp + 0x68]
xor rcx, rsp
call fcn.180059b80
add rsp, 0xc0
pop rbx
ret