mirror of https://github.com/mgba-emu/mgba.git
GBA Cheats: Use an enum for GSA versions
This commit is contained in:
parent
3d39e2a041
commit
845ecfe81e
|
@ -150,26 +150,26 @@ static bool GBACheatAddAutodetect(struct GBACheatSet* set, uint32_t op1, uint32_
|
||||||
o2 = op2;
|
o2 = op2;
|
||||||
if (gsaP > maxProbability) {
|
if (gsaP > maxProbability) {
|
||||||
maxProbability = gsaP;
|
maxProbability = gsaP;
|
||||||
GBACheatSetGameSharkVersion(set, 1);
|
GBACheatSetGameSharkVersion(set, GBA_GS_GSAV1);
|
||||||
}
|
}
|
||||||
|
|
||||||
GBACheatDecryptGameShark(&o1, &o2, GBACheatProActionReplaySeeds);
|
GBACheatDecryptGameShark(&o1, &o2, GBACheatProActionReplaySeeds);
|
||||||
parP = GBACheatProActionReplayProbability(o1, o2);
|
parP = GBACheatProActionReplayProbability(o1, o2);
|
||||||
if (parP > maxProbability) {
|
if (parP > maxProbability) {
|
||||||
maxProbability = parP;
|
maxProbability = parP;
|
||||||
GBACheatSetGameSharkVersion(set, 3);
|
GBACheatSetGameSharkVersion(set, GBA_GS_PARV3);
|
||||||
}
|
}
|
||||||
|
|
||||||
rgsaP = GBACheatGameSharkProbability(op1, op1);
|
rgsaP = GBACheatGameSharkProbability(op1, op1);
|
||||||
if (rgsaP > maxProbability) {
|
if (rgsaP > maxProbability) {
|
||||||
maxProbability = rgsaP;
|
maxProbability = rgsaP;
|
||||||
GBACheatSetGameSharkVersion(set, 2);
|
GBACheatSetGameSharkVersion(set, GBA_GS_GSAV1_RAW);
|
||||||
}
|
}
|
||||||
|
|
||||||
rparP = GBACheatProActionReplayProbability(op1, op1);
|
rparP = GBACheatProActionReplayProbability(op1, op1);
|
||||||
if (rparP > maxProbability) {
|
if (rparP > maxProbability) {
|
||||||
maxProbability = rparP;
|
maxProbability = rparP;
|
||||||
GBACheatSetGameSharkVersion(set, 4);
|
GBACheatSetGameSharkVersion(set, GBA_GS_PARV3_RAW);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set->gsaVersion < 3) {
|
if (set->gsaVersion < 3) {
|
||||||
|
@ -304,19 +304,19 @@ static void GBACheatParseDirectives(struct mCheatSet* set, const struct StringLi
|
||||||
for (d = 0; d < StringListSize(directives); ++d) {
|
for (d = 0; d < StringListSize(directives); ++d) {
|
||||||
const char* directive = *StringListGetConstPointer(directives, d);
|
const char* directive = *StringListGetConstPointer(directives, d);
|
||||||
if (strcmp(directive, "GSAv1") == 0) {
|
if (strcmp(directive, "GSAv1") == 0) {
|
||||||
GBACheatSetGameSharkVersion(cheats, 1);
|
GBACheatSetGameSharkVersion(cheats, GBA_GS_GSAV1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (strcmp(directive, "GSAv1 raw") == 0) {
|
if (strcmp(directive, "GSAv1 raw") == 0) {
|
||||||
GBACheatSetGameSharkVersion(cheats, 2);
|
GBACheatSetGameSharkVersion(cheats, GBA_GS_GSAV1_RAW);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (strcmp(directive, "PARv3") == 0) {
|
if (strcmp(directive, "PARv3") == 0) {
|
||||||
GBACheatSetGameSharkVersion(cheats, 3);
|
GBACheatSetGameSharkVersion(cheats, GBA_GS_PARV3);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (strcmp(directive, "PARv3 raw") == 0) {
|
if (strcmp(directive, "PARv3 raw") == 0) {
|
||||||
GBACheatSetGameSharkVersion(cheats, 4);
|
GBACheatSetGameSharkVersion(cheats, GBA_GS_PARV3_RAW);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
#include <mgba/internal/gba/cheats.h>
|
#include <mgba/internal/gba/cheats.h>
|
||||||
|
|
||||||
|
#include "gba/cheats/gameshark.h"
|
||||||
#include "gba/cheats/parv3.h"
|
#include "gba/cheats/parv3.h"
|
||||||
#include <mgba/internal/gba/gba.h>
|
#include <mgba/internal/gba/gba.h>
|
||||||
#include <mgba-util/string.h>
|
#include <mgba-util/string.h>
|
||||||
|
@ -73,17 +74,19 @@ void GBACheatReseedGameShark(uint32_t* seeds, uint16_t params, const uint8_t* t1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, int version) {
|
void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, enum GBACheatGameSharkVersion version) {
|
||||||
cheats->gsaVersion = version;
|
cheats->gsaVersion = version;
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case 1:
|
case GBA_GS_GSAV1:
|
||||||
case 2:
|
case GBA_GS_GSAV1_RAW:
|
||||||
memcpy(cheats->gsaSeeds, GBACheatGameSharkSeeds, 4 * sizeof(uint32_t));
|
memcpy(cheats->gsaSeeds, GBACheatGameSharkSeeds, 4 * sizeof(uint32_t));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case GBA_GS_PARV3:
|
||||||
case 4:
|
case GBA_GS_PARV3_RAW:
|
||||||
memcpy(cheats->gsaSeeds, GBACheatProActionReplaySeeds, 4 * sizeof(uint32_t));
|
memcpy(cheats->gsaSeeds, GBACheatProActionReplaySeeds, 4 * sizeof(uint32_t));
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,15 +200,13 @@ bool GBACheatAddGameShark(struct GBACheatSet* set, uint32_t op1, uint32_t op2) {
|
||||||
snprintf(line, sizeof(line), "%08X %08X", op1, op2);
|
snprintf(line, sizeof(line), "%08X %08X", op1, op2);
|
||||||
|
|
||||||
switch (set->gsaVersion) {
|
switch (set->gsaVersion) {
|
||||||
case 0:
|
default:
|
||||||
case 3:
|
GBACheatSetGameSharkVersion(set, GBA_GS_GSAV1);
|
||||||
case 4:
|
|
||||||
GBACheatSetGameSharkVersion(set, 1);
|
|
||||||
// Fall through
|
// Fall through
|
||||||
case 1:
|
case GBA_GS_GSAV1:
|
||||||
GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds);
|
GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds);
|
||||||
// Fall through
|
// Fall through
|
||||||
case 2:
|
case GBA_GS_GSAV1_RAW:
|
||||||
return GBACheatAddGameSharkRaw(set, o1, o2);
|
return GBACheatAddGameSharkRaw(set, o1, o2);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -12,10 +12,18 @@ CXX_GUARD_START
|
||||||
|
|
||||||
extern const uint32_t GBACheatGameSharkSeeds[4];
|
extern const uint32_t GBACheatGameSharkSeeds[4];
|
||||||
|
|
||||||
|
enum GBACheatGameSharkVersion {
|
||||||
|
GBA_GS_NOT_SET = 0,
|
||||||
|
GBA_GS_GSAV1 = 1,
|
||||||
|
GBA_GS_GSAV1_RAW = 2,
|
||||||
|
GBA_GS_PARV3 = 3,
|
||||||
|
GBA_GS_PARV3_RAW = 4
|
||||||
|
};
|
||||||
|
|
||||||
struct GBACheatSet;
|
struct GBACheatSet;
|
||||||
void GBACheatDecryptGameShark(uint32_t* op1, uint32_t* op2, const uint32_t* seeds);
|
void GBACheatDecryptGameShark(uint32_t* op1, uint32_t* op2, const uint32_t* seeds);
|
||||||
void GBACheatReseedGameShark(uint32_t* seeds, uint16_t params, const uint8_t* t1, const uint8_t* t2);
|
void GBACheatReseedGameShark(uint32_t* seeds, uint16_t params, const uint8_t* t1, const uint8_t* t2);
|
||||||
void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, int version);
|
void GBACheatSetGameSharkVersion(struct GBACheatSet* cheats, enum GBACheatGameSharkVersion version);
|
||||||
bool GBACheatAddGameSharkRaw(struct GBACheatSet* cheats, uint32_t op1, uint32_t op2);
|
bool GBACheatAddGameSharkRaw(struct GBACheatSet* cheats, uint32_t op1, uint32_t op2);
|
||||||
int GBACheatGameSharkProbability(uint32_t op1, uint32_t op2);
|
int GBACheatGameSharkProbability(uint32_t op1, uint32_t op2);
|
||||||
|
|
||||||
|
|
|
@ -301,15 +301,13 @@ bool GBACheatAddProActionReplay(struct GBACheatSet* set, uint32_t op1, uint32_t
|
||||||
snprintf(line, sizeof(line), "%08X %08X", op1, op2);
|
snprintf(line, sizeof(line), "%08X %08X", op1, op2);
|
||||||
|
|
||||||
switch (set->gsaVersion) {
|
switch (set->gsaVersion) {
|
||||||
case 0:
|
default:
|
||||||
case 1:
|
GBACheatSetGameSharkVersion(set, GBA_GS_PARV3);
|
||||||
case 2:
|
|
||||||
GBACheatSetGameSharkVersion(set, 3);
|
|
||||||
// Fall through
|
// Fall through
|
||||||
case 3:
|
case GBA_GS_PARV3:
|
||||||
GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds);
|
GBACheatDecryptGameShark(&o1, &o2, set->gsaSeeds);
|
||||||
// Fall through
|
// Fall through
|
||||||
case 4:
|
case GBA_GS_PARV3_RAW:
|
||||||
return GBACheatAddProActionReplayRaw(set, o1, o2);
|
return GBACheatAddProActionReplayRaw(set, o1, o2);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue