narzoul / DDrawCompat

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

Does not work for a single game (out of a selection of 204 abandonware games) #257

Closed sYnapZiX closed 7 months ago

sYnapZiX commented 7 months ago

Just makes a black screen. Sound is still playing, inputs are still reacting. After a while system gets slowed down to a crawl. Great work there!

narzoul commented 7 months ago

Although you don't really deserve any response to this and I should just delete this thread, I'll keep this here for the future, since I have low expectations of people in general and therefore I have a feeling you're not the last person I'll have to give similar advice to:

sYnapZiX commented 7 months ago

You have low expectations of people and yet still feel that you have any power to decide who's elligeble to recieve a response? Who do you think you are? A higher being above all others?

It's hard to make a useful error report if the software in question does nothing but produce a black blank screen. There are no log files produced by the dll or the game, no error message gets displayed, nothing, so what should i do to give you an accurate error description? After an entire afternoon of testing with literally no change and result whatsoever, it just gets frustrating.

What i did: Installed the game from CD. I downloaded the latest (at that day) release of DDrawCompat (0.5.0). Extracted and copied over the single DLL file (ddraw.dll) to the root of the game's directory (where the exe to start resides). I start the game, the screen goes black, sound continues to play (thanks to the sound i also can hear that inputs are still responding) and after about 30sec-1min the entire system begins to stutter, mouse movement gets insanely sluggish and i'm not even able anymore to kill the process via task-manager so only a hard reset helps. Renaming the DLL to dciman32.dll did not change the behaviour in any way. Renaming the Executable did not change the behaviour in any way.

Additional Info: The game in question is H.E.D.Z. a Windows95 (DirectX 6, iirc) Game that i played as a kid. I also tried many other old games of the Windows95 era and all of them produce exactly the same result, i can't recall on which games exactly i tried it because i have a catalog of 204 abandonware games that are all from around the same time era, from Win95 DX5 to Win98 DX7 games, i only know i tried it on many different games (20+).

My System: OS: Windows 11 Pro x64 Mainboard: ASUS Crosshair VI Hero (AM4, DDR4) CPU: AMD Ryzen 3700x (Not Overclocked) RAM: 32gb G-Skill Trident DDR4 3600MHz GPU: ASUS TUF NVIDIA GeForce RTX 3080Ti (Factory Overclocked) Sound: Onboard Realtek

All Drivers are the latest versions and Windows has the latest 23H2 update.

I tried various compatibility settings like: Win95, Win98, Disabling Fullscreen Optimizations, Starting in 640x480 Resolution, Starting in Low Color Mode, Admin Rights and every combination of those mentioned.

Other wrapper like tools like: dgVoodoo, nGlide, DxWnd work fine in other games but not for that particular one (H.E.D.Z.) since the game does not support Glide and DxWnd does not seem to detect/hook the game.

Thats all i can give regarding to that problem that can help in any way.

narzoul commented 7 months ago

You have low expectations of people and yet still feel that you have any power to decide who's elligeble to recieve a response? Who do you think you are? A higher being above all others?

I am the author of the project, so yes, I do get to decide. You are not entitled to support.

To be clear, it's not that you haven't provided any information in your first post to help me solve your issue in any way that makes you undeserving of support. Many people make similar mistakes and I still help them. It's that you ended your initial post with a "Great work there!" remark that's directly disrespectful and belittles all the hard work and free time I've spent on this project in the past 8 years. That you still think you are entitled to support after such an entrance and haven't understood how this is a problem baffles me.

I'm continuing to offer support in this thread only because other people may have similar issues and it might help them. But I urge you to please be "respectful and empathetic" in your future posts, as the GitHub Community Guidelines outline. I haven't had to block a single person here in the past 8 years, but then again nobody has chosen to post disrespectful remarks yet. If you choose to continue in the same tone as you did in your previous posts, I'm just going to block you without further comments.

In the other issues that I directed you to, I posted about a build of previous commits between v0.4.0 and v0.5.0 which may be quite helpful in finding out what introduced this problem, assuming that the issue appeared after v0.4.0 only, but you still haven't clarified which releases you've tried and if the outcomes were any different. Let that be the next step, if you're still interested in resolving this issue and can do so in a respectful manner.

narzoul commented 7 months ago

