mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2025-01-01 08:43:01 +05:00
German newsteam r2 support
This commit is contained in:
parent
51b952d8a3
commit
a111ac1cb5
2 changed files with 76 additions and 48 deletions
|
@ -3128,54 +3128,24 @@ void Patch_SA_NewSteam_r2()
|
||||||
{
|
{
|
||||||
using namespace MemoryVP::DynBase;
|
using namespace MemoryVP::DynBase;
|
||||||
|
|
||||||
// Nazi EXE?
|
// No framedelay
|
||||||
if ( *(DWORD*)DynBaseAddress(0x49F810) == 0x64EC8B55 )
|
InjectHook(0x54ECC6, DynBaseAddress(0x54ED0C), PATCH_JUMP);
|
||||||
{
|
Patch<BYTE>(0x54ED45, 0x4);
|
||||||
// Regular
|
Nop(0x54ED47, 1);
|
||||||
|
|
||||||
// No framedelay
|
// Unlock 1.0/1.01 saves loading
|
||||||
InjectHook(0x54ECC6, DynBaseAddress(0x54ED0C), PATCH_JUMP);
|
Patch<WORD>(0x5ED349, 0xE990);
|
||||||
Patch<BYTE>(0x54ED45, 0x4);
|
|
||||||
Nop(0x54ED47, 1);
|
|
||||||
|
|
||||||
// Unlock 1.0/1.01 saves loading
|
// Old .set files working again
|
||||||
Patch<WORD>(0x5ED349, 0xE990);
|
static const DWORD dwSetVersion = 6;
|
||||||
|
Patch<const void*>(0x5904CA, &dwSetVersion);
|
||||||
// Old .set files working again
|
Patch<BYTE>(0x5907AD, 6);
|
||||||
static const DWORD dwSetVersion = 6;
|
Patch<BYTE>(0x53EC4A, 6);
|
||||||
Patch<const void*>(0x5904CA, &dwSetVersion);
|
|
||||||
Patch<BYTE>(0x5907AD, 6);
|
|
||||||
Patch<BYTE>(0x53EC4A, 6);
|
|
||||||
|
|
||||||
// Disable re-initialization of DirectInput mouse device by the game
|
|
||||||
Patch<BYTE>(0x58A881, 0xEB);
|
|
||||||
Patch<BYTE>(0x58AA67, 0xEB);
|
|
||||||
Patch<BYTE>(0x58AB49, 0xEB);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Nazi
|
|
||||||
|
|
||||||
// No framedelay
|
|
||||||
InjectHook(0x54EC06, DynBaseAddress(0x54EC4C), PATCH_JUMP);
|
|
||||||
Patch<BYTE>(0x54EC85, 0x4);
|
|
||||||
Nop(0x54EC87, 1);
|
|
||||||
|
|
||||||
// Unlock 1.0/1.01 saves loading
|
|
||||||
Patch<WORD>(0x5ED349, 0xE990);
|
|
||||||
|
|
||||||
// Old .set files working again
|
|
||||||
static const DWORD dwSetVersion = 6;
|
|
||||||
Patch<const void*>(0x5904DA, &dwSetVersion);
|
|
||||||
Patch<BYTE>(0x5907BD, 6);
|
|
||||||
Patch<BYTE>(0x53EB9A, 6);
|
|
||||||
|
|
||||||
// Disable re-initialization of DirectInput mouse device by the game
|
|
||||||
Patch<BYTE>(0x58A7D1, 0xEB);
|
|
||||||
Patch<BYTE>(0x58A9B7, 0xEB);
|
|
||||||
Patch<BYTE>(0x58AA99, 0xEB);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Disable re-initialization of DirectInput mouse device by the game
|
||||||
|
Patch<BYTE>(0x58A881, 0xEB);
|
||||||
|
Patch<BYTE>(0x58AA67, 0xEB);
|
||||||
|
Patch<BYTE>(0x58AB49, 0xEB);
|
||||||
|
|
||||||
// Unlocked widescreen resolutions
|
// Unlocked widescreen resolutions
|
||||||
//Patch<WORD>(0x779BAD, 0x607D);
|
//Patch<WORD>(0x779BAD, 0x607D);
|
||||||
|
@ -3185,6 +3155,7 @@ void Patch_SA_NewSteam_r2()
|
||||||
Nop(0x7799DC, 2);
|
Nop(0x7799DC, 2);
|
||||||
|
|
||||||
// Make sure DirectInput mouse device is set non-exclusive (may not be needed?)
|
// Make sure DirectInput mouse device is set non-exclusive (may not be needed?)
|
||||||
|
// TODO: Nazi exe
|
||||||
Nop(0x77AB6F, 1);
|
Nop(0x77AB6F, 1);
|
||||||
Patch<WORD>(0x77AB70, 0x01B0);
|
Patch<WORD>(0x77AB70, 0x01B0);
|
||||||
|
|
||||||
|
@ -3205,6 +3176,57 @@ void Patch_SA_NewSteam_r2()
|
||||||
Patch<const void*>(0x73427A, &f43);
|
Patch<const void*>(0x73427A, &f43);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Patch_SA_NewSteam_r2_lv()
|
||||||
|
{
|
||||||
|
using namespace MemoryVP::DynBase;
|
||||||
|
|
||||||
|
// No framedelay
|
||||||
|
InjectHook(0x54EC06, DynBaseAddress(0x54EC4C), PATCH_JUMP);
|
||||||
|
Patch<BYTE>(0x54EC85, 0x4);
|
||||||
|
Nop(0x54EC87, 1);
|
||||||
|
|
||||||
|
// Unlock 1.0/1.01 saves loading
|
||||||
|
Patch<WORD>(0x5ED299, 0xE990);
|
||||||
|
|
||||||
|
// Old .set files working again
|
||||||
|
static const DWORD dwSetVersion = 6;
|
||||||
|
Patch<const void*>(0x59040A, &dwSetVersion);
|
||||||
|
Patch<BYTE>(0x5906ED, 6);
|
||||||
|
Patch<BYTE>(0x53EB9A, 6);
|
||||||
|
|
||||||
|
// Disable re-initialization of DirectInput mouse device by the game
|
||||||
|
Patch<BYTE>(0x58A7C1, 0xEB);
|
||||||
|
Patch<BYTE>(0x58A9A7, 0xEB);
|
||||||
|
Patch<BYTE>(0x58AA89, 0xEB);
|
||||||
|
|
||||||
|
// Unlocked widescreen resolutions
|
||||||
|
//Patch<WORD>(0x779BAD, 0x607D);
|
||||||
|
Patch<WORD>(0x779AB8, 0x697D);
|
||||||
|
Patch<DWORD>(0x7798C8, 0x9090117D);
|
||||||
|
Nop(0x779946, 2);
|
||||||
|
Nop(0x7798CC, 2);
|
||||||
|
|
||||||
|
// Make sure DirectInput mouse device is set non-exclusive (may not be needed?)
|
||||||
|
Nop(0x77AA5F, 1);
|
||||||
|
Patch<WORD>(0x77AA60, 0x01B0);
|
||||||
|
|
||||||
|
// Default resolution to native resolution
|
||||||
|
RECT desktop;
|
||||||
|
GetWindowRect(GetDesktopWindow(), &desktop);
|
||||||
|
_snprintf(aNoDesktopMode, sizeof(aNoDesktopMode), "Cannot find %dx%dx32 video mode", desktop.right, desktop.bottom);
|
||||||
|
|
||||||
|
Patch<DWORD>(0x77A30F, desktop.right);
|
||||||
|
Patch<DWORD>(0x77A314, desktop.bottom);
|
||||||
|
Patch<const char*>(0x77A36B, aNoDesktopMode);
|
||||||
|
|
||||||
|
|
||||||
|
// Proper aspect ratios
|
||||||
|
static const float f43 = 4.0f/3.0f, f54 = 5.0f/4.0f, f169 = 16.0f/9.0f;
|
||||||
|
Patch<const void*>(0x73414B, &f169);
|
||||||
|
Patch<const void*>(0x734167, &f54);
|
||||||
|
Patch<const void*>(0x73417A, &f43);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
{
|
{
|
||||||
|
@ -3220,6 +3242,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
|
|
||||||
else if ( *(DWORD*)DynBaseAddress(0x858D21) == 0x3539F633) Patch_SA_NewSteam_r1();
|
else if ( *(DWORD*)DynBaseAddress(0x858D21) == 0x3539F633) Patch_SA_NewSteam_r1();
|
||||||
else if ( *(DWORD*)DynBaseAddress(0x858D51) == 0x3539F633) Patch_SA_NewSteam_r2();
|
else if ( *(DWORD*)DynBaseAddress(0x858D51) == 0x3539F633) Patch_SA_NewSteam_r2();
|
||||||
|
else if ( *(DWORD*)DynBaseAddress(0x858C61) == 0x3539F633) Patch_SA_NewSteam_r2_lv();
|
||||||
|
|
||||||
else return FALSE;
|
else return FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,12 @@ inline T AddressByVersion(DWORD address10, DWORD address11, DWORD addressSteam)
|
||||||
*bVer = 4;
|
*bVer = 4;
|
||||||
*bEuropean = false;
|
*bEuropean = false;
|
||||||
}
|
}
|
||||||
|
else if ( *(DWORD*)DynBaseAddress(0x858C61) == 0x3539F633 )
|
||||||
|
{
|
||||||
|
// newsteam r2 lv
|
||||||
|
*bVer = 5;
|
||||||
|
*bEuropean = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( *bVer )
|
switch ( *bVer )
|
||||||
|
@ -181,11 +187,10 @@ inline T AddressByVersion(DWORD address10, DWORD address11, DWORD addressSteam)
|
||||||
|
|
||||||
return (T)addressSteam;
|
return (T)addressSteam;
|
||||||
case 3:
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
// TODO: DO
|
// TODO: DO
|
||||||
return (T)GetDummy();
|
return (T)GetDummy();
|
||||||
case 4:
|
|
||||||
// TODO: DO
|
|
||||||
return (T)GetDummy();
|
|
||||||
default:
|
default:
|
||||||
assert(address10);
|
assert(address10);
|
||||||
// Adjust to EU if needed
|
// Adjust to EU if needed
|
||||||
|
|
Loading…
Reference in a new issue