Massively improve bootup times

This commit is contained in:
ineed bots
2023-09-17 18:52:02 -06:00
parent 5d0e5e4227
commit df2440a3ba
13 changed files with 839 additions and 1708 deletions

View File

@ -35,42 +35,13 @@ namespace re_cscr_stringlist
utils::hook::detour SL_CreateCanonicalFilename_hook;
utils::hook::detour Scr_CreateCanonicalFilename_hook;
void* SL_ConvertToString_original;
void* SL_GetStringLen_original;
void* GetHashCode_original;
void* SL_Init_original;
void* SL_FindStringOfSize_original;
void* SL_FindString_original;
void* SL_FindLowercaseString_original;
void* SL_AddUserInternal_original;
void* Mark_ScriptStringCustom_original;
void* SL_GetStringOfSize_original;
void* SL_GetString__original;
void* SL_GetString__0_original;
void* SL_GetLowercaseStringOfLen_original;
void* SL_GetLowercaseString_original;
void* SL_ConvertToLowercase_original;
void* SL_TransferRefToUser_original;
void* SL_FreeString_original;
void* SL_RemoveRefToString_original;
void* Scr_SetString_original;
void* Scr_SetStringFromCharString_original;
void* GScr_AllocString_original;
void* SL_GetStringForFloat_original;
void* SL_GetStringForInt_original;
void* SL_GetStringForVector_original;
void* SL_ShutdownSystem_original;
void* SL_TransferSystem_original;
void* SL_CreateCanonicalFilename_original;
void* Scr_CreateCanonicalFilename_original;
namespace
{
char* SL_ConvertToString_call(unsigned int id, game::scriptInstance_t inst, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_ConvertToString(id, inst, SL_ConvertToString_original);
return game::SL_ConvertToString(id, inst, SL_ConvertToString_hook.get_original());
#else
return codsrc::SL_ConvertToString(id, inst);
#endif
@ -92,7 +63,7 @@ namespace re_cscr_stringlist
int SL_GetStringLen_call(unsigned int a1, game::scriptInstance_t a2, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_GetStringLen(a1, a2, SL_GetStringLen_original);
return game::SL_GetStringLen(a1, a2, SL_GetStringLen_hook.get_original());
#else
return codsrc::SL_GetStringLen(a1, a2);
#endif
@ -114,7 +85,7 @@ namespace re_cscr_stringlist
unsigned int GetHashCode_call(unsigned int a1, const char* a2, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::GetHashCode(a1, a2, GetHashCode_original);
return game::GetHashCode(a1, a2, GetHashCode_hook.get_original());
#else
return codsrc::GetHashCode(a1, a2);
#endif
@ -136,7 +107,7 @@ namespace re_cscr_stringlist
void SL_Init_call(game::scriptInstance_t a1, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::SL_Init(a1, SL_Init_original);
game::SL_Init(a1, SL_Init_hook.get_original());
#else
codsrc::SL_Init(a1);
#endif
@ -157,7 +128,7 @@ namespace re_cscr_stringlist
unsigned int SL_FindStringOfSize_call(game::scriptInstance_t inst, [[maybe_unused]] void* caller_addr, const char* str_, unsigned int len)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_FindStringOfSize(inst, str_, len, SL_FindStringOfSize_original);
return game::SL_FindStringOfSize(inst, str_, len, SL_FindStringOfSize_hook.get_original());
#else
return codsrc::SL_FindStringOfSize(inst, str_, len);
#endif
@ -178,7 +149,7 @@ namespace re_cscr_stringlist
unsigned int SL_FindString_call(const char* a1, [[maybe_unused]] void* caller_addr, game::scriptInstance_t a2)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_FindString(a1, a2, SL_FindString_original);
return game::SL_FindString(a1, a2, SL_FindString_hook.get_original());
#else
return codsrc::SL_FindString(a1, a2);
#endif
@ -208,7 +179,7 @@ namespace re_cscr_stringlist
void SL_AddUserInternal_call(unsigned int user, game::RefString* refStr, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::SL_AddUserInternal(user, refStr, SL_AddUserInternal_original);
game::SL_AddUserInternal(user, refStr, SL_AddUserInternal_hook.get_original());
#else
codsrc::SL_AddUserInternal(user, refStr);
#endif
@ -230,7 +201,7 @@ namespace re_cscr_stringlist
void Mark_ScriptStringCustom_call(unsigned int a1, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::Mark_ScriptStringCustom(a1, Mark_ScriptStringCustom_original);
game::Mark_ScriptStringCustom(a1, Mark_ScriptStringCustom_hook.get_original());
#else
codsrc::Mark_ScriptStringCustom(a1);
#endif
@ -260,7 +231,7 @@ namespace re_cscr_stringlist
unsigned int SL_GetString__call(const char* a1, [[maybe_unused]] void* caller_addr, game::scriptInstance_t a2, unsigned int user)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_GetString_(a1, a2, user, SL_GetString__original);
return game::SL_GetString_(a1, a2, user, SL_GetString__hook.get_original());
#else
return codsrc::SL_GetString_(a1, a2, user);
#endif
@ -281,7 +252,7 @@ namespace re_cscr_stringlist
unsigned int SL_GetString__0_call(const char* a1, [[maybe_unused]] void* caller_addr, unsigned int user, game::scriptInstance_t a3)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_GetString__0(a1, user, a3, SL_GetString__0_original);
return game::SL_GetString__0(a1, user, a3, SL_GetString__0_hook.get_original());
#else
return codsrc::SL_GetString__0(a1, user, a3);
#endif
@ -311,7 +282,7 @@ namespace re_cscr_stringlist
unsigned int SL_GetLowercaseString_call(const char* a2, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_GetLowercaseString(a2, SL_GetLowercaseString_original);
return game::SL_GetLowercaseString(a2, SL_GetLowercaseString_hook.get_original());
#else
return codsrc::SL_GetLowercaseString(a2);
#endif
@ -341,7 +312,7 @@ namespace re_cscr_stringlist
void SL_TransferRefToUser_call(unsigned int stringValue, unsigned int user, [[maybe_unused]] void* caller_addr, game::scriptInstance_t inst)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::SL_TransferRefToUser(stringValue, user, inst, SL_TransferRefToUser_original);
game::SL_TransferRefToUser(stringValue, user, inst, SL_TransferRefToUser_hook.get_original());
#else
codsrc::SL_TransferRefToUser(stringValue, user, inst);
#endif
@ -372,7 +343,7 @@ namespace re_cscr_stringlist
void SL_RemoveRefToString_call(unsigned int stringVal, game::scriptInstance_t inst, [[maybe_unused]] void* caller_addr)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::SL_RemoveRefToString(stringVal, inst, SL_RemoveRefToString_original);
game::SL_RemoveRefToString(stringVal, inst, SL_RemoveRefToString_hook.get_original());
#else
codsrc::SL_RemoveRefToString(stringVal, inst);
#endif
@ -394,7 +365,7 @@ namespace re_cscr_stringlist
void Scr_SetString_call(game::scriptInstance_t inst, unsigned int from, [[maybe_unused]] void* caller_addr, unsigned __int16* to)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::Scr_SetString(inst, from, to, Scr_SetString_original);
game::Scr_SetString(inst, from, to, Scr_SetString_hook.get_original());
#else
codsrc::Scr_SetString(inst, from, to);
#endif
@ -416,7 +387,7 @@ namespace re_cscr_stringlist
void Scr_SetStringFromCharString_call(const char* a1, [[maybe_unused]] void* caller_addr, unsigned __int16* a2)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::Scr_SetStringFromCharString(a1, a2, Scr_SetStringFromCharString_original);
game::Scr_SetStringFromCharString(a1, a2, Scr_SetStringFromCharString_hook.get_original());
#else
codsrc::Scr_SetStringFromCharString(a1, a2);
#endif
@ -437,7 +408,7 @@ namespace re_cscr_stringlist
unsigned int GScr_AllocString_call(const char* a1, [[maybe_unused]] void* caller_addr, game::scriptInstance_t inst)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::GScr_AllocString(a1, inst, GScr_AllocString_original);
return game::GScr_AllocString(a1, inst, GScr_AllocString_hook.get_original());
#else
return codsrc::GScr_AllocString(a1, inst);
#endif
@ -458,7 +429,7 @@ namespace re_cscr_stringlist
unsigned int SL_GetStringForFloat_call(float a1, [[maybe_unused]] void* caller_addr, game::scriptInstance_t a2)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_GetStringForFloat(a1, a2, SL_GetStringForFloat_original);
return game::SL_GetStringForFloat(a1, a2, SL_GetStringForFloat_hook.get_original());
#else
return codsrc::SL_GetStringForFloat(a1, a2);
#endif
@ -480,7 +451,7 @@ namespace re_cscr_stringlist
unsigned int SL_GetStringForInt_call(int a1, [[maybe_unused]] void* caller_addr, game::scriptInstance_t a2)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_GetStringForInt(a1, a2, SL_GetStringForInt_original);
return game::SL_GetStringForInt(a1, a2, SL_GetStringForInt_hook.get_original());
#else
return codsrc::SL_GetStringForInt(a1, a2);
#endif
@ -501,7 +472,7 @@ namespace re_cscr_stringlist
unsigned int SL_GetStringForVector_call(float* a1, [[maybe_unused]] void* caller_addr, game::scriptInstance_t a2)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
return game::SL_GetStringForVector(a1, a2, SL_GetStringForVector_original);
return game::SL_GetStringForVector(a1, a2, SL_GetStringForVector_hook.get_original());
#else
return codsrc::SL_GetStringForVector(a1, a2);
#endif
@ -522,7 +493,7 @@ namespace re_cscr_stringlist
void SL_ShutdownSystem_call(game::scriptInstance_t a1, [[maybe_unused]] void* caller_addr, unsigned int a2)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::SL_ShutdownSystem(a1, a2, SL_ShutdownSystem_original);
game::SL_ShutdownSystem(a1, a2, SL_ShutdownSystem_hook.get_original());
#else
codsrc::SL_ShutdownSystem(a1, a2);
#endif
@ -552,7 +523,7 @@ namespace re_cscr_stringlist
void SL_CreateCanonicalFilename_call(const char* filename, [[maybe_unused]] void* caller_addr, char* newFilename)
{
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
game::SL_CreateCanonicalFilename(filename, newFilename, SL_CreateCanonicalFilename_original);
game::SL_CreateCanonicalFilename(filename, newFilename, SL_CreateCanonicalFilename_hook.get_original());
#else
codsrc::SL_CreateCanonicalFilename(filename, newFilename);
#endif
@ -585,64 +556,39 @@ namespace re_cscr_stringlist
public:
void post_unpack() override
{
SL_ConvertToString_hook.create(game::SL_ConvertToString_ADDR(), SL_ConvertToString_stub);
SL_GetStringLen_hook.create(game::SL_GetStringLen_ADDR(), SL_GetStringLen_stub);
GetHashCode_hook.create(game::GetHashCode_ADDR(), GetHashCode_stub);
SL_Init_hook.create(game::SL_Init_ADDR(), SL_Init_stub);
SL_FindStringOfSize_hook.create(game::SL_FindStringOfSize_ADDR(), SL_FindStringOfSize_stub);
SL_FindString_hook.create(game::SL_FindString_ADDR(), SL_FindString_stub);
SL_FindLowercaseString_hook.create(game::SL_FindLowercaseString.get(), SL_FindLowercaseString_stub);
SL_AddUserInternal_hook.create(game::SL_AddUserInternal_ADDR(), SL_AddUserInternal_stub);
Mark_ScriptStringCustom_hook.create(game::Mark_ScriptStringCustom_ADDR(), Mark_ScriptStringCustom_stub);
SL_GetStringOfSize_hook.create(game::SL_GetStringOfSize.get(), SL_GetStringOfSize_stub);
SL_GetString__hook.create(game::SL_GetString__ADDR(), SL_GetString__stub);
SL_GetString__0_hook.create(game::SL_GetString__0_ADDR(), SL_GetString__0_stub);
SL_GetLowercaseStringOfLen_hook.create(game::SL_GetLowercaseStringOfLen.get(), SL_GetLowercaseStringOfLen_stub);
SL_GetLowercaseString_hook.create(game::SL_GetLowercaseString_ADDR(), SL_GetLowercaseString_stub);
SL_ConvertToLowercase_hook.create(game::SL_ConvertToLowercase.get(), SL_ConvertToLowercase_stub);
SL_TransferRefToUser_hook.create(game::SL_TransferRefToUser_ADDR(), SL_TransferRefToUser_stub);
SL_FreeString_hook.create(game::SL_FreeString.get(), SL_FreeString_stub);
SL_RemoveRefToString_hook.create(game::SL_RemoveRefToString_ADDR(), SL_RemoveRefToString_stub);
Scr_SetString_hook.create(game::Scr_SetString_ADDR(), Scr_SetString_stub);
Scr_SetStringFromCharString_hook.create(game::Scr_SetStringFromCharString_ADDR(), Scr_SetStringFromCharString_stub);
GScr_AllocString_hook.create(game::GScr_AllocString_ADDR(), GScr_AllocString_stub);
SL_GetStringForFloat_hook.create(game::SL_GetStringForFloat_ADDR(), SL_GetStringForFloat_stub);
SL_GetStringForInt_hook.create(game::SL_GetStringForInt_ADDR(), SL_GetStringForInt_stub);
SL_GetStringForVector_hook.create(game::SL_GetStringForVector_ADDR(), SL_GetStringForVector_stub);
SL_ShutdownSystem_hook.create(game::SL_ShutdownSystem_ADDR(), SL_ShutdownSystem_stub);
SL_TransferSystem_hook.create(game::SL_TransferSystem.get(), SL_TransferSystem_stub);
SL_CreateCanonicalFilename_hook.create(game::SL_CreateCanonicalFilename_ADDR(), SL_CreateCanonicalFilename_stub);
Scr_CreateCanonicalFilename_hook.create(game::Scr_CreateCanonicalFilename.get(), Scr_CreateCanonicalFilename_stub);
bool quick = true;
#ifdef RE_CSCR_STRINGLIST_USE_WRAPPERS
quick = false;
#endif
//Original hook function addresses
SL_ConvertToString_original = SL_ConvertToString_hook.get_original();
SL_GetStringLen_original = SL_GetStringLen_hook.get_original();
GetHashCode_original = GetHashCode_hook.get_original();
SL_Init_original = SL_Init_hook.get_original();
SL_FindStringOfSize_original = SL_FindStringOfSize_hook.get_original();
SL_FindString_original = SL_FindString_hook.get_original();
SL_FindLowercaseString_original = SL_FindLowercaseString_hook.get_original();
SL_AddUserInternal_original = SL_AddUserInternal_hook.get_original();
Mark_ScriptStringCustom_original = Mark_ScriptStringCustom_hook.get_original();
SL_GetStringOfSize_original = SL_GetStringOfSize_hook.get_original();
SL_GetString__original = SL_GetString__hook.get_original();
SL_GetString__0_original = SL_GetString__0_hook.get_original();
SL_GetLowercaseStringOfLen_original = SL_GetLowercaseStringOfLen_hook.get_original();
SL_GetLowercaseString_original = SL_GetLowercaseString_hook.get_original();
SL_ConvertToLowercase_original = SL_ConvertToLowercase_hook.get_original();
SL_TransferRefToUser_original = SL_TransferRefToUser_hook.get_original();
SL_FreeString_original = SL_FreeString_hook.get_original();
SL_RemoveRefToString_original = SL_RemoveRefToString_hook.get_original();
Scr_SetString_original = Scr_SetString_hook.get_original();
Scr_SetStringFromCharString_original = Scr_SetStringFromCharString_hook.get_original();
GScr_AllocString_original = GScr_AllocString_hook.get_original();
SL_GetStringForFloat_original = SL_GetStringForFloat_hook.get_original();
SL_GetStringForInt_original = SL_GetStringForInt_hook.get_original();
SL_GetStringForVector_original = SL_GetStringForVector_hook.get_original();
SL_ShutdownSystem_original = SL_ShutdownSystem_hook.get_original();
SL_TransferSystem_original = SL_TransferSystem_hook.get_original();
SL_CreateCanonicalFilename_original = SL_CreateCanonicalFilename_hook.get_original();
Scr_CreateCanonicalFilename_original = Scr_CreateCanonicalFilename_hook.get_original();
SL_ConvertToString_hook.create(game::SL_ConvertToString_ADDR(), SL_ConvertToString_stub, quick);
SL_GetStringLen_hook.create(game::SL_GetStringLen_ADDR(), SL_GetStringLen_stub, quick);
GetHashCode_hook.create(game::GetHashCode_ADDR(), GetHashCode_stub, quick);
SL_Init_hook.create(game::SL_Init_ADDR(), SL_Init_stub, quick);
SL_FindStringOfSize_hook.create(game::SL_FindStringOfSize_ADDR(), SL_FindStringOfSize_stub, quick);
SL_FindString_hook.create(game::SL_FindString_ADDR(), SL_FindString_stub, quick);
SL_FindLowercaseString_hook.create(game::SL_FindLowercaseString.get(), SL_FindLowercaseString_stub, quick);
SL_AddUserInternal_hook.create(game::SL_AddUserInternal_ADDR(), SL_AddUserInternal_stub, quick);
Mark_ScriptStringCustom_hook.create(game::Mark_ScriptStringCustom_ADDR(), Mark_ScriptStringCustom_stub, quick);
SL_GetStringOfSize_hook.create(game::SL_GetStringOfSize.get(), SL_GetStringOfSize_stub, quick);
SL_GetString__hook.create(game::SL_GetString__ADDR(), SL_GetString__stub, quick);
SL_GetString__0_hook.create(game::SL_GetString__0_ADDR(), SL_GetString__0_stub, quick);
SL_GetLowercaseStringOfLen_hook.create(game::SL_GetLowercaseStringOfLen.get(), SL_GetLowercaseStringOfLen_stub, quick);
SL_GetLowercaseString_hook.create(game::SL_GetLowercaseString_ADDR(), SL_GetLowercaseString_stub, quick);
SL_ConvertToLowercase_hook.create(game::SL_ConvertToLowercase.get(), SL_ConvertToLowercase_stub, quick);
SL_TransferRefToUser_hook.create(game::SL_TransferRefToUser_ADDR(), SL_TransferRefToUser_stub, quick);
SL_FreeString_hook.create(game::SL_FreeString.get(), SL_FreeString_stub, quick);
SL_RemoveRefToString_hook.create(game::SL_RemoveRefToString_ADDR(), SL_RemoveRefToString_stub, quick);
Scr_SetString_hook.create(game::Scr_SetString_ADDR(), Scr_SetString_stub, quick);
Scr_SetStringFromCharString_hook.create(game::Scr_SetStringFromCharString_ADDR(), Scr_SetStringFromCharString_stub, quick);
GScr_AllocString_hook.create(game::GScr_AllocString_ADDR(), GScr_AllocString_stub, quick);
SL_GetStringForFloat_hook.create(game::SL_GetStringForFloat_ADDR(), SL_GetStringForFloat_stub, quick);
SL_GetStringForInt_hook.create(game::SL_GetStringForInt_ADDR(), SL_GetStringForInt_stub, quick);
SL_GetStringForVector_hook.create(game::SL_GetStringForVector_ADDR(), SL_GetStringForVector_stub, quick);
SL_ShutdownSystem_hook.create(game::SL_ShutdownSystem_ADDR(), SL_ShutdownSystem_stub, quick);
SL_TransferSystem_hook.create(game::SL_TransferSystem.get(), SL_TransferSystem_stub, quick);
SL_CreateCanonicalFilename_hook.create(game::SL_CreateCanonicalFilename_ADDR(), SL_CreateCanonicalFilename_stub, quick);
Scr_CreateCanonicalFilename_hook.create(game::Scr_CreateCanonicalFilename.get(), Scr_CreateCanonicalFilename_stub, quick);
}
private: