Function at 0x40109b
Capabilities:
Check for unmoving mouse cursor

Disassembly:
jmp 0x40d580
sub esp, 8
push ebx
push ebp
push esi
mov esi, ecx
xor ebx, ebx
push edi
cmp byte [esi + 0x360], bl
jne 0x40d911
lea edi, [esi + 0xc4]
push 0x4318a8
mov ecx, edi
mov dword [esi + 0x368], ebx
call fcn.004103d0
push ebx
mov ecx, edi
call fcn.00410500
lea eax, [esi + 0x70]
lea ecx, [esi + 0x54]
push eax
push ecx
push 0xc
push 0x17c
push 0x12c
push 0x50
push 0xaa
lea ecx, [esi + 0x30c]
call fcn.00414680
lea edi, [esi + 0x32c]
lea ebp, [esi + 0x8c]
push edi
push ebp
push 0x14
push 0xdb
push 0x82
push 0xd3
push str.Single_Play
lea ecx, [esi + 0xe4]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0xa0
push 0xd3
push str.Team_Play
lea ecx, [esi + 0x104]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0xbe
push 0xd3
push str.Random_Level
lea ecx, [esi + 0x124]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0xdc
push 0xd3
push str.Choose_Level
lea ecx, [esi + 0x144]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0xfa
push 0xd3
push str.Level_Editor
lea ecx, [esi + 0x164]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x118
push 0xd3
push str.Instructions
lea ecx, [esi + 0x184]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x136
push 0xd3
push 0x42bae4
lea ecx, [esi + 0x1a4]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x154
push 0xd3
push str.High_Scores
lea ecx, [esi + 0x1c4]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x172
push 0xd3
push str.Exit_Game
lea ecx, [esi + 0x1e4]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x1a4
push 0xd3
push str.Return_to_Game
lea ecx, [esi + 0x204]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x82
push 0xd3
push str.Master_Volume...
lea ecx, [esi + 0x224]
call fcn.004148c0
mov eax, dword [0x433250]
cmp eax, 3
ja case.default.0x40d774
jmp dword [eax*4 + 0x40e104]
push edi
push ebp
push 0x14
push 0xdb
push 0xa0
push 0xd3
push 0x42bb28
jmp 0x40d7e1
push edi
push ebp
push 0x14
push 0xdb
push 0xa0
push 0xd3
push 0x42bb3c
jmp 0x40d7e1
push edi
push ebp
push 0x14
push 0xdb
push 0xa0
push 0xd3
push 0x42bb50
jmp 0x40d7e1
push edi
push ebp
push 0x14
push 0xdb
push 0xa0
push 0xd3
push 0x42bb64
lea ecx, [esi + 0x244]
call fcn.004148c0
mov al, byte [0x433268]
sub al, bl
je 0x40d813
dec al
jne 0x40d836
push edi
push ebp
push 0x14
push 0xdb
push 0xbe
push 0xd3
push 0x42bb7c
jmp 0x40d82b
push edi
push ebp
push 0x14
push 0xdb
push 0xbe
push 0xd3
push 0x42bb8c
lea ecx, [esi + 0x2a4]
call fcn.004148c0
mov al, byte [0x433269]
sub al, bl
je 0x40d85d
dec al
jne 0x40d880
push edi
push ebp
push 0x14
push 0xdb
push 0xdc
push 0xd3
push 0x42bb9c
jmp 0x40d875
push edi
push ebp
push 0x14
push 0xdb
push 0xdc
push 0xd3
push 0x42bbb0
lea ecx, [esi + 0x2c4]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x1a4
push 0xd3
push str.Previous_Menu
lea ecx, [esi + 0x264]
call fcn.004148c0
push edi
push ebp
push 0x14
push 0xdb
push 0x82
lea ebx, [esi + 0x2e4]
push 0xd3
push 0x20
push 0x437890
mov ecx, ebx
call fcn.00414a50
push 1
push 1
mov ecx, ebx
call fcn.00414d10
push edi
push ebp
push 0x14
push 0xdb
push 0x172
push 0xd3
push str.Continue
lea ecx, [esi + 0x284]
call fcn.004148c0
mov dword [esi + 0x364], 1
mov byte [esi + 0x360], 1
pop edi
pop esi
pop ebp
pop ebx
add esp, 8
ret
mov edi, dword [sym.imp.USER32.dll_GetCursorPos]
lea edx, [esp + 0x10]
push edx
call edi
mov ecx, dword [esp + 0x10]
cmp ecx, 0x280
jle 0x40d931
mov ecx, 0x280
jmp 0x40d937
cmp ecx, ebx
jge 0x40d93b
xor ecx, ecx
mov dword [esp + 0x10], ecx
mov eax, dword [esp + 0x14]
cmp eax, 0x1e0
jle 0x40d94d
mov eax, 0x1e0
jmp 0x40d953
cmp eax, ebx
jge 0x40d957
xor eax, eax
mov dword [esp + 0x14], eax
push eax
push ecx
call dword [sym.imp.USER32.dll_SetCursorPos]
mov edx, dword [esi + 0x358]
mov eax, dword [esp + 0x10]
mov ecx, dword [esp + 0x14]
inc edx
and edx, 0x8000001f
mov dword [esi + 0x350], eax
mov dword [esi + 0x354], ecx
jns 0x40d987
dec edx
or edx, 0xffffffe0
inc edx
xor ecx, ecx
mov dword [esi + 0x358], edx
call fcn.004145e0
test al, al
mov ebp, 1
je 0x40d9b5
cmp byte [0x437880], bl
jne 0x40d9bb
push 0x437878
mov byte [0x437880], 1
call edi
jmp 0x40d9bb
mov byte [0x437880], bl
push 0xffffffffffffffff
mov ecx, 0x434a80
call fcn.00411800
test al, al
jne 0x40d9d6
push ebx
mov ecx, 0x434a80
call fcn.00411690
mov eax, dword [esi + 0x364]
cmp eax, ebp
jne 0x40dc41
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0xe4]
call fcn.00414900
test al, al
je 0x40da16
push ebx
mov ecx, 0x434970
call fcn.00411690
push ebx
push ebp
push ebx
push ebx
mov ecx, 0x434db0
call fcn.00401046
lea ecx, [esp + 0x10]
push 0x437878
push ecx
lea ecx, [esi + 0x104]
call fcn.00414900
test al, al
je 0x40da44
push ebx
mov ecx, 0x434970
call fcn.00411690
mov dword [esi + 0x364], 2
lea edx, [esp + 0x10]
push 0x437878
push edx
lea ecx, [esi + 0x124]
call fcn.00414900
test al, al
je 0x40da77
push ebx
mov ecx, 0x434970
call fcn.00411690
push ebx
push ebp
push 2
push ebx
mov ecx, 0x434db0
call fcn.00401046
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0x144]
call fcn.00414900
test al, al
je 0x40daa5
push ebx
mov ecx, 0x434970
call fcn.00411690
mov dword [esi + 0x364], 5
lea ecx, [esp + 0x10]
push 0x437878
push ecx
lea ecx, [esi + 0x164]
call fcn.00414900
test al, al
je 0x40dad3
push ebx
mov ecx, 0x434970
call fcn.00411690
mov ecx, 3
call fcn.00401069
lea edx, [esp + 0x10]
push 0x437878
push edx
lea ecx, [esi + 0x1a4]
call fcn.00414900
test al, al
je 0x40db01
push ebx
mov ecx, 0x434970
call fcn.00411690
mov dword [esi + 0x364], 4
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0x184]
call fcn.00414900
test al, al
je 0x40db39
push ebx
mov ecx, 0x434970
call fcn.00411690
mov ecx, 6
mov dword [0x433528], 0x280
call fcn.00401069
lea ecx, [esp + 0x10]
push 0x437878
push ecx
lea ecx, [esi + 0x1c4]
call fcn.00414900
test al, al
je 0x40db6b
push ebx
mov ecx, 0x434970
call fcn.00411690
push ebx
push ebx
push ebp
push ebx
mov ecx, 0x435c40
call fcn.004010aa
lea edx, [esp + 0x10]
push 0x437878
push edx
lea ecx, [esi + 0x1e4]
call fcn.00414900
test al, al
je 0x40db99
push ebx
mov ecx, 0x434970
call fcn.00411690
mov dword [esi + 0x364], 3
mov ecx, 0xfffffffe
call fcn.00401069
test eax, eax
je 0x40dc01
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0x204]
call fcn.00414900
test al, al
jne 0x40dbcf
push ebp
mov ecx, 0x431af8
call fcn.00413f10
test al, al
je 0x40dc01
push ebx
mov ecx, 0x434970
call fcn.00411690
mov ecx, 0xfffffffe
call fcn.00401069
cmp eax, 3
jne 0x40dbf7
mov ecx, 0xfffffffe
call fcn.00401069
mov ecx, eax
jmp 0x40dbfc
mov ecx, 2
call fcn.00401069
mov ecx, dword [esi + 0x368]
inc ecx
mov eax, ecx
mov dword [esi + 0x368], ecx
cmp eax, 0x226
jle 0x40e0d1
mov ecx, 0xfffffffe
call fcn.00401069
test eax, eax
jne 0x40e0d1
push ebx
push ebx
push 2
push ebx
mov ecx, 0x434db0
call fcn.00401046
jmp 0x40e0d1
cmp eax, 2
jne 0x40dd07
lea ecx, [esp + 0x10]
push 0x431af8
push ecx
lea ecx, [esi + 0x2e4]
call fcn.00414b00
push 0x1c
mov ecx, 0x431af8
call fcn.00413ef0
test al, al
jne 0x40dc88
lea edx, [esp + 0x10]
push 0x437878
push edx
lea ecx, [esi + 0x284]
call fcn.00414900
test al, al
je 0x40dcd2
mov edx, dword [esi + 0x308]
or ecx, 0xffffffff
mov edi, edx
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
je 0x40dcd2
push edx
call fcn.00418857
mov edi, eax
add esp, 4
cmp edi, ebp
jge 0x40dcaf
mov edi, ebp
jmp 0x40dcb9
cmp edi, 8
jle 0x40dcb9
mov edi, 8
push ebx
mov ecx, 0x434970
call fcn.00411690
push ebx
push edi
push ebx
push ebx
mov ecx, 0x434db0
call fcn.00401046
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0x264]
call fcn.00414900
test al, al
jne 0x40e0c0
push ebp
mov ecx, 0x431af8
call fcn.00413f10
test al, al
je 0x40e0d1
jmp 0x40e0c0
cmp eax, 3
jne 0x40dd7f
lea ecx, [esp + 0x10]
push 0x437878
push ecx
lea ecx, [esi + 0x1e4]
call fcn.00414900
test al, al
je 0x40dd4a
push ebx
mov ecx, 0x434970
call fcn.00411690
push ebx
push 0x1f4
mov ecx, 0x4318a8
call fcn.0040fda0
mov ecx, 7
call fcn.00401069
lea edx, [esp + 0x10]
push 0x437878
push edx
lea ecx, [esi + 0x264]
call fcn.00414900
test al, al
jne 0x40e0c0
push ebp
mov ecx, 0x431af8
call fcn.00413f10
test al, al
je 0x40e0d1
jmp 0x40e0c0
cmp eax, 4
jne 0x40e007
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0x224]
call fcn.00414900
test al, al
je 0x40ddb6
push ebx
mov ecx, 0x434970
call fcn.00411690
mov ecx, str.Sndvol32.exe
call fcn.00412970
lea ecx, [esp + 0x10]
lea edi, [esi + 0x244]
push 0x437878
push ecx
mov ecx, edi
call fcn.00414900
test al, al
je case.default.0x40de03
push ebx
mov ecx, 0x434970
call fcn.00411690
mov edx, dword [0x433250]
lea eax, [edx + 1]
and eax, 0x80000003
jns 0x40ddf5
dec eax
or eax, 0xfffffffc
inc eax
cmp eax, 3
mov dword [0x433250], eax
ja case.default.0x40de03
jmp dword [eax*4 + 0x40e114]
lea eax, [esi + 0x32c]
lea ecx, [esi + 0x8c]
push eax
push ecx
push 0x14
push 0xdb
push 0xa0
push 0xd3
push str.Difficulty:_Easy
jmp 0x40dea0
lea edx, [esi + 0x32c]
lea eax, [esi + 0x8c]
push edx
push eax
push 0x14
push 0xdb
push 0xa0
push 0xd3
push str.Difficulty:_Medium
jmp 0x40dea0
lea ecx, [esi + 0x32c]
lea edx, [esi + 0x8c]
push ecx
push edx
push 0x14
push 0xdb
push 0xa0
push 0xd3
push str.Difficulty:_Hard
jmp 0x40dea0
lea eax, [esi + 0x32c]
lea ecx, [esi + 0x8c]
push eax
push ecx
push 0x14
push 0xdb
push 0xa0
push 0xd3
push str.Difficulty:_Really_Hard
mov ecx, edi
call fcn.004148c0
lea edi, [esi + 0x2a4]
lea edx, [esp + 0x10]
push 0x437878
push edx
mov ecx, edi
call fcn.00414900
test al, al
je 0x40df34
push ebx
mov ecx, 0x434970
call fcn.00411690
cmp byte [0x433268], bl
sete al
mov byte [0x433268], al
sub al, bl
je 0x40df09
dec al
jne 0x40df34
lea eax, [esi + 0x32c]
lea ecx, [esi + 0x8c]
push eax
push ecx
push 0x14
push 0xdb
push 0xbe
push 0xd3
push str.Game_Music:_On
jmp 0x40df2d
lea edx, [esi + 0x32c]
lea eax, [esi + 0x8c]
push edx
push eax
push 0x14
push 0xdb
push 0xbe
push 0xd3
push str.Game_Music:_Off
mov ecx, edi
call fcn.004148c0
lea ecx, [esp + 0x10]
lea edi, [esi + 0x2c4]
push 0x437878
push ecx
mov ecx, edi
call fcn.00414900
test al, al
je 0x40dfc1
push ebx
mov ecx, 0x434970
call fcn.00411690
cmp byte [0x433269], bl
sete al
mov byte [0x433269], al
sub al, bl
je 0x40df96
dec al
jne 0x40dfc1
lea edx, [esi + 0x32c]
lea eax, [esi + 0x8c]
push edx
push eax
push 0x14
push 0xdb
push 0xdc
push 0xd3
push str.Game_Sound_Fx:_On
jmp 0x40dfba
lea ecx, [esi + 0x32c]
lea edx, [esi + 0x8c]
push ecx
push edx
push 0x14
push 0xdb
push 0xdc
push 0xd3
push str.Game_Sound_Fx:_Off
mov ecx, edi
call fcn.004148c0
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0x264]
call fcn.00414900
test al, al
jne 0x40dfed
push ebp
mov ecx, 0x431af8
call fcn.00413f10
test al, al
je 0x40e0d1
push ebx
mov ecx, 0x434970
call fcn.00411690
call fcn.004010a5
call fcn.00401096
jmp 0x40e0cb
cmp eax, 5
jne 0x40e0d1
lea ecx, [esp + 0x10]
push 0x431af8
push ecx
lea ecx, [esi + 0x2e4]
call fcn.00414b00
push 0x1c
mov ecx, 0x431af8
call fcn.00413ef0
test al, al
jne 0x40e04e
lea edx, [esp + 0x10]
push 0x437878
push edx
lea ecx, [esi + 0x284]
call fcn.00414900
test al, al
je 0x40e098
mov edx, dword [esi + 0x308]
or ecx, 0xffffffff
mov edi, edx
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
je 0x40e098
push edx
call fcn.00418857
mov edi, eax
add esp, 4
dec edi
jns 0x40e074
xor edi, edi
jmp 0x40e07e
cmp edi, 0x28
jl 0x40e07e
mov edi, 0x28
push ebx
mov ecx, 0x434970
call fcn.00411690
push ebx
push edi
push 4
push ebx
mov ecx, 0x434db0
call fcn.00401046
lea eax, [esp + 0x10]
push 0x437878
push eax
lea ecx, [esi + 0x264]
call fcn.00414900
test al, al
jne 0x40e0c0
push ebp
mov ecx, 0x431af8
call fcn.00413f10
test al, al
je 0x40e0d1
push ebx
mov ecx, 0x434970
call fcn.00411690
mov dword [esi + 0x364], ebp
or ecx, 0xffffffff
call fcn.00401069
cmp eax, 5
je 0x40e0fb
lea ecx, [esi + 0xc4]
mov byte [esi + 0x360], bl
call fcn.00410830
mov dword [esi + 0x368], ebx
mov dword [esi + 0x364], ebx
pop edi
pop esi
pop ebp
pop ebx
add esp, 8
ret