Hearthstone for 9.23 and 11.0.48

Hearthstone modders were using SpecialK 9.23 + d3d11 for a year to override some of the textures, and there were several complaints about occasional crashing and freezing while startup. I’m wondering if the latest version could solve the problem.

Here’s the question; I tried SpecialK 10.3 and 11.0.048 for Hearthstone but I found it consistently crashes with notable WifiInfo.Initialization failure in the log, which is not found in 9.23. Is this known issue? I searched the forum for these unique keywords but I cannot find any relevant.

2020-10-05 11:53:57.916: [Jobs] Job (WifiInfo.Initialization(ID:38)) FAILED: Exception during (WifiInfo) service initialization: System.IO.IOException: I/O error occurred.
at System.IO.FileStream.ReadData (System.Runtime.InteropServices.SafeHandle safeHandle, System.Byte buf, System.Int32 offset, System.Int32 count) [0x00032] in <7ba07f088431485bb722f3b3373e87ee>:0
at System.IO.FileStream.ReadInternal (System.Byte dest, System.Int32 offset, System.Int32 count) [0x00026] in <7ba07f088431485bb722f3b3373e87ee>:0
at System.IO.FileStream.Read (System.Byte array, System.Int32 offset, System.Int32 count) [0x000a1] in <7ba07f088431485bb722f3b3373e87ee>:0
at System.IO.StreamReader.ReadBuffer () [0x000b3] in <7ba07f088431485bb722f3b3373e87ee>:0
at System.IO.StreamReader.ReadToEnd () [0x00052] in <7ba07f088431485bb722f3b3373e87ee>:0
at WifiInfo.DoWifiScan () [0x00083] in :0
at WifiInfo+d__8.MoveNext () [0x00050] in :0
at Hearthstone.Core.Services.ServiceLocator+d__43.MoveNext () [0x000a4] in :0
2020-10-05 11:53:57.954: [Jobs] Job (ClientLocationManager.Initialization(ID:34)) FAILED due to dependency failure: Hearthstone.Core.Services.ServiceDependency: Service - WifiInfo Service Locator - Hearthstone Services

I tried to attach the logs but I cannot because I’m a newly registered user. I’ll gladly attach the full logs with alternate method if required. Maybe you can just install the hearthstone on windows 10 environment, use ‘-d3d11’ command line option to enable d3d11, and inject the SpecialK to reproduce my issue.

Let me update some of the details a little bit more;

  • the command line option was ‘-force-d3d11’. I’m sorry for making confusions.
  • it seems there are some injection issues even with 9.23, if the user is using 64bit system; renaming SpecialK32.dll causes game crash, and SpecialK64.dll does not inject anymore. (I found this issue after I upgrade into 64bit win10)

I hope these comments would help your investigation.

Thank you.

I haven’t been able to pin-point the source of the problem, but starting Special K’s injection services after the game has launched should work.

It’s a 32-bit game, and “Install Wrapper DLL” will basically deposit SpecialK32.dll into the game’s directory as dxgi.dll.


Also, you’re going to want to disable texture caching for textures without mipmaps or you will get fringing artifacts on text.

1 Like

Thank you for your comment. Can I ask your setup a little bit in detail? This is because I’m still not attaching the service.

Is it with the 11.0.48 with SKIF? As WIKI installation setup suggested, I created empty SpecialK.dxgi, run the Hearthstone program, and started SKIF. However “Start Service” button on SKIF did not resulted any updates on Hearthstone window and ctrl-shift-backspace did not work. I also tested with your latest 11.0.049 but there was no viable difference. (in fact, I think it would be helpful if SKIF provides notable logs or dialog boxes when any attempt fails… :grinning:)

If it is not with the SKIF guidelines, or any other with older versions, it would be helpful if you summarize how your attaching process went on.

Also, thank you for the mipmap setup. It was quite known for Hearthstone modders it can be updated inside dxgi.ini for 9.23, but I did not know it is also available in the in-game UI.

Oh. For global injection to work on a non-Steam game, you have to add it to the whitelist.

image


Also, there’s a neat trick that lists injection history from the Help menu in-game.

Mouseover the very bottom item and It lists all of the processes that SK started up, the render API used and/or crash status.

1 Like

