First post, by Dege
I'm posting about it before I forget to (last week I had a look at it):
Your wrapper is probably the best thing I've come across for retro gaming on Windows 10 as I've gotten every game I tested on it to work! I have one game called Delta Force 2 and it has support for both software rendering and semi-hardware rendering. The thing is that in hardware mode the objects being rendered using Direct3D (I believe uses DirectX 6) get shown through the terrain (rendered in software mode even if the renderer is set to full-screen hardware) even when they are behind it. If I use dgVoodoo 2 to try and fix it it will actually make everything that's rendering in Direct3D disappear so only the terrain is in the scene with the fonts on the characters that represent their friendly tag. It would be cool if you could look into this. I would love to see the day I can finally play this lost treasure while making use of its 3d acceleration on modern hardware.
I even heard that the chipsets listed such as the nVidia TNT 2 had issues with the game too. I even got a GeForce 7600 GS using drivers from around June 2008 to render everything correctly in hardware mode but at a lower than anticipated framerate. Your work is very great and you should consider contacting game companies with your fixes. Many people would love to see certain retro games able to play once again!
PS. It would be nice if there was an option to use either hard or soft shadows in when the game is using shadow buffer mode such as in Splinter Cell 😀
Well, briefly: I cannot beleive that this game ever worked on any hw with its d3d (hw) renderer. 😀
I patched the game to 1.06.15.
This game has a voxel based software terrain renderer. The main problem for most hw I guess is that this game write the rendered terrain and its depth values to the back- and Z-buffer by the CPU, prior to rendering objects by D3D.
Accessing the z-buffer through CPU was a problem for even old GPU's, as far as I remember (it still causes glitches natively with my videocard).
Two main problems:
1) 3D rendered object gets shown through the terrain
Terrain depth values are 24 bit (the game always assumes z-buffer with 24 bits).
The main engine seems to feed the renderer dll's with 20-bit depth values for the non-terrain objects, but the hw renderer dll interprets them as 28 bit.
Integer depth values are shifted down by 4 bits on the exe side, but the scaling factor for normalizing the values are shifted up by 4 bits in the renderer dll. This ends up in too small z's for the objects, that's why they are always visible.
The normalizing coefficient seems to be constant, it already has it's value when the renderer dll is loaded.
I experimentally changed it to the (presumably) correct value and this problem is gone, but unfortunately there still are glitches.
Some region of the terrain z-values is corrupt.
2) No fog for 3D objects
The game utilizes precalulcated vertex fog for 3D objects, but fog blending is never enabled for rendering, and the main engine always feed the renderer with fog values of zero. 😕 😒 😵
Neither the coefficient factor nor the calculation of the fog values seem to be dependent on the underlying hw, not even on D3D. They are just hardcoded constants.
The renderer queries the caps of the D3DDevice but checks for nothing special, only max texture size, vertex fog, alphablending and such.
So, I don't know what to say about this. Seems to be a semi finished renderer dll for me.
BTW, I attach the modified one, if someone want to try it. It should work with dgVoodoo 2.53.