I checked out this game (H.E.D.Z.). It has an issue with too many display resolutions, even natively, which results in a black screen. I solved it by restricting the enumerated resolutions in DDrawCompat.ini to the ones supported by the game: SupportedResolutions=320x240,512x384,640x480,800x600,1024x768,1152x864,1280x1024

I'm not sure if it's also sensitive to the number of different refresh rates supported, so further restrictions might be needed.

After that, the game seemed to work fine on my end, except that it might still ask for a CD later, but that's kind of out of scope for DDrawCompat to solve. I tested it with a 3060Ti on Windows 11 23H2, so not that different from your system.

Since you also have black screen issues with other games, maybe it would be better to start with a less troublesome one, e.g. one that starts fine natively without any wrappers, if you have something like that.

sYnapZiX commented 7 months ago

Thanks for the help, i'm sadly a little bit short on spare time this week due to work so i could not test any further and give any feedback to your suggestions. I honestly didn't even think the display resolutions could be the culprit since i left it on default (640x480) same as i do in other games with other wrappers so i was under the assumption that this will be fine. Sadly i don't have any games that still work natively in Windows 11, the furthest i can get in some of them natively are the menus. Most of the old games i have do support glide so i use dgvoodoo on them and in some rare cases nglide. As soon as i have some free time left i will test your suggestions, and yes i do think that the game is in some way refresh rate sensitive, i remember there being weird bugs with some effects if the fps are too high. This particular game also seems to have some weird quirks with the way it renders. Even though the fps can be as high as you want, it always looks like 30fps. I can remember that this game was very sensitive even on native computers back then. Back then i had a riva tnt2 ultra and with that card the fps even got too high in places and it did behave weirdly.

Tl;Dr:

Thanks for the help, i will try and report back as soon as i have time available!

Gesendet von Outlook für Androidhttps://aka.ms/AAb9ysg


From: narzoul @.> Sent: Tuesday, November 21, 2023 11:51:34 PM To: narzoul/DDrawCompat @.> Cc: sYnapZiX @.>; Author @.> Subject: Re: [narzoul/DDrawCompat] Does not work for a single game (out of a selection of 204 abandonware games) (Issue #257)

I checked out this game. It has an issue with too many display resolutions, even natively, which results in a black screen. I solved it by restricting the enumerated resolutions in DDrawCompat.ini to the ones supported by the game: SupportedResolutions=320x240,512x384,640x480,800x600,1024x768,1152x864,1280x1024

I'm not sure if it's also sensitive to the number of different refresh rates supported, so further restrictions might be needed.

After that, the game seemed to work fine on my end, except that it might still ask for a CD later, but that's kind of out of scope for DDrawCompat to solve. I tested it with a 3060Ti on Windows 11 23H2, so not that different from your system.

Since you also have black screen issues with other games, maybe it would be better to start with a less troublesome one, e.g. one that starts fine natively without any wrappers, if you have something like that.

— Reply to this email directly, view it on GitHubhttps://github.com/narzoul/DDrawCompat/issues/257#issuecomment-1821823548, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AOIYIMUS2WFFFA5CTFPWXXDYFUV7NAVCNFSM6AAAAAA7POV7GOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRRHAZDGNJUHA. You are receiving this because you authored the thread.Message ID: @.***>

narzoul commented 7 months ago

It's not the resolution that you select in the game settings that causes the problem. It's that some games attempt to save all resolutions supported by your system into a limited list, and the list can overflow, thereby overwriting other important memory and causing problems. The way I found out that this is the problem was that without any wrappers, the game only worked for me after setting Windows 95 or 98 compatibility mode on the executable. So I set the same in Compatibility Administrator and narrowed down the list of shims that it adds to a single one needed to start the game: HideDisplayModes. It even has a nice description of the issue it solves:

Display modes are enumerated differently for Windows XP than they were on Windows 9x. This may cause issues for some applications when they attempt to list all of the supported display modes and store that information in a fixed-length buffer. This compatibility fix reduces the number of display modes reported to mimic the behavior of Windows 9x. Applies to: Windows 95, Windows 98

The SupportedResolutions setting achieves a similar thing in DDrawCompat. The reason I mentioned refresh rates is because if the game is enumerating and saving those also for each supported resolution, then if your system supports a lot of refresh rates, it could exhaust and overflow the game's buffer faster.

Anyway, I don't understand why you're not getting a log file from DDrawCompat. For me, a log file is already created when the windowed launcher menu is displayed, before entering full screen mode. I can think of two possibilities:

sYnapZiX commented 7 months ago

Hello again, i had some spare time this morning because i woke up early. I tried the way with the .manifest file which caused the logfile to appear (so i can now confirm that ddraw.dll is indeed loaded correctly). I created an ini file and restricted resolutions to just 640x480 (which should help also with too many refresh rates) and now i can indeed confirm that the game is working fine (apart from some minor audio issues, but that of course has nothing to do with your DLL) with 4x resolution scale and the fpslimiter set to 30. Sometimes (but very rarely, maybe 1 out of 10 launches, the game freezes on the first drawn frame but that is a minor error and i do believe that this is some weirdness with the game because the log file shows the same things as when launched correctly)

Are you by any chance interested in a configuration utility for your DLL? I could make one for you in VB.NET free of charge (programming is a hobby of mine and of course you would also get full access to the source code on github so that you could see any changes made)

This could maybe make things easier for less tech savy users.

Gesendet von Outlook für Androidhttps://aka.ms/AAb9ysg


From: narzoul @.> Sent: Wednesday, November 22, 2023 12:39:25 AM To: narzoul/DDrawCompat @.> Cc: sYnapZiX @.>; Author @.> Subject: Re: [narzoul/DDrawCompat] Does not work for a single game (out of a selection of 204 abandonware games) (Issue #257)

It's not the resolution that you select in the game settings that causes the problem. It's that some games attempt to save all resolutions supported by your system into a limited list, and the list can overflow, thereby overwriting other important memory and causing problems. The way I found out that this is the problem was that without any wrappers, the game only worked for me after setting Windows 95 or 98 compatibility mode on the executable. So I set the same in Compatibility Administrator and narrowed down to list of shims that it adds to a single one needed to start the game: HideDisplayModes. It even has a nice description of the issue it solves:

Display modes are enumerated differently for Windows XP than they were on Windows 9x. This may cause issues for some applications when they attempt to list all of the supported display modes and store that information in a fixed-length buffer. This compatibility fix reduces the number of display modes reported to mimic the behavior of Windows 9x. Applies to: Windows 95, Windows 98

The SupportedResolutions setting achieves a similar thing in DDrawCompat. The reason I mentioned refresh rates is because if the game is enumerating and saving those also for each supported resolution, then if your system supports a lot of refresh rates, it could exhaust and overflow the game's buffer faster.

Anyway, I don't understand why you're not getting a log file from DDrawCompat. For me, a log file is already created when the windowed launcher menu is displayed, before entering full screen mode. I can think of two possibilities:

— Reply to this email directly, view it on GitHubhttps://github.com/narzoul/DDrawCompat/issues/257#issuecomment-1821865475, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AOIYIMVNRTLAEGLXX6IBJCTYFU3S3AVCNFSM6AAAAAA7POV7GOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRRHA3DKNBXGU. You are receiving this because you authored the thread.Message ID: @.***>

narzoul commented 7 months ago

Thanks, but I'm not looking for code contributions at the moment. Some kind of config utility will be added in a later release, but currently it's only in planning phase and I'd rather focus on fixing more issues first.

sYnapZiX commented 7 months ago

Totally understandable. Should you change your mind at a later date just send me a mail!

Gesendet von Outlook für Androidhttps://aka.ms/AAb9ysg


From: narzoul @.> Sent: Wednesday, November 22, 2023 8:30:37 PM To: narzoul/DDrawCompat @.> Cc: sYnapZiX @.>; Author @.> Subject: Re: [narzoul/DDrawCompat] Does not work for a single game (out of a selection of 204 abandonware games) (Issue #257)

Thanks, but I'm not looking for code contributions at the moment. Some kind of config utility will be added in a later release, but currently it's only in planning phase and I'd rather focus on fixing more issues first.

— Reply to this email directly, view it on GitHubhttps://github.com/narzoul/DDrawCompat/issues/257#issuecomment-1823393344, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AOIYIMTEKN7MMHIDM2QTS43YFZHF3AVCNFSM6AAAAAA7POV7GOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRTGM4TGMZUGQ. You are receiving this because you authored the thread.Message ID: @.***>