I’m sorry I want to add some more questions for your last comment;

image
image
image

I face RunDLL failure for “There was a problem while starting …/SpecialK32.dll, The specified module cannot be found”. Since I’m not still attaching SK into client (no UI on client and ctrl-alt-shift is silent), can I ask you if this means any problem in my setup?

That sounds like anti-virus software has quarantined SpecialK32.dll. The 32-bit version of Special K gets false positives occasionally.

1 Like

I’m only using Windows Defender as antivirus since it is newly constructed system; and disabling it did not help. Let me check details a little bit more and report here.

It might be path related. How does the full path to Special K’s DLL files and SKIF look like? Does the path use non-latin characters anywhere in the path?

SKIF basically runs a bat file Servlet\task_inject.bat which then tries to change directory to the batch directory before launching rundll32 to launch the DLL files.

One of the potential error causes might be that the task_inject.bat technically launches the 64-bit rundll32.exe to launch the 32-bit DLL file, which requires the 64-bit rundll32.exe process to then launch the 32-bit rundll32.exe process and hand the path over to that one instead (so SKIF → task_inject.bat → rundll32 (64-bit) → rundll32 (32-bit) → DLL file).

Open task_inject.bat and replace its contents with these lines instead and see if that works better. These lines start the 32-bit DLL file directly using the 32-bit rundll32.exe process and eliminates one instance of the 64-bit process running:

@echo off
setlocal
set filepath=%~dp0

start "32BitLife" /b %WINDIR%\SysWOW64\rundll32.exe "%filepath%\..\SpecialK32.dll",RunDLL_InjectionManager Install

start "64BitLife" /b rundll32.exe "%filepath%\..\SpecialK64.dll",RunDLL_InjectionManager Install

If it does work, then a similar change (but not identical) needs to be made for task_eject.bat as well. I’ll throw something together if the above works.

Thank you for suggesting the idea. I quickly copy-and-pasted the contents into task_inject.bat but its result did not changed. I even tried to move the directory into D:\SpecialK, or directly open cmd and execute the rundll32.exe to makes the path details independent, but I found they still fail as same. (yes. only the full path in the failure message changed.)

Also, this is just a wild guess, but I don’t think the non-latin directory name could be the issue; since the execution on SpecialK64.dll accepted without failure, which shares most of the path details.

That was basically a possible error caused by the rundll32 (64) → rundll32 (32) handoff, which the 64-bit DLL file wouldn’t have to go through.

In that case, it’s something else entirely. Can you archive your SpecialK32.dll and upload it here? Just drag and drop it to a reply and hopefully it will be small enough to upload.

The reply box replies it is not accepted type. I’m using SK_0_11_0_49 from Special K v 0.11.0.49 - Latency Monitoring updated today, with no custom updates.

Do you experience the issue with .48 as well? Or did that version also experience the issue?

Do you experience the issue with .48 as well? Or did that version also experience the issue?

Yes. I commented it in the previous replies. I was trying 11.0.48 when I started this thread. I tried with 11.0.48 again, but the failure message still pops up with both original / updated bat file body.

Is it with the 11.0.48 with SKIF? As WIKI installation setup suggested, I created empty SpecialK.dxgi, run the Hearthstone program, and started SKIF. However “Start Service” button on SKIF did not resulted any updates on Hearthstone window and ctrl-shift-backspace did not work. I also tested with your latest 11.0.049 but there was no viable difference.

Here’s my quick update today;

I found the latest 11.0.50 resolves the current issue. After I execute Hearthstone, “Start Service” button worked without any message box popup, and the SpecialK UI was correctly loaded without failure. Thank you for your support! :+1:t2:

Let me ask a minor question;

In 9.23, dds textures under inject/textures + its sub-directories are handled as injection target. I found 11.0.50 only takes textures right under inject/textures, and all the sub-directory textures are ignored. Is it intended? Since Hearthstone modders are currently dealing with 1000+ textures and we were classifying them with sub-directories, I’m curious whether these sub-directory structure could be supported as well.

No, it’s not supposed to work that way :-\

I’ll have to look into that. The purpose of sub-directory support is actually to prioritize copies of the same texture hash. The directories are sorted alpha-numerically, and their contents are added to a set of known hashes. Any duplicates are ignored.