Merge branch 'master' of somewhatlurker/PD-Loader into master

This commit is contained in:
somewhatlurker
2019-10-08 03:42:46 +00:00
committed by Gogs
30 changed files with 943 additions and 1471 deletions
@@ -1,4 +1,5 @@
#include "ScoreSaver.h"
#include "GameState.h"
#include "../Constants.h"
#include "../framework.h"
#include "../Utilities/Operations.h"
@@ -22,11 +23,6 @@ namespace TLAC::Components
ScoreSaver::~ScoreSaver()
{
for (int diff = 0; diff < 4; diff++)
{
*(DivaScore**)(PLAYER_DATA_ADDRESS + diff * 0x18 + 0x5d0) = 0;
*(DivaScore**)(PLAYER_DATA_ADDRESS + diff * 0x18 + 0x5d8) = 0;
}
}
const char* ScoreSaver::GetDisplayName()
@@ -34,14 +30,8 @@ namespace TLAC::Components
return "score_saver";
}
bool(__stdcall* ScoreSaver::divaInitResults)(void* cls) = (bool(__stdcall*)(void* cls))RESULTS_INIT_ADDRESS;
void ScoreSaver::Initialize(ComponentsManager*)
void ScoreSaver::initCache()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)ScoreSaver::divaInitResults, (PVOID)(ScoreSaver::hookedInitResults));
DetourTransactionCommit();
// build the score cache
UpdateScoreCache();
UpdateClearCounts();
@@ -54,6 +44,18 @@ namespace TLAC::Components
}
}
bool(__stdcall* ScoreSaver::divaInitResults)(void* cls) = (bool(__stdcall*)(void* cls))RESULTS_INIT_ADDRESS;
std::thread ScoreSaver::initThread;
void ScoreSaver::Initialize(ComponentsManager*)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)ScoreSaver::divaInitResults, (PVOID)(ScoreSaver::hookedInitResults));
DetourTransactionCommit();
initThread = std::thread(initCache);
}
bool ScoreSaver::checkExistingScoreValid(int pv, int difficulty, int isEx)
{
WCHAR keyBase[32]; // needs to be big enough to store pv.999.diff.3.ex
@@ -313,7 +315,12 @@ namespace TLAC::Components
void ScoreSaver::Update()
{
return;
if (*(GameState*)CURRENT_GAME_STATE_ADDRESS == GS_GAME && *(SubGameState*)CURRENT_GAME_SUB_STATE_ADDRESS == SUB_SELECTOR && initThread.joinable())
{
// it's actually fine to let the init happen in the background after reaching game state, but this is probably safer
printf("[ScoreSaver] Waiting for initialisation...");
initThread.join();
}
}
void ScoreSaver::UpdateInput()
@@ -3,6 +3,7 @@
#include "../Constants.h"
#include <windows.h>
#include <vector>
#include <thread>
namespace TLAC::Components
{
@@ -109,10 +110,12 @@ namespace TLAC::Components
static bool(__stdcall* divaInitResults)(void* cls);
static bool hookedInitResults(void* cls);
static void InjectCode(void* address, const std::vector<uint8_t> data);
static void initCache();
static bool checkExistingScoreValid(int pv, int difficulty, int isEx);
static int calculateCheck(int score, int cntCools, int cntFines, int percent, int combo, int clearRank, int allTimeRank, int allTimeModifiers, int allTimePercent);
static WCHAR configPath[256];
static WCHAR rival_configPath[256];
static std::thread initThread;
};
}
+3 -2
View File
@@ -99,7 +99,7 @@
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\..\dependencies\PluginConfigApi;..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -139,7 +139,7 @@
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\..\dependencies\PluginConfigApi;..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -225,6 +225,7 @@
<ClInclude Include="Input\Mouse\MouseState.h" />
<ClInclude Include="Input\Xinput\Xinput.h" />
<ClInclude Include="Input\Xinput\XinputState.h" />
<ClInclude Include="pluginconfig.h" />
<ClInclude Include="Utilities\EnumBitwiseOperations.h" />
<ClInclude Include="Utilities\Math.h" />
<ClInclude Include="Utilities\Operations.h" />
@@ -195,6 +195,9 @@
<ClInclude Include="Components\ScoreSaver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="pluginconfig.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
@@ -5,6 +5,7 @@
#include <stdio.h>
#include "Constants.h"
#include "framework.h"
#include "pluginconfig.h"
#include "Input/Mouse/Mouse.h"
#include "Input/Xinput/Xinput.h"
#include "Input/Keyboard/Keyboard.h"
@@ -0,0 +1,13 @@
#include "PluginConfigApi.h"
using namespace PluginConfig;
extern "C" __declspec(dllexport) LPCWSTR GetPluginName(void)
{
return L"TLAC";
}
extern "C" __declspec(dllexport) LPCWSTR GetPluginDescription(void)
{
return L"Provides keyboard/mouse/controller input, player data management, bug fixes for running on more PCs, etc.\nThis plugin is required.";
}