mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-26 23:55:40 +00:00
CheatList: Save additional DuckStation fields in comments
This commit is contained in:
parent
39a61d2207
commit
cb6ef03775
|
@ -41,8 +41,10 @@ bool CheatList::LoadFromPCSXRFile(const char* filename)
|
|||
|
||||
char line[1024];
|
||||
std::string comments;
|
||||
std::string group;
|
||||
CheatCode::Type type = CheatCode::Type::Gameshark;
|
||||
CheatCode::Activation activation = CheatCode::Activation::EndFrame;
|
||||
CheatCode current_code;
|
||||
current_code.group = "Ungrouped";
|
||||
while (std::fgets(line, sizeof(line), fp.get()))
|
||||
{
|
||||
char* start = line;
|
||||
|
@ -60,6 +62,23 @@ bool CheatList::LoadFromPCSXRFile(const char* filename)
|
|||
end--;
|
||||
}
|
||||
|
||||
// DuckStation metadata
|
||||
if (StringUtil::Strncasecmp(start, "#group=", 7) == 0)
|
||||
{
|
||||
group = start + 7;
|
||||
continue;
|
||||
}
|
||||
if (StringUtil::Strncasecmp(start, "#type=", 6) == 0)
|
||||
{
|
||||
type = CheatCode::ParseTypeName(start + 6).value_or(CheatCode::Type::Gameshark);
|
||||
continue;
|
||||
}
|
||||
if (StringUtil::Strncasecmp(start, "#activation=", 12) == 0)
|
||||
{
|
||||
activation = CheatCode::ParseActivationName(start + 12).value_or(CheatCode::Activation::EndFrame);
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip comments and empty line
|
||||
if (*start == '#' || *start == ';' || *start == '/' || *start == '\"')
|
||||
{
|
||||
|
@ -78,9 +97,17 @@ bool CheatList::LoadFromPCSXRFile(const char* filename)
|
|||
m_codes.push_back(std::move(current_code));
|
||||
|
||||
current_code = CheatCode();
|
||||
current_code.group = "Ungrouped";
|
||||
if (group.empty())
|
||||
group = "Ungrouped";
|
||||
|
||||
current_code.group = std::move(group);
|
||||
group = std::string();
|
||||
current_code.comments = std::move(comments);
|
||||
comments = std::string();
|
||||
current_code.type = type;
|
||||
type = CheatCode::Type::Gameshark;
|
||||
current_code.activation = activation;
|
||||
activation = CheatCode::Activation::EndFrame;
|
||||
|
||||
if (*start == '*')
|
||||
{
|
||||
|
@ -113,7 +140,7 @@ bool CheatList::LoadFromPCSXRFile(const char* filename)
|
|||
|
||||
if (current_code.Valid())
|
||||
{
|
||||
// technically this isn't the place for end of file
|
||||
// technically this isn't the place for end of file
|
||||
if (!comments.empty())
|
||||
current_code.comments += comments;
|
||||
m_codes.push_back(std::move(current_code));
|
||||
|
@ -356,6 +383,9 @@ bool CheatList::SaveToPCSXRFile(const char* filename)
|
|||
{
|
||||
if (!cc.comments.empty())
|
||||
std::fputs(cc.comments.c_str(), fp.get());
|
||||
std::fprintf(fp.get(), "#group=%s\n", cc.group.c_str());
|
||||
std::fprintf(fp.get(), "#type=%s\n", CheatCode::GetTypeName(cc.type));
|
||||
std::fprintf(fp.get(), "#activation=%s\n", CheatCode::GetActivationName(cc.activation));
|
||||
std::fprintf(fp.get(), "[%s%s]\n", cc.enabled ? "*" : "", cc.description.c_str());
|
||||
for (const CheatCode::Instruction& i : cc.instructions)
|
||||
std::fprintf(fp.get(), "%08X %04X\n", i.first, i.second);
|
||||
|
|
Loading…
Reference in a new issue