Cael
Arcane
- Joined
- Nov 1, 2017
- Messages
- 22,559
... Riffington???Need to find my damn notes.
... Riffington???Need to find my damn notes.
Cleve, I was able to reproduce the weird scaling/cropping issue some users were complaining about on Steam forums. The culprit is DPI virtualization introduced in Windows Vista.
Indeed, calling SetProcessDPIAware is one way to declare DPI awareness, although according to the article on microsoft.technet, using this method "is discouraged, except in very specific circumstances", because "if a DLL caches DPI settings during initialization, invoking SetProcessDPIAware in your application might generate a possible race condition". And yes, using run-time dynamic linking (importing the function via LoadLibrary/GetProcAddress) is the proper way to do it unless compatibility with Windows XP is not required, which I believe is not the case here. If Cleve decides to take this route, the following code does the job:Ah yeah, i had the same issue with my own engine getting zoomed in. The fix is trivial, just call SetProcessDPIAware from user32.dll right after your program starts (in WinMain). In my engine i call that via LoadLibrary and GetProcAddress so that it works even in older Windows versions (also i'm mostly using Borland C++ 5 released in 1997 which has no idea about such things so i have to load any new stuff dynamically :-P), but according to Microsoft docs this is supported since Vista so if your minimum requirements (...and compiler :-P) include that you can simply use it directly.
HMODULE hUser32 = LoadLibrary(_T("user32.dll"));
typedef BOOL (WINAPI *SetProcessDPIAwareFunc)();
SetProcessDPIAwareFunc setDPIAware = (SetProcessDPIAwareFunc)GetProcAddress(hUser32, "SetProcessDPIAware");
if (setDPIAware)
{
setDPIAware();
}
FreeLibrary(hUser32);
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
</windowsSettings>
</application>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
</windowsSettings>
</application>
</assembly>
Solution to mouse problems - reduce mouse polling rate to 125 Hz in driver software
Solution to improper scaling - set your launch options in steam properties for the game to -w1024 -h768
Also, you can pay the original true value of Grimoire of $40 on itch.io.You can buy it on itch.io instead:
https://cleveblakemore.itch.io/grimoire-heralds-of-the-winged-exemplar
Interesting, thanks.You can buy it on itch.io instead:
https://cleveblakemore.itch.io/grimoire-heralds-of-the-winged-exemplar
I have a repeatable fatal crash bug when my party tries to leave Tabernacle of Music.
Sorry about this bug, it is one of the few bugs left that can cause a crash. I will be fixing it before the next update.
GoG was right in not publishing this shit. Your game sucks ass. Die in hell.
Cleve, I was able to reproduce the weird scaling/cropping issue some users were complaining about on Steam forums. The culprit is DPI virtualization introduced in Windows Vista.
Ah yeah, i had the same issue with my own engine getting zoomed in. The fix is trivial, just call SetProcessDPIAware from user32.dll right after your program starts (in WinMain). In my engine i call that via LoadLibrary and GetProcAddress so that it works even in older Windows versions (also i'm mostly using Borland C++ 5 released in 1997 which has no idea about such things so i have to load any new stuff dynamically :-P), but according to Microsoft docs this is supported since Vista so if your minimum requirements (...and compiler :-P) include that you can simply use it directly.
No one is blaming you, Cleve. Certainly not me. I appreciate all the hard work you've been doing and have a deep respect for you. Please consider using assembly manifest file with dpiAware property set to true rather than SetProcessDPIAware though. It does the same thing but it's safer, cleaner and is recommended by Microsoft.and SetProcessDPIAware sounds like a neckbeard gay sex function stuck into Windows just to make millennials feel extra special. Can you blame me?
Time to stare at character creation for a couple of hours.
That used to be in the code a couple years back. I think Shams recommended it. It was sitting in there until about 2014 when I began my final code cleanup to release it. I deleted that line when I looked up what it did.
I took it out, thinking it just more fluff trying to hitch a ride on the mean, lean Grimoire machine of basic vanilla Windows old school.
So there. I admitted it. Shams recommended it, I took it out. I messed up. I'm sorry I cannot keep up with every new version of Windows writing out fake data to fool older versions. So it appears all these scaling problems on some machines are my doing.
This is another reason I am so glad I have moved to Unity where all these issues are handled by the backend rendering engine.
EDIT : Just tried it and it fixed the problem on one of the test machines. Seriously, I really appreciate it. At least this problem will be finally fixed in the next release coming up.
EDIT #2 : ... and SetProcessDPIAware sounds like a neckbeard gay sex function stuck into Windows just to make millennials feel extra special. Can you blame me? Do you know how many of these fluff commands you could stick into your code just to try to cover every eventuality? You can just see the Microsoft guy who wrote that command chugging a monster through a hole in the wall at the local rest stop on the highway.