elishacloud / dxwrapper

Fixes compatibility issues with older games running on Windows 10/11 by wrapping DirectX dlls. Also allows loading custom libraries with the file extension .asi into game processes.
zlib License
1.23k stars 90 forks source link

Lego Rock Raiders - Incompatibility / Black screen #258

Open master801 opened 7 months ago

master801 commented 7 months ago

OS: Windows 10 Pro 22H2 (19045.4046) CPU: AMD Ryzen 1600 3.20 GHz RAM: 16GB 2400 MHz GPU: Gigabyte AMD RX 580 GAMING 4G (4GB) - AMD Adrenalin 24.1.1

Lego Rock Raider (SecuROM version) d3drm.dll - 5.1.26000.0 - PCGamingWiki version (game will not load at all with bundled CD DirectX6 D3DRM.DLL - 4.06.02.436)

Problem: When dxwrapper is used to wrap stub ddraw.dll, and when options Compatibility/DDrawCompat and DDrawCompat/ none/DDrawCompat20/DDrawCompat21/DDrawCompat31, are both enabled, the game will show a black screen with audio playing and the game still playable, albeit not visible.

Note: Compatibility options ForceTermination and ResetScreenRes are only enabled because when the game hangs and cannot be exited safely. It needs to be closed via task bar (cannot see Task Manager to end process) and the screen resolution will be stuck in 640x480 (when process is ended in Task Manager, screen resolution does not go back to normal - needs to be reset via Windows' Display Settings).

Game Settings:

Mode Selection

  • Device
    • Direct3D HAL (Microsoft Direct3D Hardware acceleration through Direc....)
  • Screen Modes:
    • Full Screen
    • 640x480 (16 bit)
dxwrapper.ini > ;; Config file for DirectX DLL Wrapper > ;; > ;; For details, see: https://github.com/elishacloud/dxwrapper/wiki/Configuration-%28advanced%29 > ;; > [General] > RealDllPath = AUTO > WrapperMode = AUTO > LoadCustomDllPath = > ExcludeProcess = > IncludeProcess = > RunProcess = > WaitForProcess = 0 > DisableLogging = 0 > > [Plugins] > LoadPlugins = 0 > LoadFromScriptsOnly = 0 > > [Compatibility] > Dd7to9 = 0 > D3d8to9 = 0 > DDrawCompat = 1 > Dinputto8 = 0 > DisableHighDPIScaling = 0 > DisableGameUX = 0 > DxWnd = 0 > EnableDdrawWrapper = 0 > EnableD3d9Wrapper = 0 > EnableDinput8Wrapper = 0 > EnableDsoundWrapper = 0 > ForceTermination = 1 > HandleExceptions = 0 > ResetScreenRes = 1 > SingleProcAffinity = 0 > > [Hooking] > DdrawHookSystem32 = 0 > D3d8HookSystem32 = 0 > D3d9HookSystem32 = 0 > DinputHookSystem32 = 0 > Dinput8HookSystem32 = 0 > DsoundHookSystem32 = 0 > > [DDrawCompat] > DDrawCompat20 = 0 > DDrawCompat21 = 0 > DDrawCompat31 = 1 > DDrawCompatDisableGDIHook = 0 > DDrawCompatNoProcAffinity = 0 > > [ddraw] > ConvertToDirectDraw7 = 0 > ConvertToDirect3D7 = 0 > DdrawOverrideBitMode = 0 > DdrawResolutionHack = 0 > DirectShowEmulation = 0 > > [Dd7to9] > DdrawAutoFrameSkip = 0 > DdrawEmulateSurface = 0 > DdrawFixByteAlignment = 0 > DdrawRemoveScanlines = 0 > DdrawRemoveInterlacing = 0 > DdrawReadFromGDI = 0 > DdrawWriteToGDI = 0 > DdrawEnableMouseHook = 0 > DdrawCreateDeviceEarly = 0 > DdrawDisableDirect3DCaps = 0 > DdrawLimitDisplayModeCount = 0 > DdrawUseNativeResolution = 0 > DdrawClippedWidth = 0 > DdrawClippedHeight = 0 > DdrawOverrideWidth = 0 > DdrawOverrideHeight = 0 > DdrawOverridePrimaryWidth = 0 > DdrawOverridePrimaryHeight = 0 > DdrawOverrideStencilFormat = 0 > DdrawIntegerScalingClamp = 0 > DdrawMaintainAspectRatio = 0 > > [d3d9] > AnisotropicFiltering = 0 > AntiAliasing = 0 > CacheClipPlane = 0 > EnableVSync = 0 > ForceVsyncMode = 0 > OverrideRefreshRate = 0 > LimitPerFrameFPS = 0 > EnableWindowMode = 0 > WindowModeBorder = 0 > SetInitialWindowPosition = 0 > InitialWindowPositionLeft = 0 > InitialWindowPositionTop = 0 > FullscreenWindowMode = 0 > ForceExclusiveFullscreen = 0 > ForceMixedVertexProcessing = 0 > ForceSystemMemVertexCache = 0 > ForceDirect3D9On12 = 0 > GraphicsHybridAdapter = 0 > > [FullScreen] > FullScreen = 0 > ForceWindowResize = 0 > SendAltEnter = 0 > WaitForWindowChanges = 0 > LoopSleepTime = 120 > WindowSleepTime = 500 > SetFullScreenLayer = 0 > SetNamedLayer = > IgnoreWindowName = > > [dinput8] > FilterNonActiveInput = 0 > > [dsound] > Num2DBuffers = 0 > Num3DBuffers = 0 > ForceCertification = 0 > ForceExclusiveMode = 0 > ForceSoftwareMixing = 0 > ForceHardwareMixing = 0 > ForceHQ3DSoftMixing = 0 > ForceNonStaticBuffers = 0 > ForceVoiceManagement = 0 > ForcePrimaryBufferFormat = 0 > PrimaryBufferBits = 16 > PrimaryBufferSamples = 44100 > PrimaryBufferChannels = 2 > AudioClipDetection = 0 > AudioFadeOutDelayMS = 20 > FixSpeakerConfigType = 1 > StoppedDriverWorkaround = 0 > > [AppCompatData] > LockEmulation = 0 > BltEmulation = 0 > ForceLockNoWindow = 0 > ForceBltNoWindow = 0 > LockColorkey = 0 > FullscreenWithDWM = 0 > DisableLockEmulation = 0 > EnableOverlays = 0 > DisableSurfaceLocks = 0 > RedirectPrimarySurfBlts = 0 > StripBorderStyle = 0 > DisableMaxWindowedMode = 0 > > [WriteMemory] > VerificationAddress = 0x00000000 > VerificationBytes = 0x00 > ResetMemoryAfter = 0 > AddressPointer = 0x00000000 > BytesToWrite = 0x00
dxwrapper-legorr.log > 12836 14:39:52.462 Starting DxWrapper v1.1.6900.22 > 12836 14:39:52.462 Running from: C:\Users\Master\Downloads\Rock Raiders - dxwrapper\dxwrapper.dll > 12836 14:39:52.462 Reading config file: C:\Users\Master\Downloads\Rock Raiders - dxwrapper\dxwrapper.ini > 12836 14:39:52.462 Gigabyte Technology Co., Ltd. AB350-Gaming 3 Default string (Desktop) > 12836 14:39:52.462 Gigabyte Technology Co., Ltd. AB350-Gaming 3-CF x.x (Desktop) > 12836 14:39:52.462 Radeon RX 580 Series > 12836 14:39:52.463 Windows 10 Enterprise 64-bit (10.0.19041) > 12836 14:39:52.463 LegoRR.exe (PID:12264) > 12836 14:39:52.468 Environment variable __COMPAT_LAYER = "" > 12836 14:39:52.468 Loading 'ddraw.dll'... > 12836 14:39:52.468 Hooking ddraw.dll APIs... > 12836 14:39:52.468 Enabling DDrawCompat > 12836 14:39:52.468 Process path: C:\Users\Master\Downloads\Rock Raiders - dxwrapper\LegoRR.exe > 12836 14:39:52.468 Loading DDrawCompat dynamically from C:\Users\Master\Downloads\Rock Raiders - dxwrapper\dxwrapper.dll > 12836 14:39:52.471 Loaded library: winmm.dll > 12836 14:39:52.473 Loaded library: uxtheme.dll > 12836 14:39:52.473 DDrawCompat v0.3.1 version loaded successfully > 12836 14:39:52.473 DxWrapper loaded! > 1316 14:39:52.574 Starting fullscreen thread... > 12836 14:39:52.737 Installing display mode hooks > 12836 14:39:52.761 Installing registry hooks > 12836 14:39:52.761 Installing Direct3D driver hooks > 12836 14:39:52.761 Installing Win32 hooks > 12836 14:39:52.766 Hooking user mode display driver: C:\Windows\System32\DriverStore\FileRepository\u0399660.inf_amd64_d7fa3539ce499e50\B399655\aticfx32.dll+0x5da20 > 12836 14:39:52.797 Dynamic vertex buffers are available > 12836 14:39:52.797 Dynamic index buffers are available > 12836 14:39:52.800 Checking source color key support: passed > 12836 14:39:52.802 Incorrect z-buffer bit depth capabilities detected; changed from "16, 32" to "16, 24" > 12836 14:39:52.807 Installing DirectDraw hooks > 12836 14:39:52.808 Installing Direct3D hooks > 12836 14:39:52.816 Installing GDI hooks > 8372 14:39:52.832 Loaded library: dwmapi.dll > 12836 14:39:52.833 Finished installing hooks > 1316 14:40:32.082 Process not exiting, attempting to terminate process... > 1316 14:40:32.082 Reseting screen resolution... > 1316 14:40:33.269 Utils::Fullscreen::CheckForTermination Terminating process!

When Compatibility options Dd7to9 / D3d8to9 / EnableDdrawWrapper / EnableD3d9Wrapper and/or ddraw options ConvertToDirectDraw7 and ConvertToDirect3D7 are enabled, the game will not detect these options properly and will show the error No supported screen modes found.

As a side note, I also tested the game with only DDrawCompat (v0.5.1) and the game worked perfectly fine with Compatibility Mode set to Windows 98 (AVI cutscenes won't play if this isn't enabled), even scaling to fullscreen 1080p.

This is the log file for DDrawCompat 0.5.1:

DDrawCompat-LegoRR.log > 18:34:35.294 Process path: C:\Program Files (x86)\LEGO Media\Games\Rock Raiders\LegoRR.exe > 18:34:35.294 Loading DDrawCompat statically from C:\Program Files (x86)\LEGO Media\Games\Rock Raiders\DDRAW.dll > 18:34:35.294 Environment variable __COMPAT_LAYER = "DWM8And16BitMitigation RunAsAdmin Win98 Installer" > 18:34:35.294 Loading global config file: C:\ProgramData\DDrawCompat\DDrawCompat.ini > 18:34:35.294 File not found, skipping > 18:34:35.294 Loading user config file: C:\Users\Master\AppData\Local\DDrawCompat\DDrawCompat.ini > 18:34:35.294 File not found, skipping > 18:34:35.294 Loading directory config file: C:\Program Files (x86)\LEGO Media\Games\Rock Raiders\DDrawCompat.ini > 18:34:35.294 File not found, skipping > 18:34:35.294 Loading process config file: C:\Program Files (x86)\LEGO Media\Games\Rock Raiders\DDrawCompat-LegoRR.ini > 18:34:35.294 File not found, skipping > 18:34:35.294 Loading overlay config file: C:\Program Files (x86)\LEGO Media\Games\Rock Raiders\DDrawCompatOverlay-LegoRR.ini > 18:34:35.295 File not found, skipping > 18:34:35.295 Final configuration: > 18:34:35.295 [default] AlignSysMemSurfaces = on > 18:34:35.295 [default] AltTabFix = off > 18:34:35.295 [default] AlternatePixelCenter = off > 18:34:35.295 [default] Antialiasing = off > 18:34:35.295 [default] BltFilter = point > 18:34:35.295 [default] ColorKeyMethod = auto > 18:34:35.295 [default] ConfigHotKey = shift+f11 > 18:34:35.295 [default] ConfigRows = allrw, allro > 18:34:35.295 [default] ConfigTransparency = alpha(90) > 18:34:35.295 [default] CpuAffinity = 1 > 18:34:35.295 [default] CpuAffinityRotation = on > 18:34:35.295 [default] CrashDump = off > 18:34:35.295 [default] DepthFormat = app > 18:34:35.295 [default] DesktopColorDepth = initial > 18:34:35.295 [default] DesktopResolution = desktop > 18:34:35.295 [default] DisplayAspectRatio = app > 18:34:35.295 [default] DisplayFilter = bilinear(0) > 18:34:35.295 [default] DisplayRefreshRate = app > 18:34:35.295 [default] DisplayResolution = desktop > 18:34:35.295 [default] DpiAwareness = permonitor > 18:34:35.295 [default] FontAntialiasing = app > 18:34:35.295 [default] ForceD3D9On12 = off > 18:34:35.295 [default] FpsLimiter = off > 18:34:35.295 [default] FullscreenMode = borderless > 18:34:35.295 [default] LogLevel = info > 18:34:35.295 [default] PalettizedTextures = off > 18:34:35.295 [default] RemoveBorders = off > 18:34:35.295 [default] RenderColorDepth = appd8 > 18:34:35.295 [default] ResolutionScale = app(1) > 18:34:35.295 [default] ResolutionScaleFilter = point > 18:34:35.295 [default] SoftwareDevice = rgb > 18:34:35.295 [default] SpriteDetection = off > 18:34:35.295 [default] SpriteFilter = app > 18:34:35.295 [default] SpriteTexCoord = app > 18:34:35.295 [default] StatsAggregateTime = 3 > 18:34:35.295 [default] StatsColumns = label, cur, avg, min, max > 18:34:35.295 [default] StatsHotKey = shift+f12 > 18:34:35.295 [default] StatsPosX = right > 18:34:35.295 [default] StatsPosY = top > 18:34:35.295 [default] StatsRows = label, presentrate, fliprate, blitcount, lockcount, ddiusage > 18:34:35.295 [default] StatsTransparency = alpha(75) > 18:34:35.295 [default] StatsUpdateRate = 5 > 18:34:35.295 [default] SupportedDepthFormats = all > 18:34:35.295 [default] SupportedResolutions = native, 640x480, 800x600, 1024x768 > 18:34:35.295 [default] SupportedTextureFormats = all > 18:34:35.295 [default] TerminateHotKey = ctrl+alt+end > 18:34:35.295 [default] TextureFilter = app > 18:34:35.295 [default] ThreadPriorityBoost = off > 18:34:35.295 [default] VSync = app > 18:34:35.295 [default] VertexBufferMemoryType = sysmem > 18:34:35.295 [default] WinVersionLie = off > 18:34:35.318 Initial DPI awareness: unaware > 18:34:35.319 DPI awareness was successfully changed to "permonitor" via SetProcessDpiAwarenessContext > 18:34:35.319 Primary CPU group number: 0 > 18:34:35.319 Physical to logical CPU core mapping for efficiency class 0: > 18:34:35.319 Physical core #1: 1, 2 > 18:34:35.319 Physical core #2: 3, 4 > 18:34:35.319 Physical core #3: 5, 6 > 18:34:35.319 Physical core #4: 7, 8 > 18:34:35.319 Physical core #5: 9, 10 > 18:34:35.319 Physical core #6: 11, 12 > 18:34:35.319 Current CPU affinity: 1 > 18:34:35.319 Applying configured CPU affinity: 1 > 18:34:35.319 CPU affinity rotation is enabled > 18:34:35.319 DDrawCompat loaded successfully > 18:34:35.645 Installing display mode hooks > 18:34:36.205 Installing registry hooks > 18:34:36.205 Installing Direct3D driver hooks > 18:34:36.211 Hooking user mode display driver: C:\Windows\System32\DriverStore\FileRepository\u0399660.inf_amd64_d7fa3539ce499e50\B399655\aticfx32.dll+0x5da20 > 18:34:36.229 Supported resource formats: > 18:34:36.229 {D3DDDIFMT_X1R5G5B5,0xca701f,0x8a,0x8a,16} > 18:34:36.229 {D3DDDIFMT_A1R5G5B5,0xca701f,0x8a,0x8a,16} > 18:34:36.229 {D3DDDIFMT_A4R4G4B4,0xc2701f,0x8a,0x8a,16} > 18:34:36.229 {D3DDDIFMT_R5G6B5,0xca7c1f,0x8a,0x8a,16} > 18:34:36.229 {D3DDDIFMT_X8R8G8B8,0xdafc1f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_A8R8G8B8,0xdaf11f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_X8B8G8R8,0xdaf11f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_L8,0xc2701f,0x0,0x0,8} > 18:34:36.229 {D3DDDIFMT_P8,0x5000,0x0,0x0,8} > 18:34:36.229 {FOURCC(M2IA),0x4000,0x0,0x0,0} > 18:34:36.229 {D3DDDIFMT_V8U8,0x831007,0x0,0x0,16} > 18:34:36.229 {D3DDDIFMT_X8L8V8U8,0x31007,0x0,0x0,32} > 18:34:36.229 {D3DDDIFMT_Q8W8V8U8,0x83501f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_V16U16,0x831007,0x0,0x0,32} > 18:34:36.229 {D3DDDIFMT_A2W10V10U10,0x31007,0x0,0x0,32} > 18:34:36.229 {D3DDDIFMT_Q16W16V16U16,0x83501f,0x8a,0x8a,64} > 18:34:36.229 {FOURCC(DXT1),0x82e007,0x0,0x0,0} > 18:34:36.229 {FOURCC(DXT2),0x82e007,0x0,0x0,0} > 18:34:36.229 {FOURCC(DXT3),0x82e007,0x0,0x0,0} > 18:34:36.229 {FOURCC(DXT4),0x82e007,0x0,0x0,0} > 18:34:36.229 {FOURCC(DXT5),0x82e007,0x0,0x0,0} > 18:34:36.229 {FOURCC(ATI1),0x821007,0x0,0x0,8} > 18:34:36.229 {FOURCC(ATI2),0x821007,0x0,0x0,8} > 18:34:36.229 {D3DDDIFMT_A4L4,0x827007,0x0,0x0,8} > 18:34:36.229 {D3DDDIFMT_A8L8,0x827007,0x0,0x0,16} > 18:34:36.229 {D3DDDIFMT_A2B10G10R10,0xca701f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_G16R16,0xc2701f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_L16,0xc2701f,0x0,0x0,16} > 18:34:36.229 {D3DDDIFMT_A2R10G10B10,0xca7c1f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_A16B16G16R16F,0xca701f,0x8a,0x8a,64} > 18:34:36.229 {D3DDDIFMT_A16B16G16R16,0xca701f,0x8a,0x8a,64} > 18:34:36.229 {D3DDDIFMT_R16F,0xc2701f,0x8a,0x8a,16} > 18:34:36.229 {D3DDDIFMT_G16R16F,0xc2701f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_R32F,0xc2701f,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_G32R32F,0xc2701f,0x8a,0x8a,64} > 18:34:36.229 {D3DDDIFMT_A32B32G32R32F,0xca701f,0x8a,0x8a,128} > 18:34:36.229 {D3DDDIFMT_R8,0xc2701f,0x8a,0x8a,8} > 18:34:36.229 {D3DDDIFMT_G8R8,0xc2701f,0x8a,0x8a,16} > 18:34:36.229 {FOURCC(RESZ),0xc2701f,0x0,0x0,32} > 18:34:36.229 {D3DDDIFMT_D16_LOCKABLE,0x10c0,0x0,0x0,16} > 18:34:36.229 {D3DDDIFMT_D16,0x10c1,0x8a,0x8a,16} > 18:34:36.229 {D3DDDIFMT_X8D24,0x10c1,0x8a,0x8a,32} > 18:34:36.229 {D3DDDIFMT_D32F_LOCKABLE,0x10c1,0x0,0x0,32} > 18:34:36.229 {D3DDDIFMT_S8D24,0x10c1,0x8a,0x8a,32} > 18:34:36.229 {FOURCC(DF16),0x10c1,0x8a,0x8a,16} > 18:34:36.229 {FOURCC(DS16),0x10c1,0x8a,0x8a,16} > 18:34:36.230 {FOURCC(DF24),0x10c1,0x8a,0x8a,32} > 18:34:36.230 {FOURCC(INTZ),0x10c1,0x0,0x0,32} > 18:34:36.230 {FOURCC(NULL),0xc2701f,0x8a,0x8a,32} > 18:34:36.230 {D3DDDIFMT_A8,0xc2701f,0x0,0x0,8} > 18:34:36.230 {FOURCC(UYVY),0x7000,0x0,0x0,16} > 18:34:36.230 {FOURCC(YUY2),0x7000,0x0,0x0,16} > 18:34:36.230 {FOURCC(NV12),0x7000,0x0,0x0,12} > 18:34:36.230 {FOURCC(NV21),0x7000,0x0,0x0,12} > 18:34:36.230 {FOURCC(YV12),0x7000,0x0,0x0,12} > 18:34:36.230 {FOURCC(AYUV),0x7000,0x0,0x0,32} > 18:34:36.230 {FOURCC(SYV2),0x7000,0x0,0x0,16} > 18:34:36.230 {FOURCC(P010),0x7000,0x0,0x0,24} > 18:34:36.230 {FOURCC(INST),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(GET4),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(R2VB),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(ATIC),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(FLGL),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(GINF),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(CMSL),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(SHDT),0x6000,0x0,0x0,0} > 18:34:36.230 {FOURCC(MMDX),0x6000,0x0,0x0,0} > 18:34:36.230 Supported z-buffer bit depths: 16, 24 > 18:34:36.230 Supported MSAA modes: msaa(7), msaa2x(4), msaa4x(2), msaa8x(2) > 18:34:36.245 Dynamic vertex buffers are available > 18:34:36.245 Dynamic index buffers are available > 18:34:36.409 Installing DirectDraw hooks > 18:34:36.411 Installing Direct3D hooks > 18:34:36.414 Installing GDI hooks > 18:34:36.423 Finished installing hooks > 18:34:37.071 Using resource format: D3DDDIFMT_R5G6B5, render target primary, anymem -> vidmem > 18:34:37.071 Using resource format: D3DDDIFMT_X8D24, depth buffer, vidmem > 18:34:37.071 Using Direct3D device type: IID_IDirect3DHALDevice > 18:34:37.078 Auto-detected ColorKeyMethod: native > 18:34:37.079 Using feature: enumerating hardware texture formats via IDirect3DDevice > 18:34:37.080 Using resource format: D3DDDIFMT_R5G6B5, plain, sysmem > 18:34:37.084 Using feature: enumerating hardware texture formats via IDirect3DDevice2 > 18:35:04.113 Using resource format: D3DDDIFMT_P8, plain, sysmem > 18:35:04.114 Using resource format: D3DDDIFMT_R5G6B5, texture, vidmem

I also tested with DDrawCompat v0.3.1 (since dxwrapper uses this version) and the game also worked pretty much the same as the newer version does, albeit it doesn't scale to 1080p.

Using DDrawCompat in conjunction with dxwrapper's stubs dinput.dll and dsound.dll and options enabled, the game still works as intended.

For whatever reason, dxwrapper's ddraw.dll stub and options for this wrapped dll, completely breaks the game.

elishacloud commented 4 days ago

Can you try with this build? It should work as good or the same as DDrawCompat v0.3.2: dxwrapper.zip