Function at 0x4c5927
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x5ee402
mov eax, dword fs:[0]
push eax
sub esp, 0xa8
mov eax, dword [0x648d30]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov ebx, ecx
mov ecx, 0x65c0e2
call fcn.004a73a0
cmp byte [ebx + 0x24], 0
je 0x4c5d57
xor eax, eax
mov dword [0x64b110], ebx
mov dword [ebp - 0xac], eax
call fcn.004a8a16
push str.Starting_scene
push 0
call fcn.004a6bad
add esp, 8
cmp dword [ebx], 0
jne 0x4c46c5
push 0x60
call fcn.004a7dbe
add esp, 4
mov dword [ebp - 0xb0], eax
mov dword [ebp - 4], 0
test eax, eax
je 0x4c46b5
push dword [ebx + 0xc]
mov ecx, eax
push ebx
call fcn.004a54bf
mov ecx, eax
jmp 0x4c46b7
xor ecx, ecx
mov dword [ebx], ecx
mov eax, dword [ecx]
mov dword [ebp - 4], 0xffffffff
call dword [eax + 8]
call fcn.004a669e
mov ecx, dword [ebx + 0x18]
lea edi, [ebx + 0x45]
push edi
push str.devMenu
push 0x5ff3cc
mov dword [ebp - 0xa4], eax
mov byte [ebp - 0x81], 0
call fcn.004a8570
mov ecx, dword [ebx + 0x18]
lea eax, [ebp - 0xa0]
push eax
push str.global
push str.audio
call fcn.004a8917
movd xmm0, dword [ebp - 0xa0]
cvtdq2ps xmm0, xmm0
mov eax, dword [ebx + 0x14]
divss xmm0, dword [0x5ffb00]
movss dword [eax + 0x98], xmm0
lea eax, [ebp - 0xa0]
mov ecx, dword [ebx + 0x18]
push eax
push str.music
push str.audio
call fcn.004a8917
movd xmm0, dword [ebp - 0xa0]
cvtdq2ps xmm0, xmm0
mov eax, dword [ebx + 0x14]
divss xmm0, dword [0x5ffb00]
movss dword [eax + 0x9c], xmm0
lea eax, [ebp - 0xa0]
mov ecx, dword [ebx + 0x18]
push eax
push 0x5ff2fc
push str.audio
call fcn.004a8917
movd xmm0, dword [ebp - 0xa0]
cvtdq2ps xmm0, xmm0
mov eax, dword [ebx + 0x14]
divss xmm0, dword [0x5ffb00]
movss dword [eax + 0xa0], xmm0
lea eax, [ebx + 0x3a]
mov ecx, dword [ebx + 0x18]
push eax
push str.viewObjectCollision
push 0x5ff3cc
call fcn.004a8570
xor esi, esi
push str.Running...
push esi
mov dword [ebp - 0xa8], esi
call fcn.004a6bad
mov ecx, dword [ebx + 0xc]
add esp, 8
mov eax, dword [ecx]
call dword [eax + 0x38]
cmp byte [ebx + 0x24], 0
je 0x4c5d57
call fcn.004a669e
mov dword [ebp - 0xb0], eax
lea eax, [ebp - 0x7c]
push eax
mov byte [ebp - 0x89], 0
call fcn.004a6cbb
add esp, 4
test eax, eax
je 0x4c48e4
mov byte [ebp - 0x89], 0
nop dword [eax]
mov eax, dword [ebp - 0x7c]
cmp eax, 0x100
je 0x4c48c6
cmp eax, 0x300
jne case.0x4c482f.9
mov eax, dword [ebp - 0x68]
add eax, 0xfffffff8
cmp eax, 0x5e
ja case.0x4c482f.9
movzx eax, byte [eax + 0x4c5d8c]
jmp dword [eax*4 + 0x4c5d74]
cmp byte [edi], 0
je 0x4c48c6
cmp byte [ebx + 0x46], 0
mov byte [ebx + 0x4d], 0
sete al
mov byte [ebx + 0x46], al
jmp case.0x4c482f.9
mov cl, byte [edi]
test cl, cl
je 0x4c4863
cmp byte [ebp - 0x81], 0
sete byte [ebp - 0x81]
xor eax, eax
test cl, cl
cmove eax, esi
mov esi, eax
jmp case.0x4c482f.9
cmp byte [edi], 0
je case.0x4c482f.9
mov cl, byte [ebx + 0x44]
test cl, cl
sete al
mov byte [ebx + 0x44], al
xor eax, eax
test cl, cl
setne al
push eax
call fcn.004a54dd
add esp, 4
jmp case.0x4c482f.9
mov cl, byte [edi]
test cl, cl
je 0x4c48a4
mov byte [ebp - 0x81], 1
mov byte [ebp - 0x89], 1
lea eax, [esi + 1]
test cl, cl
cmove eax, esi
mov esi, eax
jmp case.0x4c482f.9
mov ecx, dword [ebx + 0xc]
push 1
push 0x2d0
push 0x4f8
mov eax, dword [ecx]
call dword [eax + 0x34]
jmp case.0x4c482f.9
mov byte [ebx + 0x24], 0
lea eax, [ebp - 0x7c]
push eax
call fcn.004a6cbb
add esp, 4
test eax, eax
jne 0x4c4800
mov dword [ebp - 0xa8], esi
cmp byte [ebx + 0x44], 0
mov eax, 1
mov esi, 4
cmove esi, eax
mov al, byte [ebp - 0x81]
nop dword [eax + eax]
test al, al
je 0x4c490d
cmp byte [ebp - 0x89], 0
je 0x4c493b
mov ecx, dword [ebx + 0x10]
call fcn.004a85d4
call fcn.004a669e
cmp byte [ebx + 0x46], 0
mov dword [ebx + 0x3c], eax
jne 0x4c492a
mov ecx, dword [ebx]
mov eax, dword [ecx]
call dword [eax + 0xc]
call fcn.004a669e
sub eax, dword [ebx + 0x3c]
mov dword [ebx + 0x3c], eax
mov al, byte [ebp - 0x81]
sub esi, 1
jne 0x4c4900
call fcn.004a669e
mov dword [ebx + 0x40], eax
cmp dword [ebx + 4], esi
jne 0x4c496b
mov ecx, dword [ebx]
mov eax, dword [ecx]
call dword [eax + 0x10]
mov ecx, dword [ebx + 0x1c]
cmp byte [ecx + 0x10c1], 0
je 0x4c496b
push dword [ecx + 0x10c4]
call fcn.004a7d37
call fcn.004a669e
sub eax, dword [ebx + 0x40]
cmp dword [ebx + 4], 0
mov dword [ebx + 0x40], eax
je 0x4c49e7
call fcn.004a669e
mov esi, dword [ebx]
mov edi, eax
mov edx, dword [ebx + 4]
mov ecx, esi
mov dword [ebx], edx
mov dword [ebx + 4], 0
mov edx, dword [esi]
call dword [edx + 0x14]
mov edx, dword [esi]
mov ecx, esi
push 1
call dword [edx]
mov ecx, dword [ebx]
mov eax, dword [ecx]
call dword [eax + 8]
mov ecx, dword [ebx + 0x10]
call fcn.004a85d4
cmp byte [ebx + 0x46], 0
jne 0x4c49bc
mov ecx, dword [ebx]
mov eax, dword [ecx]
call dword [eax + 0xc]
mov ecx, dword [ebx]
mov eax, dword [ecx]
call dword [eax + 0x10]
mov ecx, dword [ebx + 0x1c]
cmp byte [ecx + 0x10c1], 0
je 0x4c49da
push dword [ecx + 0x10c4]
call fcn.004a7d37
call fcn.004a669e
sub edi, eax
add dword [ebp - 0xa4], edi
mov ecx, dword [ebx + 0x18]
lea eax, [ebp - 0x8a]
push eax
push str.viewPerformance
push 0x5ff3cc
mov byte [ebp - 0x8a], 0
call fcn.004a8570
cmp dword [0x6460c0], 7
mov ecx, 1
movzx eax, byte [ebp - 0x8a]
cmove eax, ecx
mov byte [ebp - 0x8a], al
test al, al
je 0x4c4aff
movss xmm0, dword [ebx + 0x20]
lea eax, [ebp - 0x40]
cvtps2pd xmm0, xmm0
sub esp, 8
movsd qword [esp], xmm0
push str._.1f_FPS
push eax
call fcn.004a75e9
mov ecx, dword [ebx + 0xc]
lea eax, [ebp - 0x40]
add esp, 0x10
mov edx, dword [ecx]
push 0xffffff
push eax
mov eax, dword [ebx + 0x28]
push 3
sub eax, 0x43
push eax
call dword [edx + 0xb0]
push dword [ebx + 0x3c]
lea eax, [ebp - 0x40]
push str.Upd:__03u_ms
push eax
call fcn.004a75e9
mov ecx, dword [ebx + 0xc]
lea eax, [ebp - 0x40]
add esp, 0xc
mov edx, dword [ecx]
push 0xffffff
push eax
mov eax, dword [ebx + 0x28]
push 0xb
sub eax, 0x5b
push eax
call dword [edx + 0xb0]
push dword [ebx + 0x40]
lea eax, [ebp - 0x40]
push str.Ren:__03u_ms
push eax
call fcn.004a75e9
mov ecx, dword [ebx + 0xc]
lea eax, [ebp - 0x40]
add esp, 0xc
mov edx, dword [ecx]
push 0xffffff
push eax
mov eax, dword [ebx + 0x28]
push 0x13
sub eax, 0x5b
push eax
call dword [edx + 0xb0]
push dword [ebp - 0xa8]
lea eax, [ebp - 0x40]
push str.Frm:__03d
push eax
call fcn.004a75e9
mov ecx, dword [ebx + 0xc]
lea eax, [ebp - 0x40]
add esp, 0xc
mov edx, dword [ecx]
push 0xffffff
push eax
mov eax, dword [ebx + 0x28]
push 0x1b
sub eax, 0x5b
push eax
call dword [edx + 0xb0]
mov ecx, dword [ebx + 0x18]
lea eax, [ebp - 0x98]
push eax
push str.viewControls
push 0x5ff3cc
mov dword [ebp - 0x98], 0xffffffff
call fcn.004a8917
mov ecx, dword [ebp - 0x98]
cmp ecx, 0xffffffff
je 0x4c4ce7
movq xmm0, qword [0x5ff454]
mov ax, word [0x5ff45c]
push ecx
mov ecx, dword [ebx + 0x10]
push 0
push 8
movq qword [ebp - 0x1c], xmm0
mov word [ebp - 0x14], ax
call fcn.004a55d2
push dword [ebp - 0x98]
movzx ecx, byte [ebp - 0x1c]
test al, al
movzx edx, byte [str.UDLRP2M]
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 0
push 7
mov byte [ebp - 0x1c], dl
call fcn.004a55d2
push dword [ebp - 0x98]
movzx ecx, byte [ebp - 0x1b]
test al, al
movzx edx, byte [0x5ff464]
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 0
push 6
mov byte [ebp - 0x1b], dl
call fcn.004a55d2
push dword [ebp - 0x98]
movzx ecx, byte [ebp - 0x1a]
test al, al
movzx edx, byte [0x5ff468]
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 0
push 5
mov byte [ebp - 0x1a], dl
call fcn.004a55d2
push dword [ebp - 0x98]
movzx ecx, byte [ebp - 0x19]
test al, al
movzx edx, byte [0x5ff46c]
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 0
push 4
mov byte [ebp - 0x19], dl
call fcn.004a55d2
push dword [ebp - 0x98]
movzx ecx, byte [ebp - 0x18]
test al, al
movzx edx, byte [0x5ff190]
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 0
push 3
mov byte [ebp - 0x18], dl
call fcn.004a55d2
push dword [ebp - 0x98]
movzx ecx, byte [ebp - 0x17]
test al, al
movzx edx, byte [0x5ff464]
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 0
push 0
mov byte [ebp - 0x17], dl
call fcn.004a55d2
push dword [ebp - 0x98]
movzx ecx, byte [ebp - 0x16]
test al, al
movzx edx, byte [0x5ff470]
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 0
push 1
mov byte [ebp - 0x16], dl
call fcn.004a55d2
movzx ecx, byte [ebp - 0x15]
movzx edx, byte [0x5ff294]
push dword [ebp - 0x98]
test al, al
push 0
cmove edx, ecx
mov ecx, dword [ebx + 0x10]
push 2
mov byte [ebp - 0x15], dl
call fcn.004a55d2
movzx ecx, byte [ebp - 0x15]
test al, al
movzx edx, byte [0x5ff474]
cmove edx, ecx
mov ecx, dword [ebx + 0xc]
mov byte [ebp - 0x15], dl
lea edx, [ebp - 0x1c]
push 0xffffff
push edx
mov eax, dword [ecx]
push 3
push 3
call dword [eax + 0xb0]
mov edx, dword [ebx + 0x10]
mov ecx, 0x5ff47c
mov esi, dword [ebx + 0xc]
mov eax, 0x5ff478
push 0xffffff
cmp byte [edx + 0x24], 0
mov edi, dword [esi]
cmove eax, ecx
push eax
push dword [edx + 0x20]
push dword [edx + 0x1c]
push 0x5ff480
call fcn.004a629d
add esp, 0x10
mov ecx, esi
push eax
push 0xb
push 3
call dword [edi + 0xb0]
cmp byte [ebx + 0x46], 0
lea edi, [ebx + 0x45]
je 0x4c5cab
cmp byte [edi], 0
je 0x4c5cab
mov ecx, dword [ebx + 0xc]
mov eax, dword [ecx]
call dword [eax + 0x60]
mov ecx, dword [ebx + 0xc]
push 0
mov dword [ebp - 0xb4], eax
mov edx, dword [ecx]
call dword [edx + 0x5c]
mov eax, dword [ebx + 0x28]
test eax, eax
jns 0x4c4d1f
add eax, 1
sar eax, 1
push dword [ebx + 0x48]
lea ecx, [eax + 0x66]
add eax, 0xffffff6a
mov dword [ebp - 0x94], ecx
mov ecx, dword [ebx + 0xc]
push 0x38
push 0x12c
push 0x20
mov edx, dword [ecx]
push eax
call dword [edx + 0x7c]
push dword [ebx + 0x48]
mov eax, dword [ebx + 0x28]
mov ecx, dword [ebx + 0xc]
cdq
push 0x4b
sub eax, edx
mov esi, dword [ecx]
push 0x12c
sar eax, 1
push 0x5c
sub eax, 0x96
push eax
call dword [esi + 0x7c]
push dword [ebx + 0x48]
mov eax, dword [ebx + 0x28]
mov ecx, dword [ebx + 0xc]
cdq
push 0x38
sub eax, edx
mov esi, dword [ecx]
push 0x12c
sar eax, 1
push 0xaa
sub eax, 0x96
push eax
call dword [esi + 0x7c]
mov eax, dword [ebx + 0x28]
mov ecx, dword [ebx + 0xc]
cdq
push 0xffffff
sub eax, edx
mov esi, dword [ecx]
push str.IMPOSTOR_ENGINE_2
sar eax, 1
push 0x24
sub eax, 0x44
push eax
call dword [esi + 0xac]
mov eax, dword [ebx + 0x28]
mov ecx, dword [ebx + 0xc]
cdq
push 0xffffff
sub eax, edx
mov esi, dword [ecx]
push str.Dev_Menu
sar eax, 1
push 0x2c
sub eax, 0x20
push eax
call dword [esi + 0xac]
lea edx, [ebx + 0x60]
mov esi, edx
lea ecx, [esi + 1]
nop dword [eax]
mov al, byte [esi]
inc esi
test al, al
jne 0x4c4de0
mov eax, dword [ebx + 0x28]
sub esi, ecx
mov ecx, dword [ebx + 0xc]
push 0x848294
push edx
cdq
mov edi, dword [ecx]
sub eax, edx
sar eax, 1
shl esi, 2
push 0x3c
sub eax, esi
push eax
call dword [edi + 0xac]
mov ecx, dword [ebx + 0xc]
lea eax, [ebx + 0x56]
push 0x848294
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
sar eax, 1
push 0x44
sub eax, 0x20
push eax
call dword [esi + 0xac]
mov eax, dword [ebx + 0x14]
mov esi, dword [ebx + 0xc]
push 0xffffff
movss xmm0, dword [eax + 0x98]
mulss xmm0, dword [0x5ffb00]
mov edi, dword [esi]
cvttss2si eax, xmm0
push eax
push str._Global_Volume:__d
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
mov eax, dword [ebx + 0x28]
cdq
sub eax, edx
sar eax, 1
push 0xaf
sub eax, 0x8c
push eax
call dword [edi + 0xac]
mov eax, dword [ebx + 0x14]
mov esi, dword [ebx + 0xc]
push 0xffffff
movss xmm0, dword [eax + 0x9c]
mulss xmm0, dword [0x5ffb00]
mov edi, dword [esi]
cvttss2si eax, xmm0
push eax
push str.__Music_Volume:__d
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
mov eax, dword [ebx + 0x28]
cdq
sub eax, edx
sar eax, 1
push 0xb7
sub eax, 0x8c
push eax
call dword [edi + 0xac]
mov eax, dword [ebx + 0x14]
mov esi, dword [ebx + 0xc]
push 0xffffff
movss xmm0, dword [eax + 0xa0]
mulss xmm0, dword [0x5ffb00]
mov edi, dword [esi]
cvttss2si eax, xmm0
push eax
push str.SoundFX_Volume:__d
call fcn.004a629d
add esp, 8
push eax
mov eax, dword [ebx + 0x28]
mov ecx, esi
cdq
sub eax, edx
sar eax, 1
push 0xbf
sub eax, 0x8c
push eax
call dword [edi + 0xac]
mov esi, dword [ebx + 0xc]
push 0xffffff
push dword [ebx + 0x28]
mov edi, dword [esi]
push str._________Width:__d
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
mov eax, dword [ebx + 0x28]
cdq
sub eax, edx
sar eax, 1
push 0xaf
sub eax, 0x14
push eax
call dword [edi + 0xac]
mov esi, dword [ebx + 0xc]
push 0xffffff
push dword [ebx + 0x2c]
mov edi, dword [esi]
push str.________Height:__d
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
mov eax, dword [ebx + 0x28]
cdq
sub eax, edx
sar eax, 1
push 0xb7
sub eax, 0x14
push eax
call dword [edi + 0xac]
mov esi, dword [ebx + 0xc]
push 0xffffff
push dword [ebx + 0x34]
mov edi, dword [esi]
push str.________Aspect:__d
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
mov eax, dword [ebx + 0x28]
cdq
sub eax, edx
sar eax, 1
push 0xbf
sub eax, 0x14
push eax
call dword [edi + 0xac]
mov esi, dword [ebx + 0xc]
push 0xffffff
push dword [ebx + 0x30]
mov edi, dword [esi]
push str._________Scale:__d
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
mov eax, dword [ebx + 0x28]
cdq
sub eax, edx
sar eax, 1
push 0xc7
sub eax, 0x14
push eax
call dword [edi + 0xac]
movzx eax, byte [ebx + 0x4d]
dec eax
cmp eax, 5
ja case.default.0x4c4feb
jmp dword [eax*4 + 0x4c5dec]
mov edi, dword [ebx + 0x81148]
xor edx, edx
mov dword [ebp - 0x80], edi
mov dword [ebp - 0x90], edx
test edi, edi
jle 0x4c50b5
xor eax, eax
mov dword [ebp - 0x88], 0x60
mov dword [ebp - 0x94], eax
nop dword [eax]
lea ecx, [ebx + 0x160]
add ecx, eax
lea esi, [ecx + 1]
nop dword [eax + eax]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4c5030
movzx eax, byte [ebx + 0x4c]
sub ecx, esi
mov esi, dword [ebx + 0xc]
cmp eax, edx
mov dword [ebp - 0x9c], ecx
mov eax, 0xf0f0f0
mov ecx, 0x848294
cmove ecx, eax
mov eax, dword [ebp - 0x94]
mov edi, dword [esi]
add eax, 0x160
add eax, ebx
push ecx
push eax
mov eax, dword [ebx + 0x28]
mov ecx, esi
push dword [ebp - 0x88]
cdq
sub eax, edx
sar eax, 1
sub eax, dword [ebp - 0x9c]
push eax
call dword [edi + 0xac]
mov edx, dword [ebp - 0x90]
mov eax, dword [ebp - 0x94]
inc edx
add dword [ebp - 0x88], 0xa
add eax, 0x20
mov dword [ebp - 0x90], edx
mov dword [ebp - 0x94], eax
cmp edx, dword [ebx + 0x81148]
jl 0x4c5020
mov edi, dword [ebp - 0x80]
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0x10], 0
je 0x4c5c7b
mov dl, byte [ebx + 0x4c]
lea ecx, [edi - 1]
movzx eax, dl
cmp eax, ecx
jge 0x4c5c77
inc dl
mov byte [ebx + 0x4c], dl
jmp 0x4c5c7b
cmp byte [ebx + 0x4c], 0
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
mov edi, 0xf0f0f0
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Video_Settings
sar eax, 1
push 0x60
sub eax, 0x38
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 1
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Audio_Settings
sar eax, 1
push 0x6a
sub eax, 0x38
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 2
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Input_Settings
sar eax, 1
push 0x74
sub eax, 0x38
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 3
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Debug_Settings
sar eax, 1
push 0x7e
sub eax, 0x38
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 4
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Back
sar eax, 1
push 0x88
sub eax, 0x10
push eax
call dword [esi + 0xac]
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xd], 0
je 0x4c51e6
mov al, byte [ebx + 0x4c]
add al, 3
mov byte [ebx + 0x4c], 0
mov byte [ebx + 0x4d], al
jmp 0x4c51e6
mov edi, 0xf0f0f0
cmp byte [ebx + 0x4c], 0
mov eax, 4
mov ecx, dword [ebx + 0xc]
mov dword [ebp - 0x80], eax
mov eax, 0x848294
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Window_Size:
sar eax, 1
push 0x60
sub eax, 0x30
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 1
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.FullScreen:
sar eax, 1
push 0x6a
sub eax, 0x2c
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 2
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Confirm
sar eax, 1
push 0x7e
sub eax, 0x1c
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 3
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Cancel
sar eax, 1
push 0x88
sub eax, 0x18
push eax
call dword [esi + 0xac]
movzx esi, byte [ebx + 0x4f]
xor edi, edi
mov ecx, edi
test esi, esi
jg 0x4c52af
jne 0x4c52d5
test edi, edi
jne 0x4c52d5
mov eax, 0x66666667
imul esi
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
lea eax, [ecx + ecx*4]
add eax, eax
sub esi, eax
mov dword [ebp + edi*4 - 0x44], esi
mov esi, ecx
mov ecx, edi
inc edi
cmp edi, 7
jl 0x4c52a5
mov dword [ebp - 0x88], ecx
test ecx, ecx
js 0x4c5341
mov eax, dword [ebp - 0x94]
mov dword [ebp - 0x90], eax
nop dword [eax + eax]
cmp byte [ebx + 0x4c], 0
mov edx, 0xf0f0f0
mov esi, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
push dword [ebp + ecx*4 - 0x44]
mov edi, dword [esi]
push 0x5ff624
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
push 0x60
push dword [ebp - 0x90]
call dword [edi + 0xac]
mov ecx, dword [ebp - 0x88]
add dword [ebp - 0x90], 8
sub ecx, 1
mov dword [ebp - 0x88], ecx
jns 0x4c52f0
cmp byte [ebx + 0x4c], 1
mov esi, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, esi
cmp byte [ebx + 0x4e], 1
push eax
mov eax, 0x5ff628
mov esi, 0x5ff62c
mov edx, dword [ecx]
cmovne eax, esi
push eax
push 0x6a
push dword [ebp - 0x94]
call dword [edx + 0xac]
movzx eax, byte [ebx + 0x4c]
mov ecx, dword [ebx + 0x10]
push 0
sub eax, 0
je 0x4c540f
sub eax, 1
je 0x4c53ee
sub eax, 1
je 0x4c53a1
call fcn.004a7f2b
mov edi, dword [ebp - 0x80]
jmp 0x4c5c24
call fcn.004a7f2b
cmp byte [eax + 0xd], 0
je 0x4c50b2
movzx edx, byte [ebx + 0x4f]
mov eax, dword [ebx + 0x2c]
push dword [ebx + 0x81548]
mov ecx, dword [ebx + 0xc]
imul eax, edx
mov esi, dword [ecx]
push eax
mov eax, dword [ebx + 0x28]
imul eax, edx
push eax
call dword [esi + 0x34]
movzx eax, byte [ebx + 0x4e]
push eax
mov eax, dword [ebx + 0xc]
push dword [eax + 0x1c]
call fcn.004a7b6b
add esp, 8
mov word [ebx + 0x4c], 0x200
jmp 0x4c50b2
call fcn.004a7f2b
mov edi, dword [ebp - 0x80]
cmp byte [eax + 0xd], 0
je 0x4c50b5
cmp byte [ebx + 0x4e], 0
sete al
mov byte [ebx + 0x4e], al
jmp 0x4c50b5
call fcn.004a7f2b
cmp byte [eax + 0xf], 0
je 0x4c542f
mov al, byte [ebx + 0x4f]
cmp al, 1
jbe 0x4c50b2
dec al
mov byte [ebx + 0x4f], al
jmp 0x4c50b2
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
mov edi, dword [ebp - 0x80]
cmp byte [eax + 0xe], 0
je 0x4c50b5
inc byte [ebx + 0x4f]
jmp 0x4c50b5
cmp byte [ebx + 0x4c], 0
mov eax, 4
mov ecx, dword [ebx + 0xc]
mov edi, 0xf0f0f0
mov dword [ebp - 0x80], eax
mov eax, 0x848294
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Master_Volume
sar eax, 1
push 0x60
sub eax, 0x34
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 1
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Music_Volume
sar eax, 1
push 0x6a
sub eax, 0x30
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 2
mov eax, 0x848294
mov ecx, dword [ebx + 0xc]
cmove eax, edi
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.SoundFX_Volume
sar eax, 1
push 0x74
sub eax, 0x38
push eax
call dword [esi + 0xac]
mov eax, dword [ebx + 0x14]
xor edi, edi
movss xmm1, dword [0x5ffb00]
mov ecx, edi
movss xmm0, dword [eax + 0x98]
mulss xmm0, xmm1
cvttss2si esi, xmm0
nop dword [eax + eax]
test esi, esi
jg 0x4c550a
jne 0x4c5530
test edi, edi
jne 0x4c5530
mov eax, 0x66666667
imul esi
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
lea eax, [ecx + ecx*4]
add eax, eax
sub esi, eax
mov dword [ebp + edi*4 - 0x44], esi
mov esi, ecx
mov ecx, edi
inc edi
cmp edi, 7
jl 0x4c5500
mov dword [ebp - 0x88], ecx
mov edx, ecx
mov dword [ebp - 0x9c], edx
test ecx, ecx
js 0x4c55af
mov eax, dword [ebp - 0x94]
mov dword [ebp - 0x90], eax
nop
cmp byte [ebx + 0x4c], 0
mov ecx, 0xf0f0f0
mov esi, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, ecx
push eax
push dword [ebp + edx*4 - 0x44]
mov edi, dword [esi]
push 0x5ff624
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
push 0x60
push dword [ebp - 0x90]
call dword [edi + 0xac]
mov edx, dword [ebp - 0x9c]
add dword [ebp - 0x90], 8
sub edx, 1
mov dword [ebp - 0x9c], edx
jns 0x4c5550
movss xmm1, dword [0x5ffb00]
mov ecx, dword [ebp - 0x88]
mov eax, dword [ebx + 0x14]
xor edi, edi
movss xmm0, dword [eax + 0x9c]
mulss xmm0, xmm1
cvttss2si esi, xmm0
test esi, esi
jg 0x4c55ce
jne 0x4c55f4
test edi, edi
jne 0x4c55f4
mov eax, 0x66666667
imul esi
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
lea eax, [ecx + ecx*4]
add eax, eax
sub esi, eax
mov dword [ebp + edi*4 - 0x44], esi
mov esi, ecx
mov ecx, edi
inc edi
cmp edi, 7
jl 0x4c55c4
mov dword [ebp - 0x88], ecx
mov edx, ecx
mov dword [ebp - 0x9c], edx
test ecx, ecx
js 0x4c5671
mov eax, dword [ebp - 0x94]
mov dword [ebp - 0x90], eax
cmp byte [ebx + 0x4c], 1
mov ecx, 0xf0f0f0
mov esi, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, ecx
push eax
push dword [ebp + edx*4 - 0x44]
mov edi, dword [esi]
push 0x5ff624
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
push 0x6a
push dword [ebp - 0x90]
call dword [edi + 0xac]
mov edx, dword [ebp - 0x9c]
add dword [ebp - 0x90], 8
sub edx, 1
mov dword [ebp - 0x9c], edx
jns 0x4c5612
movss xmm1, dword [0x5ffb00]
mov ecx, dword [ebp - 0x88]
mov eax, dword [ebx + 0x14]
xor edi, edi
movss xmm0, dword [eax + 0xa0]
mulss xmm0, xmm1
cvttss2si esi, xmm0
test esi, esi
jg 0x4c5690
jne 0x4c56b6
test edi, edi
jne 0x4c56b6
mov eax, 0x66666667
imul esi
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
lea eax, [ecx + ecx*4]
add eax, eax
sub esi, eax
mov dword [ebp + edi*4 - 0x44], esi
mov esi, ecx
mov ecx, edi
inc edi
cmp edi, 7
jl 0x4c5686
mov dword [ebp - 0x88], ecx
test ecx, ecx
js 0x4c5711
cmp byte [ebx + 0x4c], 2
mov edx, 0xf0f0f0
mov esi, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
push dword [ebp + ecx*4 - 0x44]
mov edi, dword [esi]
push 0x5ff624
call fcn.004a629d
add esp, 8
mov ecx, esi
push eax
push 0x74
push dword [ebp - 0x94]
call dword [edi + 0xac]
mov ecx, dword [ebp - 0x88]
add dword [ebp - 0x94], 8
sub ecx, 1
mov dword [ebp - 0x88], ecx
jns 0x4c56c0
cmp byte [ebx + 0x4c], 3
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Back
sar eax, 1
push 0x88
sub eax, 0x10
push eax
call dword [esi + 0xac]
movzx eax, byte [ebx + 0x4c]
mov ecx, dword [ebx + 0x10]
push 0
sub eax, 0
je 0x4c5895
sub eax, 1
je 0x4c5803
sub eax, 1
je 0x4c5771
call fcn.004a7f2b
mov edi, dword [ebp - 0x80]
jmp 0x4c5c24
call fcn.004a7f2b
cmp byte [eax + 0xf], 0
je 0x4c57b4
mov eax, dword [ebx + 0x14]
movsd xmm1, qword [0x5ffa20]
mov edi, dword [ebp - 0x80]
movss xmm0, dword [eax + 0xa0]
cvtps2pd xmm0, xmm0
comisd xmm0, xmm1
jbe 0x4c50b5
subsd xmm0, xmm1
cvtpd2ps xmm0, xmm0
movss dword [eax + 0xa0], xmm0
jmp 0x4c50b5
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xe], 0
je 0x4c50b2
mov eax, dword [ebx + 0x14]
movss xmm1, dword [0x5ffa18]
mov edi, dword [ebp - 0x80]
movss xmm0, dword [eax + 0xa0]
comiss xmm1, xmm0
jbe 0x4c50b5
cvtps2pd xmm0, xmm0
addsd xmm0, qword [0x5ffa20]
cvtpd2ps xmm0, xmm0
movss dword [eax + 0xa0], xmm0
jmp 0x4c50b5
call fcn.004a7f2b
cmp byte [eax + 0xf], 0
je 0x4c5846
mov eax, dword [ebx + 0x14]
movsd xmm1, qword [0x5ffa20]
mov edi, dword [ebp - 0x80]
movss xmm0, dword [eax + 0x9c]
cvtps2pd xmm0, xmm0
comisd xmm0, xmm1
jbe 0x4c50b5
subsd xmm0, xmm1
cvtpd2ps xmm0, xmm0
movss dword [eax + 0x9c], xmm0
jmp 0x4c50b5
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xe], 0
je 0x4c50b2
mov eax, dword [ebx + 0x14]
movss xmm1, dword [0x5ffa18]
mov edi, dword [ebp - 0x80]
movss xmm0, dword [eax + 0x9c]
comiss xmm1, xmm0
jbe 0x4c50b5
cvtps2pd xmm0, xmm0
addsd xmm0, qword [0x5ffa20]
cvtpd2ps xmm0, xmm0
movss dword [eax + 0x9c], xmm0
jmp 0x4c50b5
call fcn.004a7f2b
cmp byte [eax + 0xf], 0
je 0x4c58d8
mov eax, dword [ebx + 0x14]
movsd xmm1, qword [0x5ffa20]
mov edi, dword [ebp - 0x80]
movss xmm0, dword [eax + 0x98]
cvtps2pd xmm0, xmm0
comisd xmm0, xmm1
jbe 0x4c50b5
subsd xmm0, xmm1
cvtpd2ps xmm0, xmm0
movss dword [eax + 0x98], xmm0
jmp 0x4c50b5
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xe], 0
je 0x4c50b2
mov eax, dword [ebx + 0x14]
movss xmm1, dword [0x5ffa18]
mov edi, dword [ebp - 0x80]
movss xmm0, dword [eax + 0x98]
comiss xmm1, xmm0
jbe 0x4c50b5
cvtps2pd xmm0, xmm0
addsd xmm0, qword [0x5ffa20]
cvtpd2ps xmm0, xmm0
movss dword [eax + 0x98], xmm0
jmp 0x4c50b5
cmp byte [ebx + 0x4c], 0
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
mov edi, 5
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
mov dword [ebp - 0x80], edi
push str.Set_Keys_For_Input_1
sar eax, 1
push 0x60
sub eax, 0x50
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 1
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Set_Keys_For_Input_2
sar eax, 1
push 0x6a
sub eax, 0x50
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 2
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Set_Keys_For_Input_3
sar eax, 1
push 0x74
sub eax, 0x50
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 3
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Set_Keys_For_Input_4
sar eax, 1
push 0x7e
sub eax, 0x50
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 4
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Back
sar eax, 1
push 0x88
sub eax, 0x10
push eax
call dword [esi + 0xac]
movzx eax, byte [ebx + 0x4c]
cmp eax, 3
ja case.0x4c5bc9.3
jmp dword [eax*4 + 0x4c5e04]
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
jmp 0x4c50b5
cmp byte [ebx + 0x4c], 0
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
mov edi, 4
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
mov dword [ebp - 0x80], edi
push str.Debug_Mode
sar eax, 1
push 0x60
sub eax, 0x28
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 3
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Back
sar eax, 1
push 0x88
sub eax, 0x10
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 0
mov ecx, dword [ebx + 0x10]
push 0
je 0x4c5a3b
jmp 0x4c5c1f
cmp byte [ebx + 0x4c], 0
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
mov edi, 5
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
mov dword [ebp - 0x80], edi
push str.Resume
sar eax, 1
push 0x60
sub eax, 0x18
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 1
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Restart_Scene
sar eax, 1
push 0x6a
sub eax, 0x34
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 2
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Scene_List
sar eax, 1
push 0x74
sub eax, 0x28
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 3
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Options
sar eax, 1
push 0x7e
sub eax, 0x1c
push eax
call dword [esi + 0xac]
cmp byte [ebx + 0x4c], 4
mov edx, 0xf0f0f0
mov ecx, dword [ebx + 0xc]
mov eax, 0x848294
cmove eax, edx
push eax
mov eax, dword [ebx + 0x28]
mov esi, dword [ecx]
cdq
sub eax, edx
push str.Exit
sar eax, 1
push 0x88
sub eax, 0x10
push eax
call dword [esi + 0xac]
movzx eax, byte [ebx + 0x4c]
dec eax
cmp eax, 3
ja case.default.0x4c5bc9
jmp dword [eax*4 + 0x4c5e14]
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xd], 0
je 0x4c50b5
mov ecx, dword [ebx]
mov eax, dword [ecx]
call dword [eax + 0x14]
mov ecx, dword [ebx]
mov eax, dword [ecx]
call dword [eax + 8]
mov byte [ebx + 0x46], 0
jmp 0x4c50b5
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xd], 0
je 0x4c50b5
mov word [ebx + 0x4c], 0x100
jmp 0x4c50b5
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xd], 0
je 0x4c50b5
mov word [ebx + 0x4c], 0x200
jmp 0x4c50b5
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xd], 0
je 0x4c50b5
mov byte [ebx + 0x24], 0
jmp 0x4c50b5
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0xd], 0
je 0x4c50b5
mov byte [ebx + 0x46], 0
mov byte [ebx + 0x4d], 0
jmp 0x4c50b5
mov byte [ebx + 0x4c], 0
mov ecx, dword [ebx + 0x10]
push 0
call fcn.004a7f2b
cmp byte [eax + 0x11], 0
je 0x4c5c9a
mov al, byte [ebx + 0x4c]
test al, al
jne 0x4c5c95
mov eax, dword [ebp - 0x80]
dec al
mov byte [ebx + 0x4c], al
mov ecx, dword [ebx + 0xc]
push dword [ebp - 0xb4]
mov eax, dword [ecx]
call dword [eax + 0x5c]
lea edi, [ebx + 0x45]
mov ecx, dword [ebx + 0xc]
mov eax, dword [ecx]
call dword [eax + 0x38]
call fcn.004a669e
mov esi, dword [ebp - 0xac]
mov edx, eax
sub edx, dword [ebp - 0xb0]
cmp esi, 0x28
jge 0x4c5cda
cmp edx, 0x10
jae 0x4c5cef
mov ecx, 0x10
sub ecx, edx
push ecx
jmp 0x4c5ce7
cmp edx, 0xf
jae 0x4c5cef
mov eax, 0xf
sub eax, edx
push eax
call fcn.004a7508
add esp, 4
inc esi
mov dword [ebp - 0xac], esi
cmp esi, 0x3c
jl 0x4c5d47
xor eax, eax
mov dword [ebp - 0xac], eax
call fcn.004a669e
movss xmm1, dword [0x5ffb04]
mov ecx, eax
sub ecx, dword [ebp - 0xa4]
mov dword [ebp - 0xa4], eax
movd xmm0, ecx
cvtdq2pd xmm0, xmm0
shr ecx, 0x1f
addsd xmm0, qword [ecx*8 + 0x5ff160]
cvtpd2ps xmm0, xmm0
divss xmm1, xmm0
mulss xmm1, dword [0x5ffafc]
movss dword [ebx + 0x20], xmm1
cmp byte [ebx + 0x24], 0
mov esi, dword [ebp - 0xa8]
jne 0x4c47d0
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.004a7062
mov esp, ebp
pop ebp
ret