*fixed problem with loading wrong cheats instead of the selected

*fixed possible problem in activating cheats for certain languages
This commit is contained in:
dimok789 2012-05-10 19:04:41 +00:00
parent 378463e838
commit 11feda685b
4 changed files with 38 additions and 42 deletions

View File

@ -2,8 +2,8 @@
<app version="1"> <app version="1">
<name> USB Loader GX</name> <name> USB Loader GX</name>
<coder>USB Loader GX Team</coder> <coder>USB Loader GX Team</coder>
<version>2.3 r1174</version> <version>2.3 r1177</version>
<release_date>201205091915</release_date> <release_date>201205101853</release_date>
<!-- // remove this line to enable arguments <!-- // remove this line to enable arguments
<arguments> <arguments>
<arg>--ios=250</arg> <arg>--ios=250</arg>

View File

@ -120,11 +120,11 @@ int CheatMenu(const char * gameID)
if (ret >= 0) if (ret >= 0)
{ {
const char *strCheck = cheatslst.GetName(ret); const char *strCheck = cheatslst.GetName(ret);
if (strCheck && strncmp(strCheck, tr("ON"), 2) == 0) if (strCheck && strcmp(strCheck, tr("ON")) == 0)
{ {
cheatslst.SetName(ret, "%s", tr("OFF")); cheatslst.SetName(ret, "%s", tr("OFF"));
} }
else if (strCheck && strncmp(strCheck, tr("OFF"), 3) == 0) else if (strCheck && strcmp(strCheck, tr("OFF")) == 0)
{ {
cheatslst.SetName(ret, "%s", tr("ON")); cheatslst.SetName(ret, "%s", tr("ON"));
} }
@ -138,7 +138,7 @@ int CheatMenu(const char * gameID)
for (int i = 0; i < cntcheats; i++) for (int i = 0; i < cntcheats; i++)
{ {
const char *strCheck = cheatslst.GetName(i); const char *strCheck = cheatslst.GetName(i);
if (strCheck && strncmp(strCheck, tr("ON"), 2) == 0) if (strCheck && strcmp(strCheck, tr("ON")) == 0)
vActiveCheats.push_back(i); vActiveCheats.push_back(i);
} }
if (vActiveCheats.size() == 0) if (vActiveCheats.size() == 0)

View File

@ -36,11 +36,9 @@ GCTCheats::~GCTCheats(void)
void GCTCheats::Clear(void) void GCTCheats::Clear(void)
{ {
sGameID.clear(); cheatList.clear();
sCheatName.clear(); sGameID.clear();
sGameTitle.clear(); sGameTitle.clear();
sCheatComment.clear();
sCheats.clear();
} }
@ -56,26 +54,26 @@ string GCTCheats::getGameID(void)
vector<unsigned int> GCTCheats::getCheat(int nr) vector<unsigned int> GCTCheats::getCheat(int nr)
{ {
if((unsigned int)nr >= sCheats.size()) if((unsigned int)nr >= cheatList.size())
return vector<unsigned int>(); return vector<unsigned int>();
return sCheats[nr]; return cheatList[nr].sCheats;
} }
string GCTCheats::getCheatName(int nr) string GCTCheats::getCheatName(int nr)
{ {
if((unsigned int)nr >= sCheatName.size()) if((unsigned int)nr >= cheatList.size())
return ERRORRANGE; return ERRORRANGE;
return sCheatName[nr]; return cheatList[nr].sCheatName;
} }
string GCTCheats::getCheatComment(int nr) string GCTCheats::getCheatComment(int nr)
{ {
if((unsigned int)nr >= sCheatComment.size()) if((unsigned int)nr >= cheatList.size())
return ERRORRANGE; return ERRORRANGE;
return sCheatComment[nr]; return cheatList[nr].sCheatComment;
} }
int GCTCheats::createGCT(const vector<int> &vCheats, const char * filename) int GCTCheats::createGCT(const vector<int> &vCheats, const char * filename)
@ -90,21 +88,17 @@ int GCTCheats::createGCT(const vector<int> &vCheats, const char * filename)
fwrite(GCT_Header, sizeof(GCT_Header), 1, pFile); fwrite(GCT_Header, sizeof(GCT_Header), 1, pFile);
int cnt = vCheats.size(); int cnt = vCheats.size();
int c = 0; int c = 0;
while (c < cnt) while (c < cnt)
{ {
if((unsigned int)vCheats[c] > sCheats.size()) if((unsigned int)vCheats[c] >= cheatList.size())
continue; continue;
vector<unsigned int> &cheatBuf = sCheats[vCheats[c]]; vector<unsigned int> &cheatBuf = cheatList[vCheats[c]].sCheats;
unsigned int x = 0; if(cheatBuf.size() > 0)
fwrite((char*)&cheatBuf[0], cheatBuf.size() * sizeof(unsigned int), 1, pFile);
while (x < cheatBuf.size())
{
fwrite((char*)&cheatBuf[x], 4, 1, pFile);
x++;
}
c++; c++;
} }
@ -166,9 +160,9 @@ int GCTCheats::openTxtfile(const char * filename)
if(*line == 0) if(*line == 0)
continue; continue;
sCheatName.push_back(line); // first line is the cheat name
CheatEntry cheatEntry;
vector<unsigned int> cheatdata; cheatEntry.sCheatName = line;
while (fgets(line, max_line_size, pFile)) while (fgets(line, max_line_size, pFile))
{ {
@ -183,19 +177,17 @@ int GCTCheats::openTxtfile(const char * filename)
line[8] = 0; line[8] = 0;
line[17] = 0; line[17] = 0;
cheatdata.push_back(strtoul(&line[0], 0, 16)); cheatEntry.sCheats.push_back(strtoul(&line[0], 0, 16));
cheatdata.push_back(strtoul(&line[9], 0, 16)); cheatEntry.sCheats.push_back(strtoul(&line[9], 0, 16));
} }
else else
{ {
sCheatComment.push_back(line); cheatEntry.sCheatComment = line;
} }
} }
if(cheatdata.empty()) if(!cheatEntry.sCheats.empty())
continue; cheatList.push_back(cheatEntry);
sCheats.push_back(cheatdata);
} }
fclose(pFile); fclose(pFile);
delete [] line; delete [] line;
@ -223,10 +215,10 @@ bool GCTCheats::IsCode(const char *str)
bool GCTCheats::IsCheatIncluded(int iCheat, const unsigned char *gctBuf, unsigned int gctSize) bool GCTCheats::IsCheatIncluded(int iCheat, const unsigned char *gctBuf, unsigned int gctSize)
{ {
if(!gctBuf || (unsigned int)iCheat >= sCheats.size()) if(!gctBuf || (unsigned int)iCheat >= cheatList.size())
return false; return false;
vector<unsigned int> &Cheat = sCheats[iCheat]; vector<unsigned int> &Cheat = cheatList[iCheat].sCheats;
int len = Cheat.size() * sizeof(unsigned int); int len = Cheat.size() * sizeof(unsigned int);
for(unsigned int i = sizeof(GCT_Header); i + len <= gctSize - sizeof(GCT_Footer); i += 4) for(unsigned int i = sizeof(GCT_Header); i + len <= gctSize - sizeof(GCT_Footer); i += 4)

View File

@ -29,9 +29,13 @@ class GCTCheats
private: private:
string sGameID; string sGameID;
string sGameTitle; string sGameTitle;
vector< string > sCheatName; struct CheatEntry
vector< string > sCheatComment; {
vector< vector<unsigned int> > sCheats; string sCheatName;
string sCheatComment;
vector<unsigned int> sCheats;
};
vector<CheatEntry> cheatList;
public: public:
//!Constructor //!Constructor
GCTCheats(void); GCTCheats(void);
@ -49,7 +53,7 @@ class GCTCheats
int createGCT(const vector<int> &vCheats, const char * filename); int createGCT(const vector<int> &vCheats, const char * filename);
//!Gets Count cheats //!Gets Count cheats
//!\return Count cheats //!\return Count cheats
int getCnt() const { return sCheats.size(); } int getCnt() const { return cheatList.size(); }
//!Gets Game Name //!Gets Game Name
//!\return Game Name //!\return Game Name
string getGameName(void); string getGameName(void);
@ -64,7 +68,7 @@ class GCTCheats
string getCheatName(int nr); string getCheatName(int nr);
//!Gets Cheat Comment //!Gets Cheat Comment
//!\return Cheat Comment //!\return Cheat Comment
string getCheatComment(int nr); string getCheatComment(int nr);
//!Clear all loaded cheats //!Clear all loaded cheats
void Clear(void); void Clear(void);
//!Check if string is a code //!Check if string is a code