It seems like the 640x400 mode fails with my monitor so it always use a 640x480 resolution, according to my monitor OSD. The problem is that it doesn't increase the picture size. It just creates big black borders. (It's the same in both version 1.02 and 1.06 by the way.) Update: Well, that was not entirely right. Now I'm pretty sure that the OSD can't be trusted for the difference between a 640x400 and a 640x480 resolution. Because a Print Screen showed that it's the 640x400 mode that works (when the game manage to use it), and it's the 640x480 mode that has the big black borders and the strange 'split screen'. In what file? The exe? Another file? Update: I came across a loader for another older game that was able to intercept DirectDraw functions to fix the output resolution and aspect ratio. So I copied the code to this new Google Code project with the hope of making the same kind of loader for this game. However, I ran into something of a snag, the program will not detect the call to ddraw.dll (or any other DirectX file). I'm guessing that it may be because that call is made from code that is stored in DUNE2000.DAT and that method of having the exe load code from a file like that confuses the interceptor. If you have any ideas about how to fix that please feel free to post a message about it here or in the project pages. Update: Okay I now noticed that the first project I made could only hook DirectDraw if ddraw.dll was built into the import table of the exe. But Dune 2000 loads it with LoadLibrary(). So now I made a DDraw_Wrapper project (that you can open from the DDraw_Wrapper.sln solution) that produce a custom made ddraw.dll wrapper that you can place in the directory of the game to override the regular ddraw.dll calls. I'm entirely new to these hooking procedures so there is currently a slight problem to hook the CreateSurface() or SetDisplayMode() and the other functions I need to change the display of the game. The game uses QueryInterface, and after that it doesn't seem like any other DirectDraw functions are picked up. I only get this from Dune 2000: 12:53:32:000: 12:53:32:000: ---------------------------------------------------------------- 12:53:32:000: DLLMain called and Log Opened 12:53:32:000: ---------------------------------------------------------------- 12:53:32:015: 12:53:32:015: 12:53:32:015: DirectDrawCreate: lplpDD = 0x00794184:0x0014B538:0x004A0537 12:53:32:015: DirectDrawCreate: lplpDD = 0x00794184:0x00E65D58:0x004A0537 12:53:32:015: hkIDirectDraw::EnumDisplayModes 12:53:32:031: hkIDirectDraw::Release 12:53:32:031: 12:53:32:031: 12:53:32:031: DirectDrawCreate: lplpDD = 0x00794184:0x001465B8:0x004A07F8 12:53:32:031: DirectDrawCreate: lplpDD = 0x00794184:0x00E65D58:0x004A07F8 12:53:32:031: hkIDirectDraw::QueryInterface 12:53:39:468: hkIDirectDraw::Release From a DirectX 5 SDK sample I get the functions I need, like in this log from the 'stretch' example (that does not use a full screen mode so it has no SetDisplayMode): 13:04:12:015: 13:04:12:015: ---------------------------------------------------------------- 13:04:12:015: DLLMain called and Log Opened 13:04:12:015: ---------------------------------------------------------------- 13:04:12:093: 13:04:12:093: 13:04:12:093: DirectDrawCreate: lplpDD = 0x0040438C:0x001565E0:0x004019E2 13:04:12:093: DirectDrawCreate: lplpDD = 0x0040438C:0x003567F0:0x004019E2 13:04:12:093: hkIDirectDraw::SetCooperativeLevel 13:04:12:093: hkIDirectDraw::CreateSurface 13:04:12:125: hkIDirectDraw::CreateClipper 13:04:12:125: hkIDirectDraw::CreatePalette 13:04:12:125: hkIDirectDraw::CreateSurface 13:04:16:812: hkIDirectDraw::Release Does anyone know what I need to do to hook the CreateSurface and SetDisplayMode and the other functions that I think Dune 2000 use? (I'm building my ddraw.dll and the test exes with the DirectX 5 includes and lib files, but I use a new DirectX 9 ddraw.dll to run the programs, if that makes any difference.)