Core: Allow overriding the enabling of a code

If we want to enable codes in the default game INIs,
we should have some way for users to disable them.
This commit accomplishes that by adding a *_Disabled
section corresponding to each *_Enabled section.
This commit is contained in:
JosJuice
2020-12-10 12:58:27 +01:00
parent 3328eb4523
commit 366cfd0f8c
14 changed files with 68 additions and 69 deletions

View File

@ -26,7 +26,6 @@
#include <iterator>
#include <mutex>
#include <string>
#include <unordered_set>
#include <utility>
#include <vector>
@ -39,6 +38,7 @@
#include "Common/MsgHandler.h"
#include "Core/ARDecrypt.h"
#include "Core/CheatCodes.h"
#include "Core/ConfigManager.h"
#include "Core/PowerPC/MMU.h"
@ -120,7 +120,7 @@ void ApplyCodes(const std::vector<ARCode>& codes)
s_disable_logging = false;
s_active_codes.clear();
std::copy_if(codes.begin(), codes.end(), std::back_inserter(s_active_codes),
[](const ARCode& code) { return code.active; });
[](const ARCode& code) { return code.enabled; });
s_active_codes.shrink_to_fit();
}
@ -136,7 +136,7 @@ void UpdateSyncedCodes(const std::vector<ARCode>& codes)
s_synced_codes.clear();
s_synced_codes.reserve(codes.size());
std::copy_if(codes.begin(), codes.end(), std::back_inserter(s_synced_codes),
[](const ARCode& code) { return code.active; });
[](const ARCode& code) { return code.enabled; });
s_synced_codes.shrink_to_fit();
}
@ -148,7 +148,7 @@ std::vector<ARCode> ApplyAndReturnCodes(const std::vector<ARCode>& codes)
s_disable_logging = false;
s_active_codes.clear();
std::copy_if(codes.begin(), codes.end(), std::back_inserter(s_active_codes),
[](const ARCode& code) { return code.active; });
[](const ARCode& code) { return code.enabled; });
}
s_active_codes.shrink_to_fit();
@ -160,7 +160,7 @@ void AddCode(ARCode code)
if (!SConfig::GetInstance().bEnableCheats)
return;
if (code.active)
if (code.enabled)
{
std::lock_guard<std::mutex> guard(s_lock);
s_disable_logging = false;
@ -178,20 +178,6 @@ std::vector<ARCode> LoadCodes(const IniFile& global_ini, const IniFile& local_in
{
std::vector<ARCode> codes;
std::unordered_set<std::string> enabled_names;
{
std::vector<std::string> enabled_lines;
local_ini.GetLines("ActionReplay_Enabled", &enabled_lines);
for (const std::string& line : enabled_lines)
{
if (!line.empty() && line[0] == '$')
{
std::string name = line.substr(1, line.size() - 1);
enabled_names.insert(name);
}
}
}
const IniFile* inis[2] = {&global_ini, &local_ini};
for (const IniFile* ini : inis)
{
@ -225,7 +211,6 @@ std::vector<ARCode> LoadCodes(const IniFile& global_ini, const IniFile& local_in
}
current_code.name = line.substr(1, line.size() - 1);
current_code.active = enabled_names.find(current_code.name) != enabled_names.end();
current_code.user_defined = (ini == &local_ini);
}
else
@ -279,6 +264,8 @@ std::vector<ARCode> LoadCodes(const IniFile& global_ini, const IniFile& local_in
DecryptARCode(encrypted_lines, &current_code.ops);
codes.push_back(current_code);
}
ReadEnabledAndDisabled(*ini, "ActionReplay", &codes);
}
return codes;
@ -290,7 +277,7 @@ void SaveCodes(IniFile* local_ini, const std::vector<ARCode>& codes)
std::vector<std::string> enabled_lines;
for (const ActionReplay::ARCode& code : codes)
{
if (code.active)
if (code.enabled)
enabled_lines.emplace_back("$" + code.name);
if (code.user_defined)