narzoul / DDrawCompat

DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11
BSD Zero Clause License
952 stars 70 forks source link

Game won't start #7

Closed OverLoad95 closed 7 years ago

OverLoad95 commented 7 years ago

Hello, I tried using the dll and it has even generated a successful log, but the game won't start (Windows 10). This game's community has been trying to fix the Windows 10 incompatibility for years, could you help us please?

It's Bomberman Online World, you can find it here http://fileforum.betanews.com/detail/Bomber-Online-World/1209068165/1

Thanks in advance!

narzoul commented 7 years ago

This game is protected by some kind of anti-cheat system that prevents using a local copy of ddraw.dll (and probably other system files). Without a local copy of ddraw.dll, the game produces an error message that says "Can't set display mode". However, as soon as you try using a local copy - even if it's the original, unmodified system ddraw.dll file - the game will not even get this far and just silently exits.

I experimented briefly with the builtin Windows compatibility shims, but it appears the game is "protected" against those too...

Unfortunately, this means DDrawCompat will be useless here. Circumventing the anti-cheat protection of games is out of scope for this project, so I'll have to close this issue without a satisfactory resolution.


For what it's worth, I was able to hex-edit BomberMan.exe to use a 32 bit color mode instead of 16 bit and it's enough to get the game started, but the display will still be uselessly corrupted. This is kind of expected, because the game is still writing 16 bit color data into the 32 bit color buffer, resulting in the horizontal resolution "halving" and color corruption effects.

If you want to experiment with this yourself, these are the bytes I hex-edited in BomberMan.exe: 46 04 6A 00 6A 10 8B 08 52 8B 56 19 52 50 FF 51

Replace the value I highlighted (10) with 20. In the current file version (1.0.0.1) this byte is located at offset 0xB355 (decimal 45909).

Do this only when the launcher is already open, because as soon as the launcher is started it "updates" BomberMan.exe and overwrites your changes.