|starking018||Date: Thursday, 2021-10-07, 1:35 AM | Message # 1|
|Lately several issues have come up with BF1942 not working correctly (or at all) with modern versions of Windows, especially Windows 10. It turns out that most of these can be resolved by just adding to the Battlefield 1942 folder some file(s) which substitute the DirectX 8 files included with Windows. There are several alternatives and I collected some information from my own testing and from several reports from other BF1942 players. Here are the issues and the solutions are described in the second part of this post:|
- BF1942 not starting at all, or showing a "Invalid videomode specified" error message when configuring it to run in windowed mode. The issue is caused by lacking support for the 800x600 resolution, especially on some laptops. One way to fix it is by adding 800x600 manually as a custom resolution through CRU (Custom Resolution Utility) or through the graphics card configuration software. Possible d3d8.dll solution: dgVoodoo2;
- The game crashes when pressing Esc to go to the menu, or when changing maps (on some computers). Reported d3d8.dll solution: dgVoodoo2;
- Low framerates due to the game running on an integrated GPU on computers which also have a better GPU in them (switchable graphics). nVidia, for example, forces games to run on integrated (if there is one), depending on the version of DirectX that the game uses (source). Solutions: almost certainly dgVoodoo2 or probably d3d8to9 or WineD3D for Windows would also work (test needed);
- There is added input lag and/or occasional stuttering due to Windows 10 forcing VSync (vertical synchronization) due to fake fullscreen mode, even though you haven't enabled VSync anywhere (more details here). This bug seems to be very widespread. However, many players prefer VSync's smoother motion and lack of tear lines anyway, so you won't necessarily want to re-disable it. Solutions: any of the d3d8.dll alternatives below;
- Missing crosshairs, graphical bugs on the menu, etc. when playing on AMD RX 5000 series GPUs (maybe others too). Reported d3d8.dll solution: dgVoodoo2;
Before you continue: if you aren't affected or bothered by any of these issues I don't recommend installing a d3d8.dll substitute.
By placing a d3d8.dll file (plus few more files in some cases) only in the game folder it makes the game use those files instead of Windows' ones (unless Microsoft or an antivirus software decides that they won't allow this) and it won't affect other things on the computer. To uninstall, you can just delete the files which you added to the game folder. Here are the d3d8.dll alternatives that have been suggested and tested to some extent with BF1942 (they're made as generic fixes/tools that can improve many old games):
- d3d8.dll from Windows 10 up to Build 17134 patched to allow true fullscreen mode (see here). This is supposed to be a minimal modification over the original old d3d8.dll made by Microsoft that fixes the issue of forced VSync (but potentially also any other d3d8.dll problems which didn't exist on older versions of Windows 10);
- d3d8to9 - an open source d3d8.dll alternative which essentially lets games like Battlefield 1942 use Direct3D 9 instead of Direct3D 8 (download page on Github). Made by the author of ReShade. It doesn't change things radically, so it seems to be a safe way to fix a couple of the problems;
- dgVoodoo2 - radically converts many games' use of old Direct3D or Glide into Direct3D 10, 11 or 12, to try to fix and improve many things. It also comes with a configuration utility which can help you configure a mix of slight visual improvements, in some cases significant frame rate improvements (even if you don't have the problem of switchable graphics described earlier) and other things. However, new problems may be introduced, depending on configuration. Later I want to share more details and configuration file(s). It is a closed source, but highly regarded and popular piece of software for what it does: site, a wiki article
- WineD3D for Windows - this wraps DirectX 1-11 to OpenGL instead (see here). It's perhaps an even more radical conversion - it is a piece of software originally made for running Windows games on Linux, but I didn't notice a difference in how the game looks.
If you test more cases and things (e.g. I only experienced the forced VSync bug, so I could only really test that myself) or have other suggestions, please share.
Added (2021-10-08, 4:24 PM)
After doing a little bit of testing it seems that it's possible to achieve a lot higher frame rates in FHSW, like going from 250 to 400 in one case, by just using d3d8to9
Also, al13326 on Discord suggested yet another wrapper - DXVK (it's like WineD3D, but it translates DirectX 9, 10 or 11 into Vulkan instead) which he used to fix a couple of problems he encountered when using d3d8to9. I didn't encounter them, but I tested it anyway.
I also tested various settings for dgVoodoo2 (it can be configured with a bundled configuration utility). dgVoodoo2's default output is Direct3D 11 with which there is a bug with the water textures. Also the author says the Direct3D 11 output currently doesn't work with AMD GPUs. Thankfully about a year ago the author has added Direct3D 12 as a supported output, and it doesn't have these or any other obvious problems. On the other hand, Direct3D 11 increased my framerates significantly, while Direct3D 12 didn't.
Other benefits of dgVoodoo2 include a few settings for improving visual quality (a better shader) and for forcing the game to always run at a given resolution, including the menu, which saves you a little bit of time and problems related to the hardcoded switching to 800x600 and back which the game normally does during each launch and map change. For better troubleshooting, especially for modders/mappers, you can switch fullscreen mode (which prevents BF1942 from showing some error messages) off on the game side, while forcing fullscreen on or off through dgVoodoo2 by pressing Alt+Enter. This way you will be able to play on the whole screen and with no forced VSync while at the same time you won't miss any error message.
I prepared a couple of configuration files for dgVoodoo2, depending on whether you want slightly better visual quality or higher performance (but with a water texture bug). First install dgVoodoo2 by extracting the files from dgVoodoo2_75_1.zip\MS\x86\ to the Battlefield 1942 folder and then extract one of my config files into the same folder.
Based on my very limited test (just one location on the map Forgotten Hometown) here's how the various wrappers' frame rates compare to each other:
d3d8to9 > d3d8to9+DXVK > dgVoodoo2 D3D11 > dgVoodoo2 D3D12 > D3D8 (Windows default) >> WineD3D for Windows (don't use this one on Windows)
Of course there are many factors, such as different 3D scenes, different GPU, CPU and other hardware, etc. which together can make enough of a difference to change this ranking.
So, to anyone who wants to improve their frame rates I'd recommend first trying and comparing d3d8to9 vs. dgVoodoo2 plus my 'performance' config above, and then you can test other options too if desired or needed.
Added (2021-11-02, 4:18 PM)
A few updates:
I had to disable Phong shading in my "Quality" config file for dgVoodoo2 due to very low FPS on Battle of Abyssinia around the wheat field. Now there's almost no visual improvement compared to Windows' standard d3d8.dll, except higher FPS.
I noticed a couple of quality degradations when using d3d8to9: terrain geometry is a little less accurate at a distance and clips through objects more than normal; soldier animations are frozen at a distance.
Air Troll a.k.a. starking018