What we're gonna do here is replace some of the hardcoded resolutions with the one we choose to support. In this case I trashed 1600x1200, and replaced it with 1680x1050.
Load main.exe in IDA (you obviously need an unpacked main.exe for this to work). I found the first code to be replaced by searching for a reference to "SOFTWARE\\Webzen\\Mu\\Config", scroll down until the "call ds:RegCloseKey".
you should see a switch like this:
Code:
seg000:004B81D6 call ds:RegCloseKey
seg000:004B81DC mov eax, ds:dword_5760A98
seg000:004B81E1 cmp eax, edi
seg000:004B81E3 ja short loc_4B8258
seg000:004B81E5 jmp ds:off_4B829C[eax*4] ; switch here
seg000:004B81EC
seg000:004B81EC loc_4B81EC: ; case 0
seg000:004B81EC mov ds:width, 280h
seg000:004B81F6 mov ds:height, 1E0h
seg000:004B8200 jmp short loc_4B8258
seg000:004B8202 ; ---------------------------------------------------------------------------
seg000:004B8202
seg000:004B8202 loc_4B8202: ; case 1
seg000:004B8202 ;
seg000:004B8202 mov ds:width, 320h
seg000:004B820C mov ds:height, 258h
seg000:004B8216 jmp short loc_4B8258
seg000:004B8218 ; ---------------------------------------------------------------------------
seg000:004B8218
seg000:004B8218 loc_4B8218: ; case 2
seg000:004B8218 ;
seg000:004B8218 mov ds:width, 400h
seg000:004B8222 mov ds:height, 300h
seg000:004B822C jmp short loc_4B8258
seg000:004B822E ; ---------------------------------------------------------------------------
seg000:004B822E
seg000:004B822E loc_4B822E: ; case 3
seg000:004B822E ;
seg000:004B822E mov ds:width, 500h
seg000:004B8238 mov ds:height, 400h
seg000:004B8242 jmp short loc_4B8258
seg000:004B8244 ; ---------------------------------------------------------------------------
seg000:004B8244
seg000:004B8244 loc_4B8244: ; case 4 ---> we need to patch these
seg000:004B8244 ;
seg000:004B8244 mov ds:width, 640h ; 640h = 1600 change to 690h
seg000:004B824E mov ds:height, 4B0h ; 4B0 = 1200 change to 41Ah
Now we should have the game creating a full screen window of the right size, but the font is all fucked up... let's fix it. Search for "UpdateWindow", scroll down a bit and you should see this:
Code:
seg000:004B9439 call ds:UpdateWindow
seg000:004B943F mov eax, ds:hWnd
seg000:004B9444 push eax
seg000:004B9445 call sub_44F1D0
seg000:004B944A add esp, 4
seg000:004B944D push offset aGgConnectWindo ; "> gg connect Window Handle.\r\n"
seg000:004B9452 push offset unk_5760850 ; int
seg000:004B9457 call sub_41FAC0
seg000:004B945C add esp, 8
seg000:004B945F mov ecx, offset unk_5760850 ; int
seg000:004B9464 call sub_41FC70
seg000:004B9469 mov ecx, ds:hWnd
seg000:004B946F push ecx ; HWND
seg000:004B9470 mov ecx, offset unk_5760850 ; int
seg000:004B9475 call sub_41FE50
seg000:004B947A mov ecx, offset unk_5760850 ; int
seg000:004B947F call sub_41FC70
seg000:004B9484 push 401h
seg000:004B9489 mov edx, ds:hWnd
seg000:004B948F push edx
seg000:004B9490 mov ecx, offset dword_5760828
seg000:004B9495 call sub_447040
seg000:004B949A mov eax, ds:width ; get width
seg000:004B949F mov [ebp+var_2458], eax
seg000:004B94A5 cmp [ebp+var_2458], 400h ; if(width>1024)
seg000:004B94AF ja short loc_4B94D7 ; goto loc_4B94D7
seg000:004B94B1 cmp [ebp+var_2458], 400h
seg000:004B94BB jz short loc_4B94FD
seg000:004B94BD cmp [ebp+var_2458], 280h
seg000:004B94C7 jz short loc_4B94E5
seg000:004B94C9 cmp [ebp+var_2458], 320h
seg000:004B94D3 jz short loc_4B94F1
seg000:004B94D5 jmp short loc_4B9513
seg000:004B94D7 ; ---------------------------------------------------------------------------
seg000:004B94D7
seg000:004B94D7 loc_4B94D7: ; CODE XREF: WinMain(x,x,x,x)+B0Fj
seg000:004B94D7 cmp [ebp+var_2458], 500h ; --> change this to 690h
seg000:004B94E1 jz short loc_4B9509
seg000:004B94E3 jmp short loc_4B9513
[...a few lines below...]
seg000:004B956D call ds:CreateFontA ; ---> gotcha
Now to use it, regedit to "HKEY_CURRENT_USER\Software\Webzen\Mu\Config" and set Resolution to 4.
hope you figure it out ;]
All credits to cosararo