AR will ignore the codes it doesn't like and keep executing the working ones.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@958 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
omegadox 2008-10-25 13:35:01 +00:00
parent 2f6d41e413
commit 92f991dd2b
2 changed files with 11 additions and 5 deletions

View File

@ -91,6 +91,7 @@ void LoadActionReplayCodes(IniFile &ini)
currentCode.name = line; currentCode.name = line;
if (line[0] == '+') currentCode.active = true; if (line[0] == '+') currentCode.active = true;
else currentCode.active = false; else currentCode.active = false;
currentCode.failed = false;
continue; continue;
} }
@ -129,7 +130,7 @@ void LoadActionReplayCodes(IniFile &ini)
void ActionReplayRunAllActive() void ActionReplayRunAllActive()
{ {
if (Core::GetStartupParameter().bEnableCheats && !fail) { if (Core::GetStartupParameter().bEnableCheats && !fail) {
for (std::vector<ARCode>::const_iterator iter = arCodes.begin(); iter != arCodes.end(); ++iter) for (std::vector<ARCode>::iterator iter = arCodes.begin(); iter != arCodes.end(); ++iter)
if (iter->active) if (iter->active)
RunActionReplayCode(*iter, false); RunActionReplayCode(*iter, false);
} }
@ -140,8 +141,12 @@ void ActionReplayRunAllActive()
// For example, some authors have created codes that add features to AR. Hacks for popular ones can be added here, // For example, some authors have created codes that add features to AR. Hacks for popular ones can be added here,
// but the problem is not generally solvable. // but the problem is not generally solvable.
// TODO: what is "nowIsBootup" for? // TODO: what is "nowIsBootup" for?
void RunActionReplayCode(const ARCode &arcode, bool nowIsBootup) { void RunActionReplayCode(ARCode &arcode, bool nowIsBootup) {
code = arcode; code = arcode;
if (arcode.failed) // If the code doesn't work, skip it
return;
for (iter = code.ops.begin(); iter != code.ops.end(); ++iter) for (iter = code.ops.begin(); iter != code.ops.end(); ++iter)
{ {
cmd = iter->cmd_addr >> 24; cmd = iter->cmd_addr >> 24;
@ -167,7 +172,7 @@ void RunActionReplayCode(const ARCode &arcode, bool nowIsBootup) {
// ActionReplay program self modification codes // ActionReplay program self modification codes
if (addr >= 0x00002000 && addr < 0x00003000) { if (addr >= 0x00002000 && addr < 0x00003000) {
PanicAlert("This action replay simulator does not support codes that modify Action Replay itself."); PanicAlert("This action replay simulator does not support codes that modify Action Replay itself.");
fail = true; arcode.failed = true;
return; return;
} }
@ -202,7 +207,7 @@ void RunActionReplayCode(const ARCode &arcode, bool nowIsBootup) {
continue; continue;
default: default:
PanicAlert("Zero code unknown to dolphin: %08x",zcode); PanicAlert("Zero code unknown to dolphin: %08x",zcode);
fail = true; arcode.failed = true;
return; return;
} }
} }

View File

@ -24,9 +24,10 @@ struct ARCode {
std::string name; std::string name;
std::vector<AREntry> ops; std::vector<AREntry> ops;
bool active; bool active;
bool failed;
}; };
void ActionReplayRunAllActive(); void ActionReplayRunAllActive();
void RunActionReplayCode(const ARCode &arcode, bool nowIsBootup); void RunActionReplayCode(ARCode &arcode, bool nowIsBootup);
void LoadActionReplayCodes(IniFile &ini); void LoadActionReplayCodes(IniFile &ini);