diff --git a/pcsx2/Patch.cpp b/pcsx2/Patch.cpp index be4d8d603c..e56f1d295f 100644 --- a/pcsx2/Patch.cpp +++ b/pcsx2/Patch.cpp @@ -15,7 +15,7 @@ #include "PrecompiledHeader.h" -#define _PC_ // disables MIPS opcode macros. +#define _PC_ // disables MIPS opcode macros. #include "IopCommon.h" #include "Patch.h" @@ -32,7 +32,7 @@ // This is a declaration for PatchMemory.cpp::_ApplyPatch where we're (patch.cpp) // the only consumer, so it's not made public via Patch.h // Applies a single patch line to emulation memory regardless of its "place" value. -extern void _ApplyPatch(IniPatch *p); +extern void _ApplyPatch(IniPatch* p); std::vector Patch; @@ -41,58 +41,56 @@ wxString strgametitle; struct PatchTextTable { - int code; - const wxChar* text; - PATCHTABLEFUNC* func; + int code; + const wxChar* text; + PATCHTABLEFUNC* func; }; static const PatchTextTable commands_patch[] = -{ - { 1, L"author", PatchFunc::author}, - { 2, L"comment", PatchFunc::comment }, - { 3, L"patch", PatchFunc::patch }, - { 0, wxEmptyString, NULL } // Array Terminator + { + {1, L"author", PatchFunc::author}, + {2, L"comment", PatchFunc::comment}, + {3, L"patch", PatchFunc::patch}, + {0, wxEmptyString, NULL} // Array Terminator }; static const PatchTextTable dataType[] = -{ - { 1, L"byte", NULL }, - { 2, L"short", NULL }, - { 3, L"word", NULL }, - { 4, L"double", NULL }, - { 5, L"extended", NULL }, - { 0, wxEmptyString, NULL } -}; + { + {1, L"byte", NULL}, + {2, L"short", NULL}, + {3, L"word", NULL}, + {4, L"double", NULL}, + {5, L"extended", NULL}, + {0, wxEmptyString, NULL}}; static const PatchTextTable cpuCore[] = -{ - { 1, L"EE", NULL }, - { 2, L"IOP", NULL }, - { 0, wxEmptyString, NULL } -}; + { + {1, L"EE", NULL}, + {2, L"IOP", NULL}, + {0, wxEmptyString, NULL}}; // IniFile Functions. -static void inifile_trim( wxString& buffer ) +static void inifile_trim(wxString& buffer) { - buffer.Trim(false); // trims left side. + buffer.Trim(false); // trims left side. - if( buffer.Length() <= 1 ) // this I'm not sure about... - air + if (buffer.Length() <= 1) // this I'm not sure about... - air { buffer.Empty(); return; } - if( buffer.Left( 2 ) == L"//" ) + if (buffer.Left(2) == L"//") { buffer.Empty(); return; } - buffer.Trim(true); // trims right side. + buffer.Trim(true); // trims right side. } -static int PatchTableExecute( const ParsedAssignmentString& set, const PatchTextTable * Table ) +static int PatchTableExecute(const ParsedAssignmentString& set, const PatchTextTable* Table) { int i = 0; @@ -100,7 +98,8 @@ static int PatchTableExecute( const ParsedAssignmentString& set, const PatchText { if (!set.lvalue.Cmp(Table[i].text)) { - if (Table[i].func) Table[i].func(set.lvalue, set.rvalue); + if (Table[i].func) + Table[i].func(set.lvalue, set.rvalue); break; } i++; @@ -112,13 +111,14 @@ static int PatchTableExecute( const ParsedAssignmentString& set, const PatchText // This routine is for executing the commands of the ini file. static void inifile_command(const wxString& cmd) { - ParsedAssignmentString set( cmd ); + ParsedAssignmentString set(cmd); // Is this really what we want to be doing here? Seems like just leaving it empty/blank // would make more sense... --air - if (set.rvalue.IsEmpty()) set.rvalue = set.lvalue; + if (set.rvalue.IsEmpty()) + set.rvalue = set.lvalue; - /*int code = */PatchTableExecute(set, commands_patch); + /*int code = */ PatchTableExecute(set, commands_patch); } // This routine loads patches from the game database (but not the config/game fixes/hacks) @@ -140,10 +140,9 @@ int LoadPatchesFromGamesDB(const wxString& crc, const GameDatabaseSchema::GameEn if (patch.patchLines.size() > 0) { for (auto line : patch.patchLines) - { - inifile_command(line); - } - + { + inifile_command(line); + } } } @@ -154,12 +153,13 @@ void inifile_processString(const wxString& inStr) { wxString str(inStr); inifile_trim(str); - if (!str.IsEmpty()) inifile_command(str); + if (!str.IsEmpty()) + inifile_command(str); } // This routine receives a file from inifile_read, trims it, // Then sends the command to be parsed. -void inifile_process(wxTextFile &f1 ) +void inifile_process(wxTextFile& f1) { for (uint i = 0; i < f1.GetLineCount(); i++) { @@ -176,7 +176,8 @@ static int _LoadPatchFiles(const wxDirName& folderName, wxString& fileSpec, cons { numberFoundPatchFiles = 0; - if (!folderName.Exists()) { + if (!folderName.Exists()) + { Console.WriteLn(Color_Red, L"The %s folder ('%s') is inaccessible. Skipping...", WX_STR(friendlyName), WX_STR(folderName.ToString())); return 0; } @@ -186,8 +187,10 @@ static int _LoadPatchFiles(const wxDirName& folderName, wxString& fileSpec, cons wxString buffer; wxTextFile f; bool found = dir.GetFirst(&buffer, L"*", wxDIR_FILES); - while (found) { - if (buffer.Upper().Matches(fileSpec.Upper())) { + while (found) + { + if (buffer.Upper().Matches(fileSpec.Upper())) + { PatchesCon->WriteLn(Color_Green, L"Found %s file: '%s'", WX_STR(friendlyName), WX_STR(buffer)); int before = Patch.size(); f.Open(Path::Combine(dir.GetName(), buffer)); @@ -195,7 +198,7 @@ static int _LoadPatchFiles(const wxDirName& folderName, wxString& fileSpec, cons f.Close(); int loaded = Patch.size() - before; PatchesCon->WriteLn((loaded ? Color_Green : Color_Gray), L"Loaded %d %s from '%s' at '%s'", - loaded, WX_STR(friendlyName), WX_STR(buffer), WX_STR(folderName.ToString())); + loaded, WX_STR(friendlyName), WX_STR(buffer), WX_STR(folderName.ToString())); numberFoundPatchFiles++; } found = dir.GetNext(&buffer); @@ -208,7 +211,8 @@ static int _LoadPatchFiles(const wxDirName& folderName, wxString& fileSpec, cons // Returns number of patches loaded // Note: does not reset previously loaded patches (use ForgetLoadedPatches() for that) // Note: only load patches from the root folder of the zip -int LoadPatchesFromZip(wxString gameCRC, const wxString& patchesArchiveFilename) { +int LoadPatchesFromZip(wxString gameCRC, const wxString& patchesArchiveFilename) +{ gameCRC.MakeUpper(); int before = Patch.size(); @@ -220,11 +224,13 @@ int LoadPatchesFromZip(wxString gameCRC, const wxString& patchesArchiveFilename) { wxString name = entry->GetName(); name.MakeUpper(); - if (name.Find(gameCRC) == 0 && name.Find(L".PNACH")+6u == name.Length()) { + if (name.Find(gameCRC) == 0 && name.Find(L".PNACH") + 6u == name.Length()) + { PatchesCon->WriteLn(Color_Green, L"Loading patch '%s' from archive '%s'", - WX_STR(entry->GetName()), WX_STR(patchesArchiveFilename)); + WX_STR(entry->GetName()), WX_STR(patchesArchiveFilename)); wxTextInputStream pnach(zip); - while (!zip.Eof()) { + while (!zip.Eof()) + { inifile_processString(pnach.ReadLine()); } } @@ -247,7 +253,8 @@ int LoadPatchesFromDir(wxString name, const wxDirName& folderName, const wxStrin // This comment _might_ be buggy. This function (LoadPatchesFromDir) loads from an explicit folder. // This folder can be cheats or cheats_ws at either the default location or a custom one. // This check only tests the default cheats folder, so the message it produces is possibly misleading. - if (folderName.ToString().IsSameAs(PathDefs::GetCheats().ToString()) && numberFoundPatchFiles == 0) { + if (folderName.ToString().IsSameAs(PathDefs::GetCheats().ToString()) && numberFoundPatchFiles == 0) + { wxString pathName = Path::Combine(folderName, name.MakeUpper() + L".pnach"); PatchesCon->WriteLn(Color_Gray, L"Not found %s file: %s", WX_STR(friendlyName), WX_STR(pathName)); } @@ -273,7 +280,7 @@ static u64 StrToU64(const wxString& str, int base = 10) // PatchFunc Functions. namespace PatchFunc { - void comment( const wxString& text1, const wxString& text2 ) + void comment(const wxString& text1, const wxString& text2) { PatchesCon->WriteLn(L"comment: " + text2); } @@ -287,21 +294,22 @@ namespace PatchFunc { wxArrayString m_pieces; - PatchPieces( const wxString& param ) + PatchPieces(const wxString& param) { - SplitString( m_pieces, param, L"," ); - if( m_pieces.Count() < 5 ) - throw wxsFormat( L"Expected 5 data parameters; only found %d", m_pieces.Count() ); + SplitString(m_pieces, param, L","); + if (m_pieces.Count() < 5) + throw wxsFormat(L"Expected 5 data parameters; only found %d", m_pieces.Count()); } - const wxString& PlaceToPatch() const { return m_pieces[0]; } - const wxString& CpuType() const { return m_pieces[1]; } - const wxString& MemAddr() const { return m_pieces[2]; } - const wxString& OperandSize() const { return m_pieces[3]; } - const wxString& WriteValue() const { return m_pieces[4]; } + const wxString& PlaceToPatch() const { return m_pieces[0]; } + const wxString& CpuType() const { return m_pieces[1]; } + const wxString& MemAddr() const { return m_pieces[2]; } + const wxString& OperandSize() const { return m_pieces[3]; } + const wxString& WriteValue() const { return m_pieces[4]; } }; - void patchHelper(const wxString& cmd, const wxString& param) { + void patchHelper(const wxString& cmd, const wxString& param) + { // Error Handling Note: I just throw simple wxStrings here, and then catch them below and // format them into more detailed cmd+data+error printouts. If we want to add user-friendly // (translated) messages for display in a popup window then we'll have to upgrade the @@ -315,19 +323,19 @@ namespace PatchFunc { PatchPieces pieces(param); - IniPatch iPatch = { 0 }; + IniPatch iPatch = {0}; iPatch.enabled = 0; - iPatch.placetopatch = StrToU32(pieces.PlaceToPatch(), 10); + iPatch.placetopatch = StrToU32(pieces.PlaceToPatch(), 10); if (iPatch.placetopatch >= _PPT_END_MARKER) throw wxsFormat(L"Invalid 'place' value '%s' (0 - once on startup, 1: continuously)", WX_STR(pieces.PlaceToPatch())); - iPatch.cpu = (patch_cpu_type)PatchTableExecute(pieces.CpuType(), cpuCore); - iPatch.addr = StrToU32(pieces.MemAddr(), 16); - iPatch.type = (patch_data_type)PatchTableExecute(pieces.OperandSize(), dataType); - iPatch.data = StrToU64(pieces.WriteValue(), 16); + iPatch.cpu = (patch_cpu_type)PatchTableExecute(pieces.CpuType(), cpuCore); + iPatch.addr = StrToU32(pieces.MemAddr(), 16); + iPatch.type = (patch_data_type)PatchTableExecute(pieces.OperandSize(), dataType); + iPatch.data = StrToU64(pieces.WriteValue(), 16); - if (iPatch.cpu == 0) + if (iPatch.cpu == 0) throw wxsFormat(L"Unrecognized CPU Target: '%s'", WX_STR(pieces.CpuType())); if (iPatch.type == 0) @@ -335,16 +343,15 @@ namespace PatchFunc iPatch.enabled = 1; // omg success!! Patch.push_back(iPatch); - } - catch( wxString& exmsg ) + catch (wxString& exmsg) { Console.Error(L"(Patch) Error Parsing: %s=%s", WX_STR(cmd), WX_STR(param)); - Console.Indent().Error( exmsg ); + Console.Indent().Error(exmsg); } } void patch(const wxString& cmd, const wxString& param) { patchHelper(cmd, param); } -} +} // namespace PatchFunc // This is for applying patches directly to memory void ApplyLoadedPatches(patch_place_type place) diff --git a/pcsx2/gui/AppCoreThread.cpp b/pcsx2/gui/AppCoreThread.cpp index 3f85b97056..1fe3971f0a 100644 --- a/pcsx2/gui/AppCoreThread.cpp +++ b/pcsx2/gui/AppCoreThread.cpp @@ -311,8 +311,8 @@ static int loadGameSettings(Pcsx2Config& dest, const GameDatabaseSchema::GameEnt // TODO - config - this could be simplified with maps instead of bitfields and enums for (GamefixId id = GamefixId_FIRST; id < pxEnumEnd; ++id) { - std::string key = wxString(EnumToString(id)).Append(L"Hack").ToStdString(); - + std::string key = wxString(EnumToString(id)).Append(L"Hack").ToStdString(); + // Gamefixes are already guaranteed to be valid, any invalid ones are dropped if (std::find(game.gameFixes.begin(), game.gameFixes.end(), key) != game.gameFixes.end()) {