Support single widescreen dbf file. Also includes a batch file to create a cheats_ws.dbf file from individual pnach files, and also includes the cheats_ws.dbf file which was generated from the current individual ws cheat pnach files.

Still needs: 1. remove all single ws pnach files from the repository. 2. Update the installer/uninstaller accordingly.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5827 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
avihal@gmail.com 2014-01-24 21:13:25 +00:00
parent 4ae6b0cb83
commit d11382a20c
5 changed files with 21338 additions and 3 deletions

21254
bin/cheats_ws.dbf Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
%~d0
cd %~p0
set db=cheats_ws.dbf
del %db%
@echo off
echo Creating %db%
for %%f in (*.pnach) do (
echo Processing %%f
echo //IMPORT-START:%%f>> %db%
echo [patches=%%~nf]>> %db%
type %%f>> %db%
echo.>> %db%
echo [/patches]>> %db%
echo //IMPORT-END:%%f>> %db%
echo.>> %db%
echo.>> %db%
)

View File

@ -22,6 +22,7 @@
#include "GameDatabase.h"
#include <wx/textfile.h>
#include <wx/dir.h>
#include <wx/textfile.h>
IniPatch Patch[ MAX_PATCH ];
IniPatch Cheat[ MAX_CHEAT ];
@ -155,14 +156,20 @@ int InitPatches(const wxString& crc, const Game_Data& game)
return patchnumber;
}
void inifile_processString(const wxString& inStr)
{
wxString str(inStr);
inifile_trim(str);
if (!str.IsEmpty()) inifile_command(1, str);
}
// This routine receives a file from inifile_read, trims it,
// Then sends the command to be parsed.
void inifile_process(wxTextFile &f1 )
{
for (uint i = 0; i < f1.GetLineCount(); i++)
{
inifile_trim(f1[i]);
if (!f1[i].IsEmpty()) inifile_command(1, f1[i]);
inifile_processString(f1[i]);
}
}
@ -199,6 +206,51 @@ static int LoadCheatsFiles(const wxDirName& folderName, wxString& fileSpec, cons
return cheatnumber - before;
}
// This routine loads cheats from a dbf file
// Returns number of cheats loaded
// Note: Should be called after InitPatches()
// expected DB format of section(s) to be loaded:
//[patches=ABCDE1234<anything can come here upto EOL>
// <patch file content, possibly multiline, possibly with comments>
//[/patches]
// DB file notes: 1. no spaces around the '='. 2. CRC should be in upper case padded with 0s to 8 chars
int LoadCheatsFromDbf(wxString gameCRC, const wxString& cheatsDbfFilename) {
gameCRC.MakeUpper();
wxTextFile db(cheatsDbfFilename);
db.Open();
int before = cheatnumber;
wxString line;
bool insideCurrentGame = false;
bool first = true;
while (true) {
if (first) line = db.GetFirstLine();
else line = db.GetNextLine();
first = false;
if (insideCurrentGame) {
if (line.Find(L"[/patches]") == 0) {
insideCurrentGame = false;
continue;
}
inifile_processString(line);
} else if (line.Find(wxString(L"[patches=") + gameCRC) == 0) {
insideCurrentGame = true;
}
if (db.Eof()) break;
}
db.Close();
return cheatnumber - before;
}
// This routine loads cheats from *.pnach files
// Returns number of cheats loaded
// Note: Should be called after InitPatches()

View File

@ -59,6 +59,7 @@ namespace PatchFunc
extern void ResetCheatsCount();
extern int LoadCheats(wxString name, const wxDirName& folderName, const wxString& friendlyName);
extern int LoadCheatsFromDbf(wxString gameCRC, const wxString& cheatsDbfFilename);
extern void inifile_command(bool isCheat, const wxString& cmd);
extern void inifile_trim(wxString& buffer);

View File

@ -18,6 +18,8 @@
#include "AppSaveStates.h"
#include "AppGameDatabase.h"
#include <wx/stdpaths.h>
#include "Utilities/TlsVariable.inl"
#include "ps2/BiosTools.h"
@ -312,6 +314,7 @@ void AppCoreThread::ApplySettings( const Pcsx2Config& src )
int numberLoadedCheats;
int numberLoadedWideScreenPatches;
int numberDbfCheatsLoaded;
if (ElfCRC) gameCRC.Printf( L"%8.8x", ElfCRC );
if (!DiscSerial.IsEmpty()) gameSerial = L" [" + DiscSerial + L"]";
@ -365,6 +368,13 @@ void AppCoreThread::ApplySettings( const Pcsx2Config& src )
if (EmuConfig.EnableWideScreenPatches) {
if (numberLoadedWideScreenPatches = LoadCheats(gameCRC, PathDefs::GetCheatsWS(), L"Widescreen hacks")) {
gameWsHacks.Printf(L" [%d widescreen hacks]", numberLoadedWideScreenPatches);
} else {
// No ws cheat files found at the cheats_ws folder, try the ws cheats db file.
wxString cheats_wsDbf = Path::Combine(((wxFileName)wxStandardPaths::Get().GetExecutablePath()).GetPath(), L"cheats_ws.dbf");
if (numberDbfCheatsLoaded = LoadCheatsFromDbf(gameCRC, cheats_wsDbf)) {
Console.WriteLn(Color_Green, "(Wide Screen Cheats DB) Patches Loaded: %d", numberDbfCheatsLoaded);
gameWsHacks.Printf(L" [%d widescreen hacks]", numberDbfCheatsLoaded);
}
}
}