mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2024-12-29 15:23:02 +05:00
VC: Scale onscreen counter bar position and shadow to resolution
This commit is contained in:
parent
f0b29c8b09
commit
8cde3246c1
1 changed files with 87 additions and 11 deletions
|
@ -190,9 +190,11 @@ namespace PrintStringShadows
|
||||||
Memory::DynBase::InterceptCall(addr, orgPrintString, PrintString);
|
Memory::DynBase::InterceptCall(addr, orgPrintString, PrintString);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Radar position and radardisc shadow
|
// ============= Radar position and radardisc shadow =============
|
||||||
|
namespace RadardiscFixes
|
||||||
|
{
|
||||||
static const float RADARDISC_SHRINK = 2.0f; // We are shrinking the radardisc by that
|
static const float RADARDISC_SHRINK = 2.0f; // We are shrinking the radardisc by that
|
||||||
|
|
||||||
template<std::size_t Index>
|
template<std::size_t Index>
|
||||||
|
@ -282,6 +284,50 @@ namespace PrintStringShadows
|
||||||
HOOK_EACH_INIT(DrawRadarDisc, orgDrawSprite, DrawSprite_Scale);
|
HOOK_EACH_INIT(DrawRadarDisc, orgDrawSprite, DrawSprite_Scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============= Fix the onscreen counter bar placement and shadow not scaling to resolution =============
|
||||||
|
namespace OnscreenCounterBarFixes
|
||||||
|
{
|
||||||
|
template<std::size_t Index>
|
||||||
|
static const float* orgXPos;
|
||||||
|
|
||||||
|
template<std::size_t Index>
|
||||||
|
static float XPos_Recalculated;
|
||||||
|
|
||||||
|
template<std::size_t Index>
|
||||||
|
static const float* orgYPos;
|
||||||
|
|
||||||
|
template<std::size_t Index>
|
||||||
|
static float YPos_Recalculated;
|
||||||
|
|
||||||
|
template<std::size_t... I>
|
||||||
|
static void RecalculateXPositions(std::index_sequence<I...>)
|
||||||
|
{
|
||||||
|
const float multiplier = GetWidthMult() * RsGlobal->MaximumWidth;
|
||||||
|
((XPos_Recalculated<I> = *orgXPos<I> * multiplier), ...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<std::size_t... I>
|
||||||
|
static void RecalculateYPositions(std::index_sequence<I...>)
|
||||||
|
{
|
||||||
|
const float multiplier = GetHeightMult() * RsGlobal->MaximumHeight;
|
||||||
|
((YPos_Recalculated<I> = *orgYPos<I> * multiplier), ...);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int (*orgAtoi)(const char* str);
|
||||||
|
|
||||||
|
template<std::size_t NumXPos, std::size_t NumYPos>
|
||||||
|
static int atoi_RecalculatePositions(const char* str)
|
||||||
|
{
|
||||||
|
RecalculateXPositions(std::make_index_sequence<NumXPos>{});
|
||||||
|
RecalculateYPositions(std::make_index_sequence<NumYPos>{});
|
||||||
|
|
||||||
|
return orgAtoi(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
HOOK_EACH_INIT(XPos, orgXPos, XPos_Recalculated);
|
||||||
|
HOOK_EACH_INIT(YPos, orgYPos, YPos_Recalculated);
|
||||||
|
}
|
||||||
|
|
||||||
float FixedRefValue()
|
float FixedRefValue()
|
||||||
{
|
{
|
||||||
return 1.0f;
|
return 1.0f;
|
||||||
|
@ -1049,6 +1095,12 @@ void InjectDelayedPatches_VC_Common( bool bHasDebugMenu, const wchar_t* wcModule
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto PatchFloat = [](float** address, const float*& org, float& replaced)
|
||||||
|
{
|
||||||
|
org = *address;
|
||||||
|
Patch(address, &replaced);
|
||||||
|
};
|
||||||
|
|
||||||
// Locale based metric/imperial system INI/debug menu
|
// Locale based metric/imperial system INI/debug menu
|
||||||
{
|
{
|
||||||
using namespace Localization;
|
using namespace Localization;
|
||||||
|
@ -1225,8 +1277,7 @@ void InjectDelayedPatches_VC_Common( bool bHasDebugMenu, const wchar_t* wcModule
|
||||||
// Fix the radar disc shadow scaling and radar X position
|
// Fix the radar disc shadow scaling and radar X position
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Legacy namespace name, it's OK
|
using namespace RadardiscFixes;
|
||||||
using namespace PrintStringShadows;
|
|
||||||
|
|
||||||
auto draw_entity_coord_blip = pattern("D8 0D ? ? ? ? D8 05 ? ? ? ? DE C1 D9 5C 24 18").count(2);
|
auto draw_entity_coord_blip = pattern("D8 0D ? ? ? ? D8 05 ? ? ? ? DE C1 D9 5C 24 18").count(2);
|
||||||
auto draw_radar_disc1 = pattern("D8 25 ? ? ? ? DD DB D9 C2 D9 9C 24 ? ? ? ? DB 05 ? ? ? ? D8 0D ? ? ? ? D8 0D ? ? ? ? D8 05 ? ? ? ? D8 05").count(2);
|
auto draw_radar_disc1 = pattern("D8 25 ? ? ? ? DD DB D9 C2 D9 9C 24 ? ? ? ? DB 05 ? ? ? ? D8 0D ? ? ? ? D8 0D ? ? ? ? D8 05 ? ? ? ? D8 05").count(2);
|
||||||
|
@ -1294,13 +1345,6 @@ void InjectDelayedPatches_VC_Common( bool bHasDebugMenu, const wchar_t* wcModule
|
||||||
}
|
}
|
||||||
TXN_CATCH();
|
TXN_CATCH();
|
||||||
|
|
||||||
|
|
||||||
auto PatchFloat = [](float** address, const float*& org, float& replaced)
|
|
||||||
{
|
|
||||||
org = *address;
|
|
||||||
Patch(address, &replaced);
|
|
||||||
};
|
|
||||||
|
|
||||||
HookEach_CalculateRadarXPos(radarXPos, PatchFloat);
|
HookEach_CalculateRadarXPos(radarXPos, PatchFloat);
|
||||||
HookEach_CalculateRadarXPos_RadardiscShrink(radarXPos_RadardiscShrink, PatchFloat);
|
HookEach_CalculateRadarXPos_RadardiscShrink(radarXPos_RadardiscShrink, PatchFloat);
|
||||||
HookEach_CalculateRadarYPos_RadardiscShrink(radarYPos_RadardiscShrink, PatchFloat);
|
HookEach_CalculateRadarYPos_RadardiscShrink(radarYPos_RadardiscShrink, PatchFloat);
|
||||||
|
@ -1310,6 +1354,38 @@ void InjectDelayedPatches_VC_Common( bool bHasDebugMenu, const wchar_t* wcModule
|
||||||
TXN_CATCH();
|
TXN_CATCH();
|
||||||
|
|
||||||
|
|
||||||
|
// Fix the onscreen counter bar placement and shadow not scaling to resolution
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using namespace OnscreenCounterBarFixes;
|
||||||
|
|
||||||
|
auto atoiWrap = get_pattern("E8 ? ? ? ? D9 EE DB 05 ? ? ? ? 89 C7");
|
||||||
|
auto shadow1 = pattern("D8 05 ? ? ? ? D9 9C 24 ? ? ? ? D9 05 ? ? ? ? D8 44 24 50").get_one();
|
||||||
|
auto shadow2 = pattern("D9 05 ? ? ? ? D8 C1 D9 9C 24 ? ? ? ? D9 05").get_one();
|
||||||
|
auto fill1 = pattern("D8 05 ? ? ? ? D9 9C 24 ? ? ? ? D9 05 ? ? ? ? 8D 84 24").get_one();
|
||||||
|
|
||||||
|
std::array<float**, 6> XPositions = {
|
||||||
|
shadow1.get<float*>(2),
|
||||||
|
shadow2.get<float*>(2),
|
||||||
|
fill1.get<float*>(2),
|
||||||
|
fill1.get<float*>(13 + 2),
|
||||||
|
get_pattern<float*>("D9 05 ? ? ? ? D8 C1 D9 9C 24 ? ? ? ? DB 44 24 6C", 2),
|
||||||
|
get_pattern<float*>("D8 05 ? ? ? ? D9 9C 24 ? ? ? ? DE D9 E8 ? ? ? ? 59", 2),
|
||||||
|
};
|
||||||
|
|
||||||
|
std::array<float**, 2> YPositions = {
|
||||||
|
shadow1.get<float*>(13 + 2),
|
||||||
|
shadow2.get<float*>(15 + 2),
|
||||||
|
};
|
||||||
|
|
||||||
|
HookEach_XPos(XPositions, PatchFloat);
|
||||||
|
HookEach_YPos(YPositions, PatchFloat);
|
||||||
|
|
||||||
|
InterceptCall(atoiWrap, orgAtoi, atoi_RecalculatePositions<XPositions.size(), YPositions.size()>);
|
||||||
|
}
|
||||||
|
TXN_CATCH();
|
||||||
|
|
||||||
|
|
||||||
FLAUtils::Init(moduleList);
|
FLAUtils::Init(moduleList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue