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

Disassembly:
push 0xffffffffffffffff
mov eax, dword fs:[0]
push 0x43949c
push eax
mov dword fs:[0], esp
sub esp, 0x104
push ebx
push ebp
push esi
mov esi, ecx
mov eax, dword [esi + 0x20]
push edi
xor edi, edi
cmp eax, edi
je 0x415f92
fld dword [esp + 0x124]
mov ecx, dword [esi + 0x68]
cmp ecx, edi
fadd dword [esi + 0x50]
mov edx, dword [esp + 0x138]
fstp dword [esp + 0x20]
mov eax, dword [esp + 0x20]
mov dword [esi + 0x50], eax
jne 0x415873
cmp edx, edi
je 0x415873
mov dword [esi + 0x50], edi
mov dword [esi + 0x68], 1
sub esp, 0x1c
mov ecx, esp
mov dword [esp + 0x38], esp
push str.rain
call dword [sym.imp.MSVCP71.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
mov dword [esp + 0x138], 0xffffffff
call fcn.00415460
mov ecx, eax
call fcn.00414b60
mov eax, dword [esi + 0x68]
cmp eax, 1
jne 0x4158de
fld dword [esi + 0x50]
fmul dword [0x446570]
fstp dword [esi + 0x64]
jmp 0x415908
cmp ecx, 1
jne 0x415894
fld dword [esp + 0x20]
fcomp dword [0x4467d8]
fnstsw ax
test cl, ah
jne 0x415894
mov dword [esi + 0x50], edi
mov dword [esi + 0x68], 2
jmp 0x41582f
cmp ecx, 2
jne 0x4158a9
cmp edx, edi
jne 0x4158a9
mov dword [esi + 0x50], edi
mov dword [esi + 0x68], 3
jmp 0x41582f
cmp ecx, 3
jne 0x4158ca
fld dword [esp + 0x20]
fcomp dword [0x4467d8]
fnstsw ax
test ah, 1
jne 0x4158ca
mov dword [esi + 0x50], edi
mov dword [esi + 0x68], edi
jmp 0x41582f
cmp ecx, edi
jne 0x41582f
mov ecx, esi
call fcn.00415690
jmp 0x415f92
cmp eax, 2
jne 0x4158ec
mov dword [esi + 0x64], 0x3f800000
jmp 0x415908
cmp eax, 3
jne 0x415905
fld dword [esi + 0x50]
fmul dword [0x446570]
fsubr dword [0x43fff0]
fstp dword [esi + 0x64]
jmp 0x415908
mov dword [esi + 0x64], edi
mov ecx, dword [esi + 4]
fild dword [esi + 4]
test ecx, ecx
jge 0x415918
fadd dword [0x440070]
fmul dword [esi + 0x64]
call fcn.00433f04
mov dword [esi + 0x60], eax
call fcn.00409060
add eax, 0xb4
mov dword [esp + 0x20], eax
call fcn.00409060
add eax, 0xd4
mov edx, dword [eax]
mov ecx, dword [eax + 4]
mov dword [esp + 0x38], edx
mov edx, dword [eax + 8]
mov dword [esp + 0x3c], ecx
fld dword [esp + 0x3c]
fmul dword [0x43ffe8]
mov dword [esp + 0x40], edx
fld dword [esp + 0x40]
fsub st(1)
fstp dword [esp + 0x2c]
mov eax, dword [esp + 0x2c]
fld dword [esp + 0x38]
mov dword [esp + 0x10], eax
fmul dword [0x43ffe8]
lea eax, [esp + 0x10]
fld dword [esp + 0x40]
push eax
fmul dword [0x43ffe8]
fsubp st(1)
fstp dword [esp + 0x34]
mov ecx, dword [esp + 0x34]
mov dword [esp + 0x18], ecx
fsub dword [esp + 0x3c]
mov ecx, eax
push ecx
fstp dword [esp + 0x3c]
mov edx, dword [esp + 0x3c]
mov dword [esp + 0x20], edx
call sub.d3dx9_35.dll_D3DXVec3Normalize
fld dword [esp + 0x10]
fmul dword [0x4467dc]
push edi
fstp dword [esp + 0x30]
mov edx, dword [esp + 0x30]
fld dword [esp + 0x18]
mov dword [esp + 0x14], edx
fmul dword [0x4467dc]
fstp dword [esp + 0x34]
mov eax, dword [esp + 0x34]
fld dword [esp + 0x1c]
mov dword [esp + 0x18], eax
fmul dword [0x4467dc]
mov eax, dword [esi + 0x20]
fstp dword [esp + 0x38]
mov ecx, dword [esp + 0x38]
mov dword [esp + 0x1c], ecx
mov edx, dword [eax]
lea ecx, [esp + 0x2c]
push ecx
push edi
push edi
push eax
call dword [edx + 0x2c]
test eax, eax
jge 0x415a18
push str.DxEffectRain::FrameMove______m_pVB__Lock______Failed
call fcn.00402ea0
add esp, 4
mov eax, 0x80004005
jmp 0x415f94
cmp dword [esi + 4], edi
mov dword [esp + 0x50], edi
jle 0x415f89
fld dword [esp + 0x128]
lea ebp, [esi + 0x54]
fmul dword [esp + 0x134]
xor ebx, ebx
fstp dword [esp + 0x2c]
fld dword [esp + 0x12c]
fmul dword [esp + 0x134]
fsub dword [0x44538c]
fstp dword [esp + 0x30]
fld dword [esp + 0x130]
fmul dword [esp + 0x134]
fstp dword [esp + 0x34]
fld dword [esi + 0x14]
mov edx, ebp
fld dword [esp + 0x2c]
push ebp
fmul st(1)
fstp dword [esp + 0x3c]
mov eax, dword [esp + 0x3c]
fld dword [esp + 0x34]
mov dword [edx], eax
fmul st(1)
fstp dword [esp + 0x40]
mov ecx, dword [esp + 0x40]
fld dword [esp + 0x38]
mov dword [edx + 4], ecx
mov ecx, dword [esi + 0x48]
fmul st(1)
fstp dword [esp + 0x44]
mov eax, dword [esp + 0x44]
mov dword [edx + 8], eax
fstp st(0)
lea eax, [edi + ecx + 0xc]
fld dword [eax]
lea edx, [esp + 0x48]
fadd dword [ebp]
push edx
fstp dword [ebp]
fld dword [eax + 4]
fadd dword [ebp + 4]
fstp dword [ebp + 4]
fld dword [eax + 8]
fadd dword [ebp + 8]
fstp dword [ebp + 8]
call sub.d3dx9_35.dll_D3DXVec3Normalize
fld dword [esi + 0x1c]
mov edx, dword [esp + 0x20]
mov eax, dword [esi + 0x48]
fadd dword [edx + 4]
lea ecx, [edi + eax]
fcomp dword [ecx + 4]
fnstsw ax
test ah, 1
jne 0x415d81
call dword [sym.imp.MSVCR71.dll_rand]
mov dword [esp + 0x24], eax
fild dword [esp + 0x24]
fmul dword [0x444cfc]
fsub dword [0x45ed48]
fimul dword [esi + 0x18]
fstp dword [esp + 0x1c]
call dword [sym.imp.MSVCR71.dll_rand]
mov ecx, dword [esi + 0x48]
mov dword [esp + 0x24], eax
fild dword [esp + 0x24]
mov eax, dword [esp + 0x20]
fmul dword [0x444cfc]
fsub dword [0x45ed48]
fimul dword [esi + 0x18]
fadd dword [esp + 0x1c]
fadd dword [eax]
fstp dword [edi + ecx]
mov edx, dword [esi + 0xc]
mov dword [esp + 0x24], edx
call dword [sym.imp.MSVCR71.dll_rand]
cdq
idiv dword [esp + 0x24]
mov eax, dword [esp + 0x20]
mov ecx, dword [esi + 0x48]
mov dword [esp + 0x1c], edx
fild dword [esp + 0x1c]
fiadd dword [esp + 0x24]
fadd dword [eax + 4]
fstp dword [edi + ecx + 4]
call dword [sym.imp.MSVCR71.dll_rand]
mov dword [esp + 0x1c], eax
fild dword [esp + 0x1c]
fmul dword [0x444cfc]
fsub dword [0x45ed48]
fimul dword [esi + 0x18]
fstp dword [esp + 0x24]
call dword [sym.imp.MSVCR71.dll_rand]
mov edx, dword [esp + 0x20]
mov dword [esp + 0x1c], eax
fild dword [esp + 0x1c]
mov eax, dword [esi + 0x48]
fmul dword [0x444cfc]
fsub dword [0x45ed48]
fimul dword [esi + 0x18]
fadd dword [esp + 0x24]
fadd dword [edx + 8]
fstp dword [edi + eax + 8]
mov eax, dword [esi + 0x48]
fld dword [eax + edi]
mov ecx, dword [esp + 0x28]
fsub dword [esp + 0x10]
add eax, edi
lea edx, [ebx + ecx]
fstp dword [esp + 0x84]
fld dword [eax + 4]
fsub dword [esp + 0x14]
fstp dword [esp + 0x88]
mov ecx, dword [esp + 0x88]
fld dword [eax + 8]
mov eax, dword [esp + 0x84]
fsub dword [esp + 0x18]
mov dword [edx], eax
mov dword [edx + 4], ecx
fstp dword [esp + 0x8c]
mov eax, dword [esp + 0x8c]
mov dword [edx + 8], eax
fld dword [esi + 0x10]
fld dword [esp + 0x44]
mov eax, dword [esi + 0x48]
fmul st(1)
add eax, edi
fld dword [esp + 0x48]
mov ecx, dword [esp + 0x28]
fmul st(2)
lea edx, [ebx + ecx + 0x18]
fstp dword [esp + 0xd0]
fld dword [esp + 0x4c]
fmul st(2)
fstp dword [esp + 0xd4]
fld dword [eax]
fsub dword [esp + 0x10]
fld dword [eax + 4]
fsub dword [esp + 0x14]
fstp dword [esp + 0xb8]
fld dword [eax + 8]
fsub dword [esp + 0x18]
fstp dword [esp + 0xbc]
fadd st(1)
fstp dword [esp + 0x6c]
mov eax, dword [esp + 0x6c]
mov dword [edx], eax
fstp st(0)
fstp st(0)
fld dword [esp + 0xb8]
fadd dword [esp + 0xd0]
fstp dword [esp + 0x70]
mov ecx, dword [esp + 0x70]
fld dword [esp + 0xbc]
mov dword [edx + 4], ecx
fadd dword [esp + 0xd4]
fstp dword [esp + 0x74]
mov eax, dword [esp + 0x74]
mov dword [edx + 8], eax
fld dword [esp + 0x10]
mov eax, dword [esi + 0x48]
fadd dword [eax + edi]
mov ecx, dword [esp + 0x28]
add eax, edi
lea edx, [ebx + ecx + 0x30]
fstp dword [esp + 0x9c]
fld dword [esp + 0x14]
fadd dword [eax + 4]
fstp dword [esp + 0xa0]
mov ecx, dword [esp + 0xa0]
fld dword [esp + 0x18]
fadd dword [eax + 8]
mov eax, dword [esp + 0x9c]
mov dword [edx], eax
mov dword [edx + 4], ecx
fstp dword [esp + 0xa4]
mov eax, dword [esp + 0xa4]
mov dword [edx + 8], eax
fld dword [esi + 0x10]
fld dword [esp + 0x44]
mov eax, dword [esi + 0x48]
fmul st(1)
add eax, edi
fld dword [esp + 0x48]
fmul st(2)
fstp dword [esp + 0xe8]
fld dword [esp + 0x4c]
fmul st(2)
fstp dword [esp + 0xec]
fld dword [esp + 0x10]
fadd dword [eax]
fld dword [esp + 0x14]
fadd dword [eax + 4]
fstp dword [esp + 0x100]
fld dword [esp + 0x18]
fadd dword [eax + 8]
fstp dword [esp + 0x104]
fadd st(1)
fstp dword [esp + 0x54]
fstp st(0)
fstp st(0)
fld dword [esp + 0x100]
mov ecx, dword [esp + 0x28]
fadd dword [esp + 0xe8]
mov eax, dword [esp + 0x54]
lea edx, [ebx + ecx + 0x48]
mov dword [edx], eax
fstp dword [esp + 0x58]
mov ecx, dword [esp + 0x58]
fld dword [esp + 0x104]
fadd dword [esp + 0xec]
fstp dword [esp + 0x5c]
mov eax, dword [esp + 0x5c]
jmp 0x415f69
fld dword [ecx]
fadd dword [ebp]
fstp dword [ecx]
fld dword [ebp + 4]
fadd dword [ecx + 4]
fstp dword [ecx + 4]
fld dword [ebp + 8]
fadd dword [ecx + 8]
fstp dword [ecx + 8]
mov eax, dword [esi + 0x48]
fld dword [eax + edi]
mov ecx, dword [esp + 0x28]
fsub dword [esp + 0x10]
add eax, edi
lea edx, [ebx + ecx]
fstp dword [esp + 0x60]
fld dword [eax + 4]
fsub dword [esp + 0x14]
fstp dword [esp + 0x64]
mov ecx, dword [esp + 0x64]
fld dword [eax + 8]
mov eax, dword [esp + 0x60]
fsub dword [esp + 0x18]
mov dword [edx], eax
mov dword [edx + 4], ecx
fstp dword [esp + 0x68]
mov eax, dword [esp + 0x68]
mov dword [edx + 8], eax
fld dword [esi + 0x10]
fld dword [esp + 0x44]
mov eax, dword [esi + 0x48]
fmul st(1)
add eax, edi
fld dword [esp + 0x48]
mov ecx, dword [esp + 0x28]
fmul st(2)
lea edx, [ebx + ecx + 0x18]
fstp dword [esp + 0xdc]
fld dword [esp + 0x4c]
fmul st(2)
fstp dword [esp + 0xe0]
fld dword [eax]
fsub dword [esp + 0x10]
fld dword [eax + 4]
fsub dword [esp + 0x14]
fstp dword [esp + 0xc4]
fld dword [eax + 8]
fsub dword [esp + 0x18]
fstp dword [esp + 0xc8]
fadd st(1)
fstp dword [esp + 0x78]
mov eax, dword [esp + 0x78]
mov dword [edx], eax
fstp st(0)
fstp st(0)
fld dword [esp + 0xc4]
fadd dword [esp + 0xdc]
fstp dword [esp + 0x7c]
mov ecx, dword [esp + 0x7c]
fld dword [esp + 0xc8]
mov dword [edx + 4], ecx
fadd dword [esp + 0xe0]
fstp dword [esp + 0x80]
mov eax, dword [esp + 0x80]
mov dword [edx + 8], eax
fld dword [esp + 0x10]
mov eax, dword [esi + 0x48]
fadd dword [eax + edi]
mov ecx, dword [esp + 0x28]
add eax, edi
lea edx, [ebx + ecx + 0x30]
fstp dword [esp + 0x90]
fld dword [esp + 0x14]
fadd dword [eax + 4]
fstp dword [esp + 0x94]
mov ecx, dword [esp + 0x94]
fld dword [esp + 0x18]
fadd dword [eax + 8]
mov eax, dword [esp + 0x90]
mov dword [edx], eax
fstp dword [esp + 0x98]
mov eax, dword [esp + 0x98]
mov dword [edx + 4], ecx
mov dword [edx + 8], eax
fld dword [esi + 0x10]
fld dword [esp + 0x44]
mov eax, dword [esi + 0x48]
fmul st(1)
add eax, edi
fld dword [esp + 0x48]
mov ecx, dword [esp + 0x28]
fmul st(2)
lea edx, [ebx + ecx + 0x48]
fstp dword [esp + 0x10c]
fld dword [esp + 0x4c]
fmul st(2)
fstp dword [esp + 0x110]
fld dword [esp + 0x10]
fadd dword [eax]
fld dword [esp + 0x14]
fadd dword [eax + 4]
fstp dword [esp + 0xf4]
fld dword [esp + 0x18]
fadd dword [eax + 8]
fstp dword [esp + 0xf8]
fadd st(1)
fstp dword [esp + 0xa8]
mov eax, dword [esp + 0xa8]
mov dword [edx], eax
fstp st(0)
fstp st(0)
fld dword [esp + 0xf4]
fadd dword [esp + 0x10c]
fstp dword [esp + 0xac]
mov ecx, dword [esp + 0xac]
fld dword [esp + 0xf8]
fadd dword [esp + 0x110]
fstp dword [esp + 0xb0]
mov eax, dword [esp + 0xb0]
mov dword [edx + 4], ecx
mov dword [edx + 8], eax
mov eax, dword [esp + 0x50]
mov ecx, dword [esi + 4]
inc eax
add edi, 0x18
add ebx, 0x60
cmp eax, ecx
mov dword [esp + 0x50], eax
jl 0x415a66
mov esi, dword [esi + 0x20]
mov ecx, dword [esi]
push esi
call dword [ecx + 0x30]
xor eax, eax
mov ecx, dword [esp + 0x114]
pop edi
pop esi
pop ebp
mov dword fs:[0], ecx
pop ebx
add esp, 0x110
ret 0x18