[Theatre]: Avoid dvar lookup (#698)

This commit is contained in:
Edo 2023-01-03 20:17:46 +00:00 committed by GitHub
parent 7a438e3409
commit 766bf18435
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 26 deletions

View File

@ -11,10 +11,25 @@ namespace Components
unsigned int Theatre::CurrentSelection; unsigned int Theatre::CurrentSelection;
std::vector<Theatre::DemoInfo> Theatre::Demos; std::vector<Theatre::DemoInfo> Theatre::Demos;
Dvar::Var Theatre::CLAutoRecord;
Dvar::Var Theatre::CLDemosKeep;
char Theatre::BaselineSnapshot[131072] = {0}; char Theatre::BaselineSnapshot[131072] = {0};
int Theatre::BaselineSnapshotMsgLen; int Theatre::BaselineSnapshotMsgLen;
int Theatre::BaselineSnapshotMsgOff; int Theatre::BaselineSnapshotMsgOff;
nlohmann::json Theatre::DemoInfo::to_json() const
{
return nlohmann::json
{
{ "mapname", mapname },
{ "gametype", gametype },
{ "author", author },
{ "length", length },
{ "timestamp", std::to_string(timeStamp) },
};
}
void Theatre::GamestateWriteStub(Game::msg_t* msg, char byte) void Theatre::GamestateWriteStub(Game::msg_t* msg, char byte)
{ {
Game::MSG_WriteLong(msg, 0); Game::MSG_WriteLong(msg, 0);
@ -295,14 +310,14 @@ namespace Components
} }
} }
uint32_t Theatre::InitCGameStub() int Theatre::CL_FirstSnapshot_Stub()
{ {
if (Dvar::Var("cl_autoRecord").get<bool>() && !*Game::demoPlaying) if (CLAutoRecord.get<bool>() && !*Game::demoPlaying)
{ {
std::vector<std::string> files; std::vector<std::string> files;
auto demos = FileSystem::GetFileList("demos/", "dm_13"); auto demos = FileSystem::GetFileList("demos/", "dm_13");
for (auto demo : demos) for (auto& demo : demos)
{ {
if (Utils::String::StartsWith(demo, "auto_")) if (Utils::String::StartsWith(demo, "auto_"))
{ {
@ -310,7 +325,7 @@ namespace Components
} }
} }
auto numDel = static_cast<int>(files.size()) - Dvar::Var("cl_demosKeep").get<int>(); auto numDel = static_cast<int>(files.size()) - CLDemosKeep.get<int>();
for (auto i = 0; i < numDel; ++i) for (auto i = 0; i < numDel; ++i)
{ {
@ -322,13 +337,13 @@ namespace Components
Command::Execute(Utils::String::VA("record auto_%lld", std::time(nullptr)), true); Command::Execute(Utils::String::VA("record auto_%lld", std::time(nullptr)), true);
} }
return Utils::Hook::Call<DWORD()>(0x42BBB0)(); return Utils::Hook::Call<int()>(0x42BBB0)(); // DB_GetLoadedFlags
} }
void Theatre::MapChangeStub() void Theatre::SV_SpawnServer_Stub()
{ {
StopRecording(); StopRecording();
Utils::Hook::Call<void()>(0x464A60)(); Utils::Hook::Call<void()>(0x464A60)(); // Com_SyncThreads
} }
void Theatre::StopRecording() void Theatre::StopRecording()
@ -341,8 +356,8 @@ namespace Components
Theatre::Theatre() Theatre::Theatre()
{ {
Dvar::Register<bool>("cl_autoRecord", true, Game::DVAR_ARCHIVE, "Automatically record games."); CLAutoRecord = Dvar::Register<bool>("cl_autoRecord", true, Game::DVAR_ARCHIVE, "Automatically record games");
Dvar::Register<int>("cl_demosKeep", 30, 1, 999, Game::DVAR_ARCHIVE, "How many demos to keep with autorecord."); CLDemosKeep = Dvar::Register<int>("cl_demosKeep", 30, 1, 999, Game::DVAR_ARCHIVE, "How many demos to keep with autorecord");
Utils::Hook(0x5A8370, GamestateWriteStub, HOOK_CALL).install()->quick(); Utils::Hook(0x5A8370, GamestateWriteStub, HOOK_CALL).install()->quick();
Utils::Hook(0x5A85D2, RecordGamestateStub, HOOK_CALL).install()->quick(); Utils::Hook(0x5A85D2, RecordGamestateStub, HOOK_CALL).install()->quick();
@ -357,8 +372,8 @@ namespace Components
Utils::Hook(0x5A8156, StopRecordStub, HOOK_CALL).install()->quick(); Utils::Hook(0x5A8156, StopRecordStub, HOOK_CALL).install()->quick();
// Autorecording // Autorecording
Utils::Hook(0x5A1D6A, InitCGameStub, HOOK_CALL).install()->quick(); Utils::Hook(0x5A1D6A, CL_FirstSnapshot_Stub, HOOK_CALL).install()->quick();
Utils::Hook(0x4A712A, MapChangeStub, HOOK_CALL).install()->quick(); Utils::Hook(0x4A712A, SV_SpawnServer_Stub, HOOK_CALL).install()->quick();
// UIScripts // UIScripts
UIScript::Add("loadDemos", LoadDemos); UIScript::Add("loadDemos", LoadDemos);
@ -372,7 +387,7 @@ namespace Components
if (!Dedicated::IsEnabled()) Utils::Hook::Set<const char*>(0x47440B, "mp/defaultStringTable.csv"); if (!Dedicated::IsEnabled()) Utils::Hook::Set<const char*>(0x47440B, "mp/defaultStringTable.csv");
// Change font size // Change font size
Utils::Hook::Set<BYTE>(0x5AC854, 2); Utils::Hook::Set<std::uint8_t>(0x5AC854, 2);
Utils::Hook::Set<BYTE>(0x5AC85A, 2); Utils::Hook::Set<std::uint8_t>(0x5AC85A, 2);
} }
} }

View File

@ -20,23 +20,16 @@ namespace Components
int length; int length;
std::time_t timeStamp; std::time_t timeStamp;
[[nodiscard]] nlohmann::json to_json() const [[nodiscard]] nlohmann::json to_json() const;
{
return nlohmann::json
{
{ "mapname", mapname },
{ "gametype", gametype },
{ "author", author },
{ "length", length },
{ "timestamp", Utils::String::VA("%lld", timeStamp) } // Ugly, but prevents information loss
};
}
}; };
static DemoInfo CurrentInfo; static DemoInfo CurrentInfo;
static unsigned int CurrentSelection; static unsigned int CurrentSelection;
static std::vector<DemoInfo> Demos; static std::vector<DemoInfo> Demos;
static Dvar::Var CLAutoRecord;
static Dvar::Var CLDemosKeep;
static char BaselineSnapshot[131072]; static char BaselineSnapshot[131072];
static int BaselineSnapshotMsgLen; static int BaselineSnapshotMsgLen;
static int BaselineSnapshotMsgOff; static int BaselineSnapshotMsgOff;
@ -60,8 +53,8 @@ namespace Components
static void ServerTimedOutStub(); static void ServerTimedOutStub();
static void UISetActiveMenuStub(); static void UISetActiveMenuStub();
static uint32_t InitCGameStub(); static int CL_FirstSnapshot_Stub();
static void MapChangeStub(); static void SV_SpawnServer_Stub();
static void RecordStub(int channel, char* message, char* file); static void RecordStub(int channel, char* message, char* file);
static void StopRecordStub(int channel, char* message); static void StopRecordStub(int channel, char* message);