Function at 0x5897d0
Capabilities:
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x1a8
push ebx
push ebp
mov ebp, ecx
cmp dword [ebp + 0x5c], 0
push esi
push edi
mov dword [esp + 0x34], ebp
je 0x5897ff
push 0
push 0x111
push str..Sourced3dFont.cpp
push 0x6a4ae8
call fcn.00581780
add esp, 0x10
call dword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
cmp dword [0x75e7fc], eax
je 0x589826
push 0
push 0x113
push str..Sourced3dFont.cpp
push str.gMainThreadID__GetCurrentThreadId__
call fcn.00581780
add esp, 0x10
mov eax, dword [esp + 0x1bc]
mov ecx, dword [esp + 0x1c4]
lea edx, [eax + ecx + 4]
mov eax, dword [esp + 0x1c0]
mov ecx, dword [esp + 0x1c8]
mov dword [esp + 0x1c], edx
lea edx, [eax + ecx + 4]
push 0
mov dword [esp + 0x34], edx
call dword [sym.imp.GDI32.dll_CreateCompatibleDC]
mov esi, eax
lea esp, [esp]
mov eax, dword [ebp + 0x58]
fild dword [ebp + 0x54]
movzx ecx, byte [ebp + 0x58]
shr eax, 1
and eax, 1
push eax
mov eax, dword [ebp + 0x54]
and ecx, 1
push ecx
test eax, eax
jge 0x589881
fadd dword [0x6c644c]
fmul dword [ebp + 0x60]
call fcn.005ff7d0
push eax
lea eax, [ebp + 4]
push eax
push esi
call fcn.00589620
add esp, 0x14
push eax
push esi
mov dword [esp + 0x40], eax
call dword [sym.imp.GDI32.dll_SelectObject]
mov ecx, 0x78
xor edi, edi
mov word [esp + 0x24], cx
xor ebx, ebx
lea eax, [esp + 0x54]
push eax
push 1
lea ecx, [esp + 0x2c]
mov dl, bl
push ecx
add dl, 0x20
push esi
mov byte [esp + 0x34], dl
call dword [sym.imp.GDI32.dll_GetTextExtentPoint32A]
mov eax, dword [esp + 0x30]
mov edx, dword [esp + 0x58]
mov ecx, dword [esp + 0x54]
add edx, eax
mov eax, dword [esp + 0x1c]
add ecx, eax
imul edx, ecx
inc ebx
add edi, edx
cmp ebx, 0x5f
jl 0x5898b1
mov ecx, edi
mov dword [esp + 0x14], ecx
fild dword [esp + 0x14]
test ecx, ecx
jge 0x589900
fadd dword [0x6c644c]
fmul dword [0x6a4ae4]
fsqrt
call fcn.005ff7d0
push eax
call fcn.005895d0
mov ecx, dword [0x759ca4]
mov ebx, eax
add esp, 4
add ecx, 0x50
mov dword [esp + 0x18], ebx
mov dword [esp + 0x20], ebx
call fcn.00583ef0
mov edx, dword [eax]
mov edx, dword [edx + 0x1c]
lea ecx, [esp + 0x88]
push ecx
push eax
call edx
mov eax, dword [esp + 0xe0]
cmp ebx, eax
jbe 0x589982
mov dword [esp + 0x14], eax
fild dword [esp + 0x14]
test eax, eax
jge 0x58995b
fadd dword [0x6c644c]
mov dword [esp + 0x14], ebx
fild dword [esp + 0x14]
test ebx, ebx
jge 0x58996d
fadd dword [0x6c644c]
fdivp st(1)
mov eax, dword [esp + 0x38]
push eax
fstp dword [ebp + 0x60]
call dword [sym.imp.GDI32.dll_DeleteObject]
jmp 0x589860
cmp ebx, 0x400
jbe 0x5899b5
mov dword [esp + 0x14], ebx
fild dword [esp + 0x14]
test ebx, ebx
jge 0x58999c
fadd dword [0x6c644c]
fdivr dword [0x6a4ae0]
mov ecx, dword [esp + 0x38]
push ecx
fstp dword [ebp + 0x60]
call dword [sym.imp.GDI32.dll_DeleteObject]
jmp 0x589860
mov eax, ebx
shr eax, 1
mov edx, eax
imul edx, ebx
cmp edx, edi
jbe 0x5899c6
mov dword [esp + 0x20], eax
mov ebp, dword [esp + 0x20]
mov eax, ebp
imul eax, ebx
cmp edi, eax
jb 0x5899ec
push 0
push 0x158
push str..Sourced3dFont.cpp
push str.numpix___m_dwTexWidth__m_dwTexHeight
call fcn.00581780
add esp, 0x10
push 0xffffff
push esi
call dword [sym.imp.GDI32.dll_SetTextColor]
push 0
push esi
call dword [sym.imp.GDI32.dll_SetBkColor]
push 0
push esi
call dword [sym.imp.GDI32.dll_SetTextAlign]
push 0
pxor xmm0, xmm0
push 0
movq qword [esp + 0x6c], xmm0
lea eax, [esp + 0x50]
push eax
mov ecx, 1
mov word [esp + 0x74], cx
push 0
lea ecx, [esp + 0x6c]
push ecx
movq qword [esp + 0x70], xmm0
mov edx, 0x20
movq qword [esp + 0x80], xmm0
neg ebp
push esi
movq qword [esp + 0x8c], xmm0
movq qword [esp + 0x94], xmm0
mov dword [esp + 0x74], 0x28
mov dword [esp + 0x78], ebx
mov dword [esp + 0x7c], ebp
mov dword [esp + 0x84], 0
mov word [esp + 0x82], dx
call dword [sym.imp.GDI32.dll_CreateDIBSection]
mov edi, dword [sym.imp.GDI32.dll_SelectObject]
push eax
push esi
mov dword [esp + 0x58], eax
call edi
push 1
push esi
call dword [sym.imp.GDI32.dll_SetMapMode]
push 0xff0000
push 1
push 0
call dword [sym.imp.GDI32.dll_CreatePen]
push eax
push esi
mov dword [esp + 0x1c], eax
call edi
xor edi, edi
xor ebp, ebp
mov edx, 0x78
mov dword [esp + 0x40], ebx
fild dword [esp + 0x40]
mov word [esp + 0x10], dx
mov dword [esp + 0x3c], edi
test ebx, ebx
jge 0x589ad2
fadd dword [0x6c644c]
mov eax, dword [esp + 0x20]
fstp dword [esp + 0x4c]
fild dword [esp + 0x20]
test eax, eax
jge 0x589ae8
fadd dword [0x6c644c]
mov ebx, dword [esp + 0x34]
fstp dword [esp + 0x40]
add ebx, 0x68
mov cl, byte [esp + 0x3c]
lea edx, [esp + 0x28]
push edx
push 1
lea eax, [esp + 0x18]
push eax
add cl, 0x20
push esi
mov byte [esp + 0x20], cl
call dword [sym.imp.GDI32.dll_GetTextExtentPoint32A]
mov ecx, dword [esp + 0x28]
add ecx, edi
add ecx, dword [esp + 0x1c]
cmp ecx, dword [esp + 0x18]
jb 0x589b4d
mov edx, dword [esp + 0x2c]
mov eax, dword [esp + 0x30]
add edx, eax
add ebp, edx
xor edi, edi
cmp ebp, dword [esp + 0x20]
jb 0x589b4d
push edi
push 0x181
push str..Sourced3dFont.cpp
push str.y___m_dwTexHeight
call fcn.00581780
add esp, 0x10
mov edx, dword [esp + 0x1c0]
push 0
push 1
lea ecx, [esp + 0x18]
push ecx
mov ecx, dword [esp + 0x1c8]
push 0
push 2
lea eax, [edx + ebp + 2]
push eax
lea edx, [edi + ecx + 2]
push edx
push esi
call dword [sym.imp.GDI32.dll_ExtTextOutA]
mov edx, dword [esp + 0x28]
movss xmm0, dword [esp + 0x4c]
lea eax, [edi + 2]
cvtsi2ss xmm1, eax
add eax, edx
add eax, dword [esp + 0x1bc]
divss xmm1, xmm0
add eax, dword [esp + 0x1c4]
lea ecx, [ebp + 2]
cvtsi2ss xmm2, ecx
movss dword [ebx - 4], xmm1
movss xmm1, dword [esp + 0x40]
divss xmm2, xmm1
movss dword [ebx], xmm2
cvtsi2ss xmm2, eax
mov eax, dword [esp + 0x2c]
add ecx, eax
add ecx, dword [esp + 0x1c0]
push 0
add ecx, dword [esp + 0x1cc]
push ebp
divss xmm2, xmm0
push edi
cvtsi2ss xmm0, ecx
divss xmm0, xmm1
push esi
movss dword [ebx + 4], xmm2
movss dword [ebx + 8], xmm0
call dword [sym.imp.GDI32.dll_MoveToEx]
mov ecx, dword [esp + 0x28]
add ecx, edi
add ecx, dword [esp + 0x1c]
push ebp
push ecx
push esi
call dword [sym.imp.GDI32.dll_LineTo]
mov edx, dword [esp + 0x2c]
mov eax, dword [esp + 0x28]
add edx, ebp
add edx, dword [esp + 0x30]
add eax, edi
add eax, dword [esp + 0x1c]
push edx
push eax
push esi
call dword [sym.imp.GDI32.dll_LineTo]
mov ecx, dword [esp + 0x2c]
add ecx, ebp
add ecx, dword [esp + 0x30]
push ecx
push edi
push esi
call dword [sym.imp.GDI32.dll_LineTo]
push ebp
push edi
push esi
call dword [sym.imp.GDI32.dll_LineTo]
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0x28]
add edx, eax
mov eax, dword [esp + 0x3c]
inc eax
add edi, edx
add ebx, 0x10
cmp eax, 0x5f
mov dword [esp + 0x3c], eax
jl 0x589af3
mov ecx, dword [0x759ca4]
call fcn.00593840
mov ebx, dword [esp + 0x20]
mov ebp, dword [esp + 0x18]
mov edi, dword [esp + 0x34]
push 1
push 1
push 0x15
push ebx
push ebp
mov ecx, eax
mov dword [edi + 0x5c], eax
call fcn.005954f0
mov edi, dword [edi + 0x5c]
mov ecx, dword [edi + 0x3c]
cmp dword [ecx], 0
jne 0x589ca8
push 0
push 0x4d
push str.c:warz_srceternityinclude_r3dTex.h
push str.m_TexArray_0_.Valid__
call fcn.00581780
add esp, 0x10
mov ecx, dword [edi + 0x3c]
call fcn.00584b10
mov edx, dword [eax]
mov edx, dword [edx + 0x4c]
push 0
push 0
lea ecx, [esp + 0x48]
push ecx
push 0
push eax
call edx
mov edi, dword [esp + 0x44]
test ebx, ebx
jbe 0x589d27
xor edx, edx
mov dword [esp + 0x18], edx
xor ecx, ecx
test ebp, ebp
jbe 0x589d07
jmp 0x589ce0
mov eax, dword [esp + 0x48]
mov eax, dword [edx + eax]
cmp eax, 0xff
jne 0x589cf0
jmp 0x589cfc
test eax, eax
je 0x589cfc
shl eax, 0x18
or eax, 0xffffff
mov dword [edi + ecx*4], eax
inc ecx
add edx, 4
cmp ecx, ebp
jb 0x589ce0
mov edx, dword [esp + 0x18]
mov ecx, dword [esp + 0x40]
lea eax, [ebp*4]
shr ecx, 2
add edx, eax
sub ebx, 1
lea edi, [edi + ecx*4]
mov dword [esp + 0x18], edx
jne 0x589cd1
mov edx, dword [esp + 0x34]
mov edi, dword [edx + 0x5c]
mov eax, dword [edi + 0x3c]
cmp dword [eax], 0
jne 0x589d4c
push 0
push 0x4d
push str.c:warz_srceternityinclude_r3dTex.h
push str.m_TexArray_0_.Valid__
call fcn.00581780
add esp, 0x10
mov ecx, dword [edi + 0x3c]
call fcn.00584b10
mov ecx, dword [eax]
mov edx, dword [ecx + 0x50]
push 0
push eax
call edx
mov eax, dword [esp + 0x50]
mov edi, dword [sym.imp.GDI32.dll_DeleteObject]
push eax
call edi
push esi
call dword [sym.imp.GDI32.dll_DeleteDC]
mov ecx, dword [esp + 0x38]
push ecx
call edi
mov edx, dword [esp + 0x14]
push edx
call edi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x1a8
ret 0x10