Function at 0x450730
Capabilities:
Check mutex on windows
Get common file path
Get memory capacity
Set current directory

Disassembly:
sub esp, 0x90
push ebx
push ebp
push esi
mov esi, dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryA]
push edi
push 0x483eec
push 0x104
call esi
push 0x60
push 0x46ac1c
push 0x47da88
call fcn.00450dd0
add esp, 0xc
call fcn.004091b0
call fcn.004092a0
push str.MnMsMutex
xor ebx, ebx
push 1
push ebx
call dword [sym.imp.KERNEL32.dll_CreateMutexA]
mov dword [0x4853a8], eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xb7
jne 0x4507b0
push ebx
push str.Error
push str.Game_already_running
push ebx
call dword [sym.imp.USER32.dll_MessageBoxA]
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x90
ret 0x10
mov eax, dword [0x4814f4]
mov ebp, 3
cmp eax, ebp
jbe 0x450802
push ebx
push str.Installation_Error
push str.Run_SETUP_for_render_configuration
push ebx
call dword [sym.imp.USER32.dll_MessageBoxA]
mov eax, dword [0x4853a8]
cmp eax, ebx
je 0x450b4e
push eax
call dword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov eax, dword [0x4853a8]
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x90
ret 0x10
mov edi, 0x48127c
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
jne 0x45081f
push 0x48127c
push 0x104
call esi
mov ecx, 0x49
xor eax, eax
mov edi, 0x483838
push 0xa
push 0x14
push 0x483838
rep stosd dword es:[edi], eax
call fcn.00407be0
mov ecx, 0x4856d4
add esp, 0xc
test ecx, ecx
je 0x450873
mov edi, ecx
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
je 0x450873
inc ecx
mov dword [0x483954], 1
push ecx
push 0x4856d4
push 0x483850
call fcn.00450dd0
add esp, 0xc
push ebx
push 0x80
push 2
push ebx
push 1
push 0x40000000
push 0x4856d4
call dword [sym.imp.KERNEL32.dll_CreateFileA]
cmp eax, 0xffffffff
mov dword [0x483950], eax
je 0x4508a2
mov dword [0x483958], 1
mov edx, str.__LOG_STARTED_
test edx, edx
je 0x4508e3
mov edi, edx
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
je 0x4508e3
lea esi, [ecx + 1]
push esi
call fcn.00450d2b
mov edi, eax
push esi
push str.__LOG_STARTED_
push edi
call fcn.00450dd0
push edi
push 0x483838
call fcn.00407c90
add esp, 0x18
call fcn.00408a10
push ebx
push 0x483838
call fcn.00407c90
add esp, 8
call fcn.00408a10
mov esi, dword [esp + 0xa4]
push 0x65
push esi
mov dword [0x480d40], esi
mov dword [esp + 0x18], ebp
mov dword [esp + 0x1c], 0x4216e0
mov dword [esp + 0x20], ebx
mov dword [esp + 0x24], ebx
mov dword [esp + 0x28], esi
call dword [sym.imp.USER32.dll_LoadIconA]
push 0x7f00
push ebx
mov dword [esp + 0x2c], eax
call dword [sym.imp.USER32.dll_LoadCursorA]
push ebx
mov dword [esp + 0x2c], eax
call dword [sym.imp.GDI32.dll_CreateSolidBrush]
mov dword [esp + 0x30], ebx
mov dword [esp + 0x34], str.MMs
mov dword [esp + 0x2c], eax
lea eax, [esp + 0x10]
push eax
call dword [sym.imp.USER32.dll_RegisterClassA]
push ebx
push esi
push ebx
push ebx
push ebx
push ebx
push ebx
push ebx
push 0x80000000
push str.MMs:The_Lost_Formulas
push str.MMs
push ebx
call dword [sym.imp.USER32.dll_CreateWindowExA]
cmp eax, ebx
mov dword [0x47dff4], eax
je 0x4509f1
mov edi, dword [sym.imp.USER32.dll_ShowWindow]
push 0xa
push eax
call edi
lea edx, [esp + 0x10]
push edx
call dword [sym.imp.KERNEL32.dll_GlobalMemoryStatus]
mov esi, dword [sym.imp.USER32.dll_wsprintfA]
mov eax, dword [esp + 0x1c]
mov ecx, dword [esp + 0x24]
mov edx, dword [esp + 0x2c]
push eax
push ecx
push edx
lea eax, [esp + 0x48]
push str.Virtual__d__Page__d__Phisic__d
push eax
call esi
lea ecx, [esp + 0x50]
push ecx
call fcn.00408b90
add esp, 0x18
call fcn.00408a10
mov eax, dword [0x4814f4]
mov dword [0x485648], ebx
cmp eax, ebx
mov dword [0x485500], eax
jne 0x450a23
mov edx, dword [0x47dff4]
push 0x4814e0
push edx
call fcn.0040ceb0
jmp 0x450a3c
push ebx
push str.Error
push str.Cant_init_window
push ebx
call dword [sym.imp.USER32.dll_MessageBoxA]
mov eax, dword [0x4853a8]
cmp eax, ebx
je 0x450ca6
push eax
call dword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov ecx, dword [0x4853a8]
push ecx
jmp 0x450ca0
cmp eax, 2
jne 0x450ace
mov eax, dword [0x47dff4]
push 0x4814e0
push eax
call fcn.0040f1b0
add esp, 8
test eax, eax
je 0x450aef
or ebp, 0xffffffff
mov edi, 0x48127c
mov ecx, ebp
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
je 0x450a65
push 0x48127c
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryA]
call fcn.0044ff00
call fcn.00439a80
mov eax, dword [0x48565c]
mov edi, 1
cmp eax, edi
jne 0x450b60
push edi
push edi
push str.L_02dP_1d
push 0x480d44
mov dword [0x484998], edi
mov dword [0x480ed8], edi
mov dword [0x48541c], edi
mov dword [0x485420], edi
call esi
mov ecx, dword [0x484998]
push ecx
push str.DATALEVEL_02d_
push 0x481f50
call esi
add esp, 0x1c
mov dword [0x485608], edi
mov dword [0x48560c], ebx
jmp 0x450c49
cmp eax, 1
jne 0x450aef
mov ecx, dword [0x47dff4]
push 0x4814e0
push ecx
call fcn.00411120
add esp, 8
test eax, eax
jne 0x450a47
mov edx, dword [0x47dff4]
push 6
push edx
call edi
mov eax, dword [0x47dff4]
push ebp
push ebx
push ebx
push ebx
push ebx
push 1
push eax
call dword [sym.imp.USER32.dll_SetWindowPos]
mov ecx, dword [0x47dff4]
push ecx
call dword [sym.imp.USER32.dll_UpdateWindow]
mov edx, dword [0x47da64]
push ebx
push str.Error
push str.Cant_init_render
push edx
call dword [sym.imp.USER32.dll_MessageBoxA]
mov eax, dword [0x4853a8]
cmp eax, ebx
je 0x450b4e
push eax
call dword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov eax, dword [0x4853a8]
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x90
ret 0x10
mov dword [0x4840ac], ebp
mov dword [0x485494], edi
mov dword [0x485468], edi
mov dword [0x47e140], ebx
mov dword [0x4819a0], ebx
call fcn.004397b0
call fcn.00417420
mov dword [0x483a04], edi
mov byte [0x485668], bl
mov dword [0x4854f0], edi
mov dword [0x4840ac], ebp
call fcn.004397b0
mov eax, dword [0x47e8a0]
xor ebp, ebp
cmp eax, ebx
mov dword [0x485660], edi
mov dword [0x485468], edi
mov dword [0x48549c], edi
mov dword [0x4813a8], edi
mov dword [0x484b24], ebx
mov dword [0x484b28], ebx
jle 0x450c2b
push ebp
push 0x47e8a0
call fcn.00415750
add esp, 8
cmp eax, ebx
je 0x450c21
mov esi, str.Levels
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x450c0f
cmp cl, bl
je 0x450c0b
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x450c0f
add eax, 2
add esi, 2
cmp cl, bl
jne 0x450beb
xor eax, eax
jmp 0x450c14
sbb eax, eax
sbb eax, 0xffffffff
cmp eax, ebx
je 0x450cb5
mov edi, 1
mov eax, dword [0x47e8a0]
inc ebp
cmp ebp, eax
jl 0x450bd4
xor eax, eax
mov dword [0x484b28], eax
inc eax
mov dword [0x484b2c], eax
mov dword [0x484b30], eax
mov dword [0x46c82c], edi
mov dword [0x4840ac], edi
call fcn.0044f770
lea eax, [esp + 0x38]
push eax
push 2
push 0x804
push 0xffffffffffffffff
call dword [sym.imp.WINMM.dll_mciSendCommandA]
cmp dword [0x485580], ebx
je 0x450c84
xor ecx, ecx
mov dword [0x485578], ecx
mov dword [0x48557c], ecx
mov dword [0x485580], ecx
mov dword [0x485584], ecx
call fcn.00450390
mov eax, dword [0x4853a8]
cmp eax, ebx
je 0x450ca6
push eax
call dword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov edx, dword [0x4853a8]
push edx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x90
ret 0x10
mov eax, ebp
mov edi, 1
jmp 0x450c2d