mirror of
https://github.com/isledecomp/LEGOIslandRebuilder.git
synced 2024-11-27 09:35:41 -05:00
implemented more patches
This commit is contained in:
parent
f0904e54b9
commit
7daa030991
6 changed files with 86 additions and 2 deletions
|
@ -1,6 +1,8 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <SHLWAPI.H>
|
#include <SHLWAPI.H>
|
||||||
|
#include <SSTREAM>
|
||||||
|
#include <STRING>
|
||||||
|
|
||||||
#include "../cmn/path.h"
|
#include "../cmn/path.h"
|
||||||
|
|
||||||
|
@ -22,3 +24,27 @@ UINT Config::GetInt(LPCTSTR name, UINT defaultValue)
|
||||||
{
|
{
|
||||||
return GetPrivateProfileInt(appName, name, defaultValue, m_configFile.c_str());
|
return GetPrivateProfileInt(appName, name, defaultValue, m_configFile.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float Config::GetFloat(LPCTSTR name, float defaultValue)
|
||||||
|
{
|
||||||
|
// Convert float to string
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << defaultValue;
|
||||||
|
std::string defaultStr = oss.str();
|
||||||
|
|
||||||
|
std::string currentStr = GetString(name, defaultStr);
|
||||||
|
|
||||||
|
// Convert to float
|
||||||
|
return atof(currentStr.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Config::GetString(LPCTSTR name, const std::string &defaultValue)
|
||||||
|
{
|
||||||
|
const int max_string_sz = 100;
|
||||||
|
std::string s;
|
||||||
|
s.resize(max_string_sz);
|
||||||
|
|
||||||
|
GetPrivateProfileString(appName, name, defaultValue.c_str(), &s[0], max_string_sz, m_configFile.c_str());
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,10 @@ public:
|
||||||
|
|
||||||
UINT GetInt(LPCTSTR name, UINT defaultValue = 0);
|
UINT GetInt(LPCTSTR name, UINT defaultValue = 0);
|
||||||
|
|
||||||
|
float GetFloat(LPCTSTR name, float defaultValue = 0.0f);
|
||||||
|
|
||||||
|
std::string GetString(LPCTSTR name, const std::string &defaultValue = std::string());
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::basic_string<TCHAR> m_configFile;
|
std::basic_string<TCHAR> m_configFile;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "hooks.h"
|
#include "hooks.h"
|
||||||
|
|
||||||
|
#include <MATH.H>
|
||||||
#include <STDIO.H>
|
#include <STDIO.H>
|
||||||
|
|
||||||
#include "../cmn/path.h"
|
#include "../cmn/path.h"
|
||||||
|
@ -172,9 +173,22 @@ LONG WINAPI InterceptRegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpR
|
||||||
// Pass through
|
// Pass through
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
MessageBoxA(isleWindow, lpValueName, "ISLE asked for...", 0);
|
|
||||||
|
printf("Passed through requested registry key \"%s\"\n", lpValueName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pass these through
|
// Pass these through
|
||||||
return RegQueryValueExA(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData);
|
return RegQueryValueExA(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WINAPI InterceptSleep(DWORD dwMilliseconds)
|
||||||
|
{
|
||||||
|
// Do nothing
|
||||||
|
/*std::string fps_behavior = config.GetString(_T("FPSLimit"));
|
||||||
|
|
||||||
|
if (fps_behavior != "Uncapped") {
|
||||||
|
// Pass through to default function unless uncapped, in which case no sleep is done at all
|
||||||
|
Sleep(dwMilliseconds);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
|
@ -40,4 +40,6 @@ HRESULT WINAPI InterceptDirectDrawCreate(GUID *lpGUID, LPDIRECTDRAW *lplpDD, IUn
|
||||||
|
|
||||||
HRESULT WINAPI InterceptSurfaceGetDesc(LPDIRECTDRAWSURFACE lpDDSurface, LPDDSURFACEDESC lpDDSurfaceDesc);
|
HRESULT WINAPI InterceptSurfaceGetDesc(LPDIRECTDRAWSURFACE lpDDSurface, LPDDSURFACEDESC lpDDSurfaceDesc);
|
||||||
|
|
||||||
|
VOID WINAPI InterceptSleep(DWORD dwMilliseconds);
|
||||||
|
|
||||||
#endif // HOOKS_H
|
#endif // HOOKS_H
|
||||||
|
|
|
@ -22,6 +22,8 @@ DWORD WINAPI Patch()
|
||||||
OverwriteImport(exeBase, "CreateWindowExA", (LPVOID)InterceptCreateWindowExA);
|
OverwriteImport(exeBase, "CreateWindowExA", (LPVOID)InterceptCreateWindowExA);
|
||||||
OverwriteImport(dllBase, "OutputDebugStringA", (LPVOID)InterceptOutputDebugStringA);
|
OverwriteImport(dllBase, "OutputDebugStringA", (LPVOID)InterceptOutputDebugStringA);
|
||||||
OverwriteImport(exeBase, "RegQueryValueExA", (LPVOID)InterceptRegQueryValueExA);
|
OverwriteImport(exeBase, "RegQueryValueExA", (LPVOID)InterceptRegQueryValueExA);
|
||||||
|
OverwriteImport(dllBase, "Sleep", (LPVOID)InterceptSleep);
|
||||||
|
OverwriteImport(exeBase, "Sleep", (LPVOID)InterceptSleep);
|
||||||
ddCreateOriginal = (ddCreateFunction)OverwriteImport(dllBase, "DirectDrawCreate", (LPVOID)InterceptDirectDrawCreate);
|
ddCreateOriginal = (ddCreateFunction)OverwriteImport(dllBase, "DirectDrawCreate", (LPVOID)InterceptDirectDrawCreate);
|
||||||
|
|
||||||
// Stay active when defocused
|
// Stay active when defocused
|
||||||
|
@ -50,9 +52,45 @@ DWORD WINAPI Patch()
|
||||||
SearchReplacePattern(dllBase, "OGEL", "\x0GEL", 4, TRUE);
|
SearchReplacePattern(dllBase, "OGEL", "\x0GEL", 4, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Patch navigation
|
||||||
|
{
|
||||||
|
const int nav_block_sz = 0x30;
|
||||||
|
const char *nav_block_src = "\x28\x00\x00\x00\x6F\x12\x83\x3A\x00\x00\x20\x42\x00\x00\xA0\x41\x00\x00\x70\x41\x00\x00\xF0\x41\x00\x00\x80\x40\x00\x00\x70\x41\x00\x00\x48\x42\x00\x00\x48\x42\xCD\xCC\xCC\x3E\x00\x00\x00\x00";
|
||||||
|
char nav_block_dst[nav_block_sz];
|
||||||
|
memcpy(nav_block_dst, nav_block_src, nav_block_sz);
|
||||||
|
|
||||||
|
UINT32 mouse_deadzone = config.GetInt(_T("MouseDeadzone"), 40);
|
||||||
|
memcpy(nav_block_dst+0x0, &mouse_deadzone, sizeof(mouse_deadzone));
|
||||||
|
|
||||||
|
float movement_max_spd = config.GetFloat(_T("MovementMaxSpeed"), 40.0f);
|
||||||
|
memcpy(nav_block_dst+0x8, &movement_max_spd, sizeof(movement_max_spd));
|
||||||
|
|
||||||
|
float turn_max_spd = config.GetFloat(_T("TurnMaxSpeed"), 20.0f);
|
||||||
|
memcpy(nav_block_dst+0xC, &turn_max_spd, sizeof(turn_max_spd));
|
||||||
|
|
||||||
|
float movement_max_accel = config.GetFloat(_T("MovementMaxAcceleration"), 15.0f);
|
||||||
|
memcpy(nav_block_dst+0x10, &movement_max_accel, sizeof(movement_max_accel));
|
||||||
|
|
||||||
|
float turn_max_accel = config.GetFloat(_T("TurnMaxAcceleration"), 30.0f);
|
||||||
|
memcpy(nav_block_dst+0x14, &turn_max_accel, sizeof(turn_max_accel));
|
||||||
|
|
||||||
|
float movement_min_accel = config.GetFloat(_T("MovementMinAcceleration"), 4.0f);
|
||||||
|
memcpy(nav_block_dst+0x18, &movement_min_accel, sizeof(movement_min_accel));
|
||||||
|
|
||||||
|
float turn_min_accel = config.GetFloat(_T("TurnMinAcceleration"), 15.0f);
|
||||||
|
memcpy(nav_block_dst+0x1C, &turn_min_accel, sizeof(turn_min_accel));
|
||||||
|
|
||||||
|
float movement_decel = config.GetFloat(_T("MovementDeceleration"), 50.0f);
|
||||||
|
memcpy(nav_block_dst+0x20, &movement_decel, sizeof(movement_decel));
|
||||||
|
|
||||||
|
float turn_decel = config.GetFloat(_T("TurnDeceleration"), 50.0f);
|
||||||
|
memcpy(nav_block_dst+0x24, &turn_decel, sizeof(turn_decel));
|
||||||
|
|
||||||
|
UINT32 turn_use_velocity = config.GetInt(_T("TurnUseVelocity"), FALSE);
|
||||||
|
memcpy(nav_block_dst+0x2C, &turn_use_velocity, sizeof(turn_use_velocity));
|
||||||
|
|
||||||
|
SearchReplacePattern(dllBase, nav_block_src, nav_block_dst, nav_block_sz);
|
||||||
|
}
|
||||||
|
|
||||||
// DDRAW GetSurfaceDesc Override
|
// DDRAW GetSurfaceDesc Override
|
||||||
OverwriteCall((LPVOID) ((UINT_PTR)dllBase+0xBA7D5), (LPVOID)InterceptSurfaceGetDesc);
|
OverwriteCall((LPVOID) ((UINT_PTR)dllBase+0xBA7D5), (LPVOID)InterceptSurfaceGetDesc);
|
||||||
|
|
|
@ -155,12 +155,12 @@ BOOL PatchGrid::SaveConfiguration(LPCTSTR filename)
|
||||||
case IT_TEXT:
|
case IT_TEXT:
|
||||||
case IT_FILE:
|
case IT_FILE:
|
||||||
case IT_FOLDER:
|
case IT_FOLDER:
|
||||||
|
case IT_COMBO:
|
||||||
value = item->m_strValue;
|
value = item->m_strValue;
|
||||||
break;
|
break;
|
||||||
case IT_BOOLEAN:
|
case IT_BOOLEAN:
|
||||||
value = toString(item->m_bValue);
|
value = toString(item->m_bValue);
|
||||||
break;
|
break;
|
||||||
case IT_COMBO:
|
|
||||||
case IT_INTEGER:
|
case IT_INTEGER:
|
||||||
value = toString(item->m_nValue);
|
value = toString(item->m_nValue);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue